文章目录
背景
顺手编译个ffmpeg试试,看看不同平台下谁的配置比较繁琐。
先让gpt给出个教程:
ubuntu22
使用elementary-os7.1构建,看看有几个坑要踩。
- 错误1: 依赖libavresample-dev未找到, 先无视。
- 错误2:没有nasm/yasm, 直接禁用这个特性。
./configure --prefix=/usr/local --enable-shared --disable-static --disable-x86asm
- 警告3:
apt install pkg-config
解决。 - 错误4:好吧,动态库成为了阻碍。
解决方法:
修改文件/etc/ld.so.conf, 内容追加一行 /usr/local/ffmpeg/lib/
使修改生效, 执行sudo /sbin/ldconfig
最终成功 执行 ffmpeg -version, 这是个啥版本呢(可能是nightly吧)。还有这ffmpeg就是个壳的感觉。
结论
2核的奔腾 + 虚拟机 debuff *2 , 不到半小时搞定, 还是比较快的。
ubuntu22把该有的依赖都提前预置了。
win10
不考虑子系统, 因为我打算构建exe程序。 所以使用msys2。
让gpt告诉我们新的步骤。其实过程和上面的一样。
过程
- 下载 https://www.msys2.org/ , 安装最新版。
- ms,启动
- 更新依赖
shell
pacman -Syu # 重启shell多来几遍,直到没有东西可更新
pacman -S make yasm pkg-config mingw-w64-x86_64-gcc
- 很好,configure的时候gg。
bash
# 反向操作下,把静态库都打进exe里面
./configure --prefix=/usr/local --disable-shared --enable-static -disable-doc
错误1: ./configure: line 1773: cmp: command not found
解决pacman -S diffutils
- make
有个我的疏忽, 如果你是2核心4线程的cpu, 那么应该make -j4而不是2, 不然cpu跑不满
成功编译出ffmpeg.exe, 打印ffmpeg -version 试试
但是,离开msys2环境, 在cmd中运行, 就缺少dll了。那就直接从msys2安装目录复制就行
最后试试从 flv视频流中提取 一帧 输出为图片, 没毛病,工作正常。
.\ffmpeg -i https://sample-videos.com/video321/flv/720/big_buck_bunny_720p_1mb.flv -frames:v 1 -q:v 2 output.jpg
至于如何把这两个dll集成进ffmpeg.exe, 下一期再研究。
对比结论
就ffmpeg编译过程而言, 似乎windows上更顺利些, 遇到的坑比较少,但是win10下 ./configure慢很多, 不知为何。
其实吧, msys2 + mingw64 + pacman ,体验几乎和linux一致了。当然,肯定会有一定的坑存在,遇到再说吧, 事不宜迟,还是想想下午吃什么吧。