目前,我正在将 .flv flash 文件转换为 .webm 和 .mp4 文件,以便与 HTML5 视频播放器一起使用。
_
我对 WEBM 使用这个 ffmpeg 命令:ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm
效果很好,文件大小保持相对不变(重要)。
_
对于 MP4 我使用以下内容: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4
它可以完美地转换为 .mp4 并避免任何质量损失,但文件大小几乎增加了三倍。
什么 ffmpeg 公式可用于转换为 MP4,而不会损失太多质量并防止文件大小变大?
答案1
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4
您必须指定使用的视频编解码器。在您的命令中,您没有指定-vcodec
,-c:v
因此 ffmpeg 使用 MP4 的默认编解码器 ( mpeg4
),其压缩效率不是很好。尝试改用 libx264 并设置 CRF,即质量级别(越低越好,默认值为 23,合理的值介于 18 和 28 之间)。
使用 libx264 编码有点复杂,所以你应该查阅H.264 编码指南。
您还需要指定-strict experimental
,否则您可能会得到:“编码器‘aac’是实验性的,但实验性的编解码器未启用,如果您想使用它,请添加‘-strict -2’。”
答案2
此命令仅更改容器,而不重新编码
ffmpeg -i input.flv -codec copy output.mp4
答案3
根据本指南,将 FLV 转换为 MP4 而无需任何 AV 重新编码的正确命令是:
ffmpeg -i input.flv -c copy -copyts output.mp4
对我来说,在所有情况下,它都能完美地处理 AVC 视频和 AAC 或 MP3 音频。
答案4
使用 ffmpeg 时,我收到使用 avconv 的弃用警告。使用 avconv 我得到了不错的结果:
avconv -i 输入文件.flv -map 0 -c:v libx264 -c:a 复制输出文件.mp4
阅读man avconv
更多信息。