将FFmpeg编译为WebAssembly(= ffmpeg.js):第1部分-烹饪



该系列的翻译部分清单:


  1. 烹饪 (您在这里)
  2. 用Emscripten编译
  3. 转换AVI到MP4




从这一部分,您将学到:


  1. 为什么这一切都是必要的?
  2. 如何在Docker中编译FFmpeg



为什么这一切都是必要的?


一系列出版物的主要任务如下:


  1. 创建有关使用Emscripten编译JavaScript中的C / C ++库的教程(比以前编写的更加详细和有用)
  2. 个人备忘录

为什么是ffmpeg?


FFmpeg是一个免费的开源项目,由用于处理视频,音频和其他多媒体文件/广播的大量库和程序组成。 (来自维基百科)


提供此类功能的JavaScript库根本不存在。 如果您使用Google“ ffmpeg.js”,则会发现几种与我们将要执行的解决方案类似的解决方案:



当然可以使用这些库,但是它们有缺点:


  1. FFmpeg和Emscripten的使用版本已弃用
  2. 长期以来不支持项目

最初,我计划为这两个库之一提供支持,但是由于这些年来积累了太多的更改,因此我决定从头开始做所有事情,同时创建一个有关使用Emscripten编译大型C / C ++库的教程。


如何在Docker中编译FFmpeg


首先,我们克隆FFmpeg源,并且由于使用master分支进行开发,因此我们将选择具有特定版本的分支。


在编写本教程时,FFmpeg的最新版本是4.1.4,因此我们将使用它。


$ git clone --depth 1 --branch n4.1.4 https://github.com/FFmpeg/FFmpeg 

--depth 1是可选的,但这将加快克隆速度,因为我们不需要下载所有提交。


成功克隆后,使用gcc编译源代码以确保一切正常。


当然,您可以跳过此步骤,但是根据我的经验,最好先接触构建系统。 (FFmpeg使用标准的make,比Bazel更容易移植)


可以在根目录下的INSTALL.md文件中找到编译和安装FFmpeg的说明:


#安装FFmpeg:


1.键入“ ./Configure”以创建配置。 可以通过执行`configure-help`获得配置选项的列表。


可以从FFmpeg源以外的目录运行`configure`。 为此,请传递绝对路径进行配置,例如 `/ ffmpegdir / ffmpeg /配置`。


2.现在键入`make`以构建FFmpeg。 您将需要GNU Make 3.81或更高版本。


3.键入“ make install”以安装二进制文件和库。


注意事项
---


-默认情况下,非系统依赖项(例如libx264,libvpx)处于禁用状态。


由于我们不会安装FFmpeg,因此只需要前两个步骤。


使用gcc进行编译时,我们将使用Docker创建一个环境,该环境将隔离整个过程并在不同机器上实现其统一性。


让我们在根目录中创建一个bash脚本build-with-docker.sh ,其内容如下:


 #!/bin/bash docker pull gcc:4 docker run -it \ -v $PWD:/usr/src \ gcc:9.1 \ sh -c 'cd /usr/src && ./configure --disable-x86asm && make -j4' 

--disable-x86asm需要在ffmpeg要求时添加


运行脚本:


 $ chmod +x build-with-docker.sh $ ./build-with-docker.sh 

根据您的Internet连接速度和硬件,编译大约需要10到30分钟。


请注意,由于gcc 9.1比以前的版本更严格,您会看到许多警告。 这很正常。


如果一切成功完成,则可以尝试运行ffmpeg


 $ ./ffmpeg 


 $ docker run -it -v $PWD:/usr/src gcc:9.1 /usr/src/ffmpeg 

您会看到类似以下内容:


ffmpeg版本n4.1.4版权所有2000–2019 FFmpeg开发人员
使用gcc 9.1.0(GCC)内置
配置:-disable-x86asm
libavutil 56.22.100 / 56.22.100
libavcodec 58.35.100 / 58.35.100
libavformat 58.20.100 / 58.20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
超快速音频和视频编码器
用法:ffmpeg [选项] [[infile选项] -i infile] ... {[outfile选项] outfile} ...


使用-h获得完整的帮助,或者甚至更好地运行'man ffmpeg'


在下一部分中,我们将开始使用Emscripten编译FFmpeg。

Source: https://habr.com/ru/post/zh-CN473098/


All Articles