本节摘要:FFmpeg 采用 LGPL 与 GPL 双许可,加上 H.264/HEVC 的专利授权,构成了商用前必须搞清的两层规则。本节讲清动态链接与静态链接的区别、GPL 传染性的边界,以及编码专利的规避思路。
阅读完本节,你应当能够:
某团队用 FFmpeg 做了一款闭源商业播放器,打包时图省事,把 libavcodec 静态编译进可执行文件,还开启了 --enable-gpl 的 x264。产品上线三个月后收到权利方函件——两份麻烦同时找上门:一是 GPL 组件被静态链接进闭源软件,违反了传染条款;二是 H.264 编码涉及专利授权。
这个例子的两个层面,正是本节要拆解的全部内容:开源协议条款与编码专利授权。前者管「你怎么用别人的代码」,后者管「你的产品里能不能带 H.264 这类技术」。
FFmpeg 采用双许可。默认(不开 --enable-gpl 时)是 LGPL;开了 GPL 组件(x264、x265 等)后整体偏向 GPL。
关键区分就是第 8 章的「编译与链接」:
| 使用方式 | LGPL 组件 | GPL 组件 |
|---|---|---|
| 动态链接 | 可以,闭源商业可用 | 有传染风险 |
| 静态链接 | 需开放修改的库源码 | 基本等于整体开源 |
开源协议管代码,专利管技术本身。H.264/HEVC 的专利掌握在专利池(MPEG LA 等)手里,即使代码是免费的,商用分发含 H.264/HEVC 编码也可能需要授权费。FFmpeg 无法替你付这笔钱。
规避思路:VP9 与 AV1 是免专利的开放编码(第 5 章讲过)。选择它们就绕开了专利池,代价是兼容性与编码速度。
ffmpeg -version 看配置,--enable-gpl、--enable-libx264 开没开
协议层查「代码怎么用」,专利层查「技术带不带」。自查顺序固定:先 ffmpeg -version 看配置,再确认链接方式,最后问产品边界。两个层面都过了,才叫真合规。
⚠️ 常见坑:以为「开源=免费随便用」;静态链接了 GPL 组件还发布闭源二进制;产品里带了 H.264 编码就上线商用——这三条是 FFmpeg 合规事故的最高发区。拿不准时,找法律意见而不是凭感觉。
💡 关键直觉:FFmpeg 的许可规则可以浓缩成一句话——「动态链接 LGPL 组件最安全,别碰 GPL 静态链接,商用带编码先问专利」。把这句话印在脑子里,能避开 90% 的坑。
把合规检查变成自动化的一部分,比每次人工判断可靠得多。可以写一个简单的检查清单脚本,在每次发布前跑一遍:
# 检查你即将分发的 FFmpeg 是怎么编译的 ffmpeg -version 2>&1 | grep -E "configuration|enable-gpl|libx264" # 检查你的产物用了哪些编码器(如果有 h264/hevc 编码器,商用要留意) ffprobe -v error -show_entries stream=codec_name -of csv=p=0 output.mp4
把这些命令固化到 CI 的发布流程里,每次发版自动跑一遍,把结果存档。真到被问询的那一天,你有据可查;更重要的是,强制自动化会倒逼团队在选型时就把合规考虑进去——比如优先 AV1 免专利方案、动态链接库而不是静态编译。合规不是一次性的法务审查,而是一个持续的过程约束。
协议问题最容易在「边界情形」上含糊,这里澄清三个高频疑问。
第一,FFmpeg 用在内部工具里,不对外分发,算违规吗? 大多数情况下内部使用不构成「分发」,合规压力小很多。但如果你的内部工具是卖给别的公司的软件,那依然属于分发。
第二,只解码不编码,专利问题还存在吗? H.264 的专利池主要针对编码器,解码端也有授权安排但通常由设备制造商承担。商用产品里集成解码器,仍然建议确认授权链条,尤其是进入欧美市场。
第三,开源了自己写的部分,是不是就没事了? 开源不等于合规。GPL 传染性看的是「链接方式」和「是否分发」,你把自己的代码开源了,但静态链接了 GPL 组件再分发闭源二进制,问题依然在。
这些边界情形不需要你现在就搞透,但知道「问题存在、边界在哪」,等真的遇到时就不会抓瞎。
最后一节,看管线往哪演化——技术趋势与投入判断。