该系列的翻译部分清单:
- 烹饪 (您在这里)
- 用Emscripten编译
- 转换AVI到MP4
从这一部分,您将学到:
- 为什么这一切都是必要的?
- 如何在Docker中编译FFmpeg
为什么这一切都是必要的?
一系列出版物的主要任务如下:
- 创建有关使用Emscripten编译JavaScript中的C / C ++库的教程(比以前编写的更加详细和有用)
- 个人备忘录
为什么是ffmpeg?
FFmpeg是一个免费的开源项目,由用于处理视频,音频和其他多媒体文件/广播的大量库和程序组成。 (来自维基百科)
提供此类功能的JavaScript库根本不存在。 如果您使用Google“ ffmpeg.js”,则会发现几种与我们将要执行的解决方案类似的解决方案:
当然可以使用这些库,但是它们有缺点:
- FFmpeg和Emscripten的使用版本已弃用
- 长期以来不支持项目
最初,我计划为这两个库之一提供支持,但是由于这些年来积累了太多的更改,因此我决定从头开始做所有事情,同时创建一个有关使用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。