我正在尝试用FFMpeg编写可流(碎片化?)mp4文件。但是-f mp4
格式的FFMpeg行为的默认值不是这个。
以以下AAC-LC MP4测试文件为例,将其保存为aac_lc_in.m4a
,并运行ffmpeg
命令:
ffmpeg -y -i aac_lc_in.m4a -strict -2 -codec copy -f mp4 aac_lc_out.m4a
结果是一个不可流文件(把它放在服务器上,并尝试在浏览器中加载它)。它只有在完全下载后才会启动)。在下载完成之前可以启动的原始文件不会发生这种情况。
我也尝试使用mp4
格式参数:
-movflags frag_keyframe+empty_moov
-movflags faststart+frag_keyframe
-movflags faststart+frag_keyframe+empty_moov
-movflags faststart+rtphint+frag_keyframe
-movflags rtphint+frag_keyframe
-movflags rtphint+frag_keyframe -rtpflags latm
但是没有任何帮助。即使输出文件看起来与原始文件非常相似(文件格式框、示例表框等),生成的文件也是不可流化的。
我找到了解决方案。只对mp4
格式使用-movflags faststart
参数。完整的命令应该是:
ffmpeg -i aac_lc_in.m4a -strict -2 -codec copy -f mp4 -movflags faststart aac_lc_out.m4a
现在aac_lc_out.m4a
文件由浏览器播放,只要你点击播放