我如何使用 FFmpeg 转换some.flv
或确保该视频可以在 JW Player 中播放和搜索some.avi
?some.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"