在分布式系统中使用ffmpeg -- python

ffmpeg是常用的用来处理视频的工具,它的功能非常强大,包含了丰富的音视频处理接口,如视频格式转换,音视频分离、添加水印等。出于效率上的考虑,ffmpeg是基于c编写的,所以在使用之前通常需要编译安装。想要在分布式集群上面用ffmpeg,需要在每台机器上安装ffmpeg或者用预先编译好的包。本文将详细介绍如何在分布式集群上使用预先编译好的ffmpeg包。

1、imageio-ffmpeg自动下载ffmpeg可执行文件

     如果你在python中调用ffmpeg功能,可以使用imageio,imageio包含一个imageio-ffmpeg库(https://github.com/imageio/imageio-ffmpeg)。 imageio-ffmpeg是ffmpeg的python封装。在使用imageio-ffmpeg操作视频时,如果检测到当前系统没有安装ffmpeg,会自动下载已经编译好的ffmpeg二进制可执行文件。不过这个可执行文件大约有30M,整个下载的过程会耗费较多的时间。

2、拷贝ffmpeg可执行文件到执行路径

     如果分布式集群被限制无法访问外网,或者无法接受下载ffmpeg可执行文件的耗时,是否有更好的方法?一种解决办法是把可执行文件放在运行脚本中。ffmpeg可执行文件的下载地址:https://github.com/imageio/imageio-binaries/tree/master/ffmpegffmpeg可执行文件
     下载合适的可执行文件,与运行的python脚本放在一起。在分布式集群上执行脚本的时候先把ffmpeg可执行文件拷贝到imageio-ffmpeg下载并存储ffmpeg可执行文件的目录。imageio-ffmpeg通过下面这段代码自动下载ffmpeg可执行文件到本地:

imageio.plugins.ffmpeg.download()
def download():
    """ Download the ffmpeg exe to your computer.
    """
    plat = get_platform()
    if not (plat and plat in FNAME_PER_PLATFORM):
        raise RuntimeError("FFMPEG exe isn't available for platform %s" % plat)
    get_remote_file('ffmpeg/' + FNAME_PER_PLATFORM[plat])

通过跟踪这段代码就可以知道ffmpeg可执行文件的具体下载位置。

3、修改imageio-ffmpeg获取ffmpeg exe的代码

      另一种方法是替换imageio-ffmpeg获取ffmpeg exe的脚本,site-packages/imageio/plugins/ffmpeg.py。该脚本的get_exe() 会找到ffmpeg可执行文件,并返回可执行文件的绝对路径。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值