创建可用于 HTTP 流式传输的 MP4 视频

创建可用于 HTTP 流式传输的 MP4 视频

我如何使用 FFmpeg 转换some.flv或确保该视频可以在 JW Player 中播放和搜索some.avisome.wmv

答案1

这是对您@abrahab 的最后一条评论的回答。

您不需要mp4box文件即可通过 nginx 对其进行伪流式传输。MP4 流式传输模块会处理它,而不管 moov 原子的位置如何(mp4box将 moov 原子移至文件开头)。


现在,对于 500 服务器错误,您是否在 mp4box 中使用了“-frag”选项?MP4 流式传输模块无法读取碎片化的 MP4 文件。mp4box伪流式传输的良好用途是交错视频以便更好地搜索。Moov 原子移位是一个额外的优势。

mp4box我总是对FFmpeg 编码的文件这样做

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

默认情况下,这也会将 MP4 文件以 500 毫秒的块形式交错。

答案2

MP4 中的 H.264

通常,您需要在 MP4 容器内创建 x264 视频。基本上任何设备和浏览器都支持此选项。

以下内容应该足够了。确保替换输入名称和 CRF 选项。后者设置质量,合理的值范围从 19 到 25 - 值越低表示质量越好,但比特率也越高:

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

您还可以使用手刹如果您喜欢 GUI 方式,则可以使用此方式进行编码。

使用faststart选项

现在,你需要做的是移动 MP4 容器的MOOV原子回到开头。这个原子(本质上是 MP4 容器中的数据单元)将包含有关视频/音频流本身的重要元数据。-movflags faststart应该就是这样做的。

如果您的 FFmpeg 版本没有此选项,请考虑升级。如果您无法升级,您可以使用以下任何工具实现相同的目的:

  • 索引交换器,Adobe AIR 应用程序

  • MP4盒,免费且开源,运行类似以下的命令,您可以在其中更改间隔(此处为 500):

    mp4box -inter 500 input.mp4

  • Python 中的 qt-faststart,它可以在安装了 Python 的任何地方运行。

    qtfaststart input.mp4

就是这样。

控制比特率/质量

当然,对于流媒体,您可能实际上希望将比特率限制在一定范围内。您可以在我关于速率控制方法的博客文章

例如,通过添加-maxrate 2M -bufsize 2M编码选项,您可以将编码限制为 2 Mbit/s,这可能足以满足 720p 视频的需求。当然,所需的比特率取决于内容的复杂程度。这需要反复试验。

答案3

您可以简单地转换非流式传输的 AVI 或 MP4,也无需重新编码所有内容,只需执行以下操作:

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

没有必要重新编码任何东西,因为只需要移动 moov 原子。

答案4

你可以用 ffmpeg 尝试一下:

ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"

相关内容