V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
anai1943
V2EX  ›  Python

pyqt5 中使用 ffmpeg 及打包

  •  
  •   anai1943 · 190 天前 · 1657 次点击
    这是一个创建于 190 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近用 pyqt5 写了个处理视频的小应用,其中要用到 ffmpeg 提取视频音频合并到另一个视频中去。本地调试时,由于本机(mac os)安装了 ffmpeg,使用类似 ffmpy3 包可以正常使用。如果要打包成 .app 或者 .exe 时,用户机器上没有安装 ffmpeg 。

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

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

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

    直接
    subprocess.call(
    [get_ffmpeg_exe(), '-i', video_url, .............]
    )
    就能用
    anai1943
        5
    anai1943  
    OP
       190 天前
    @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
        6
    di94sh  
       190 天前
    @anai1943 #5 可能你打包的时候,别把 ffmpeg 可执行文件打包进去。用户安装的时候 再去下载对应的文件。
    di94sh
        7
    di94sh  
       190 天前   ❤️ 1
    @di94sh #6 或者你知道你要使用那个版本的 ffmpeg 的话
    https://github.com/imageio/imageio-binaries/tree/master/ffmpeg
    直接 去下载对应的 可执行文件,然后当成静态文件打包进去,不过包照样巨大。

    或者弄一个 安装时下载的策略:
    https://github.com/imageio/imageio-ffmpeg/blob/master/tasks.py#L101
    di94sh
        8
    di94sh  
       190 天前
    @di94sh #7 直接 去下载对应的 可执行文件,好像还好,一个执行文件就 几十 mb
    ysc3839
        9
    ysc3839  
       190 天前 via Android
    @AoEiuV020 FFmpeg 是 LGPL 授权的吧,用动态链接就不会被传染。
    wwqgtxx
        10
    wwqgtxx  
       190 天前
    @ysc3839 FFmpeg 本身是 LGPL 的,但是如果你需要添加一些 GPL 的依赖库比如 x265 这些就还是会传染
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1542 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 165ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    ♥ Do have faith in what you're doing.