从1开始打造的云转码-Ffmpeg的问题

code · 2020-02-23

题记

由上一篇中的一个需求(ffmpeg安装的问题),简单思考了下如何在不安装的情况下使用ffmpeg呢?

ffmpeg从哪来?

ffmpeg不多介绍,强大的功能是他能使用的如此广泛的原因之一。不过因为全部市面上可见的操作系统都不会内置,需要额外的安装操作,这对于懒一些的用户来说是不可接受的,那么怎么办?

1 脚本中增加【自动】安装的流程?

对于一个觉得shell是反人类的developer来说,这是不可接受的

2 下载预编译的ffmpeg

无论对developer还是对user来说,没有【编译流程】或者叫做【急速安装】的功能都是比较优化的(虽然有人说在自己的平台上定制会”性能更好“)。既然我们已经用全栈的python了,何不启动的时候通过python自动的配置好ffmpeg的环境呢?

方案落地

预编译的ffmpeg来源有如下几个

windows: https://ffmpeg.zeranoe.com/builds/win64/static/

linux:https://johnvansickle.com/ffmpeg/releases/

osx:https://evermeet.cx/ffmpeg/

GitlabCI + Gitlab Page 的妙用

gitlab是一家良心的git服务提供商(包括我的博客也落在上面),其提供了一套强大的CI服务,可以在提交的时候自动编译、发布一些产物。官方也提供了一个静态发布的博客 demo
借助其页面发布功能,我们可以自动更新ffmpeg的最新版本,发布到gitlab page上

这是我利用gitlabCI制作的全套ffmpeg二进制文件

FFmpeg

这是发布所需的ci规则,其中 download.sh 用于下载二进制文件并解压,makeindex.sh 用于制作一个简单(漏)的首页。

before_script:
  - apt-get update -y
  - apt-get install curl -y 
  - apt-get install p7zip-full -y 
  - chmod a+x download.sh
  - chmod a+x makeindex.sh
  - PATH=$PATH:.
  - mkdir public
  - mkdir public/win32-x64
  - mkdir public/win32-ia32
  - mkdir public/linux-x64
  - mkdir public/linux-ia32
  - mkdir public/linux-arm
  - mkdir public/linux-arm64
  - mkdir public/darwin-x64
  
pages:
  stage: deploy
  script:
    - sh download.sh
    - sh makeindex.sh public
  artifacts:
    paths:
      - public
  only:
    - master

python自动下载的流程

利用request下载,然后配置到环境中就可以了,大概的流程如下:


def download_ffmpeg()
    download_url = "http://ffmpeg.down.asia/{os_platform}-{arch}/{file}".format(os_platform=os_platform, arch=arch, file=target_file)
    r = requests.get(download_url, stream=True)
    ...
download...

def setup():
    ffprob_path = get_ffprobe_path()
    target_ff_path = os.path.join(os.path.dirname(sys.executable), "ffmpeg")
    target_fp_path = os.path.join(os.path.dirname(sys.executable), "ffprobe")
    if not os.path.exists(target_ff_path):
        os.symlink(ffmpeg_path, target_ff_path)
    if not os.path.exists(target_fp_path):
        os.symlink(ffprob_path, target_fp_path)

这样一来,我们只要在合适的时机执行下这个脚本就可以了~

python ffmpeg
Theme Jasmine by Kent Liao