如何使用 ffmpeg 创建可流式音频文件?

Gab*_*vay 5 mp4 ffmpeg stream audio-streaming

我正在尝试使用 FFMpeg 写入可流式传输(碎片?)的 mp4 文件。但该格式的FFMpeg行为默认-f mp4不是这个。

以这个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 
Run Code Online (Sandbox Code Playgroud)

结果是一个不可流式传输的文件(将其放在服务器上并尝试在浏览器中加载它。它仅在完全下载后才启动)。对于在下载完成之前可以启动的原始文件,不会发生这种情况。

我还尝试使用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
Run Code Online (Sandbox Code Playgroud)

但没有任何帮助。即使输出文件看起来与原始文件非常相似(文件格式框、示例表框等),生成的文件也不可流式传输。

Gab*_*vay 4

我找到了解决方案。-movflags faststart仅使用格式参数mp4。完整的命令是:

ffmpeg -i aac_lc_in.m4a -strict -2 -codec copy -f mp4 -movflags faststart aac_lc_out.m4a
Run Code Online (Sandbox Code Playgroud)

现在,aac_lc_out.m4a只要您单击“播放”,浏览器就会播放该文件。