pyqt5 中使用 ffmpeg 及打包

2021-07-15 09:51:20 +08:00
 anai1943
最近用 pyqt5 写了个处理视频的小应用,其中要用到 ffmpeg 提取视频音频合并到另一个视频中去。本地调试时,由于本机(mac os)安装了 ffmpeg,使用类似 ffmpy3 包可以正常使用。如果要打包成 .app 或者 .exe 时,用户机器上没有安装 ffmpeg 。

试过根据系统平台先下载好对应的 ffmpeg 可执行程序,和应用的安装包一起发给用户,应用内根据设置的 ffmpeg 路径或者默认应用存放目录去调用 ffmpge,可以正常使用,但是这样就会有两个可执行文件。。能否打包到一个可执行文件或者有其它好点的解决方案,感谢回复!
2915 次点击
所在节点    Python
10 条回复
AoEiuV020
2021-07-15 09:54:29 +08:00
比如直接使用 ffmpeg 静态库,直接调方法,
但合起来就要被 GPL 病毒感染了,
no1xsyzy
2021-07-15 10:10:20 +08:00
要求用户同时安装 ffmpeg,避免每个软件自己带一份(
两个可执行文件也没什么问题, $approot/bin 下面东西多了去的软件多了去了。
wasd6267016
2021-07-15 10:37:48 +08:00
把路径藏深点就行 别让用户乱点到问题就不大
di94sh
2021-07-15 11:36:53 +08:00
https://github.com/imageio/imageio-ffmpeg

可以试试这个库,会自动下载对应平台的二进制版本到 site-packages/imageio-ffmpeg 下面,只有一个可执行文件,

然后调用 get_ffmpeg_exe 这个方法就可以拿到路径,

直接
subprocess.call(
[get_ffmpeg_exe(), '-i', video_url, .............]
)
就能用
anai1943
2021-07-15 16:23:16 +08:00
@di94sh 谢谢你的回答,用你这个思路试了下

import imageio_ffmpeg
from ffmpy3 import FFmpeg

FFmpeg(executable=imageio_ffmpeg.get_ffmpeg_exe(), global_options='-y', inputs={opath:None, self.videoPaths[row]: None}, outputs={root+'_tmp'+ext: '-c copy -map 0:v:0 -map 1:a:0'})

可以正常使用,用 pyinstaller 打包应用的时候,在这卡住了 INFO: Building PKG (CArchive) PKG-00.pkg ,检查 PKG-00.pkg 发现已经有 100 多个 G 了,还在继续增长。

去掉 import imageio_ffmpeg 后,打包正常。
di94sh
2021-07-15 16:29:35 +08:00
@anai1943 #5 可能你打包的时候,别把 ffmpeg 可执行文件打包进去。用户安装的时候 再去下载对应的文件。
di94sh
2021-07-15 16:35:26 +08:00
@di94sh #6 或者你知道你要使用那个版本的 ffmpeg 的话
https://github.com/imageio/imageio-binaries/tree/master/ffmpeg
直接 去下载对应的 可执行文件,然后当成静态文件打包进去,不过包照样巨大。

或者弄一个 安装时下载的策略:
https://github.com/imageio/imageio-ffmpeg/blob/master/tasks.py#L101
di94sh
2021-07-15 16:38:44 +08:00
@di94sh #7 直接 去下载对应的 可执行文件,好像还好,一个执行文件就 几十 mb
ysc3839
2021-07-15 18:56:25 +08:00
@AoEiuV020 FFmpeg 是 LGPL 授权的吧,用动态链接就不会被传染。
wwqgtxx
2021-07-15 22:46:12 +08:00
@ysc3839 FFmpeg 本身是 LGPL 的,但是如果你需要添加一些 GPL 的依赖库比如 x265 这些就还是会传染

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX