ffmpeg转换没有损失质量

时间:2014-08-29 13:21:47

标签: ffmpeg loss

当文件类型不是flv / mp4 / webm时,我需要将所有视频转换为我的视频播放器(在网站中)。

我使用时:ffmpeg -i filename.mkv -sameq -ar 22050 filename.mp4

  解码MB 22 1,字节流(8786)

[h264 @ 0x645ee0]错误

我的观点是,我需要做什么,当我需要将文件类型:.mkv和其他(jwplayer不支持)转换为flv / mp4时没有质量损失。

4 个答案:

答案 0 :(得分:16)

不要使用-sameq, it does not mean "same quality"

此选项早已从FFmpeg中删除。这意味着您使用的是过时的版本。

使用libx264进行编码时,请使用-crf选项。这是ffmepg使用的H.264视频编码器,如果可用,它是MP4输出的默认编码器。有关详细信息,请参阅FFmpeg H.264 Video Encoding Guide

获取最近的ffmpeg

转到FFmpeg Download页面,然后在那里进行构建。 Linux,OS X和Windows都有选项。或者您可以关注其中一个FFmpeg Compile Guides。由于FFmpeg开发非常活跃,因此始终建议您使用最适合您使用的最新版本。

你将不得不接受一些质量损失

您可以使用libx264生成无损输出,但这可能会创建绝对庞大的文件,并且可能无法被浏览器解码和/或JW Player支持(我从未尝试过)。

好消息是,您可以制作视觉无损的视频。同样,文件可能有点大,但您需要在质量和文件大小之间做出选择。

使用-crf选择介于18到29之间的值。选择仍然提供可接受质量的最高数字。将该值用于您的视频。

其他事项

  • 添加-movflags +faststart。这将moov原子从文件末尾重新定位到开头。这将允许视频在仍在下载时开始播放。否则,必须先完整下载整个视频才能开始播放。

  • 添加-pix_fmt yuv420p。这将确保与所有玩家兼容的色度子采样。否则,ffmpeg默认情况下会根据几个因素尝试最小化或避免色度子采样,并且非FFmpeg播放器通常无法播放结果。

答案 1 :(得分:6)

将所有mkv转换为mp4而不会造成质量损失(实际上它只是重新打包):

for %a in ("*.mkv") do ffmpeg.exe -i "%a" -vcodec copy -acodec copy -scodec mov_text "%~na.mp4"

答案 2 :(得分:4)

使用-qscale 0代替-sameq(由FFMpeg删除):文件大小会增加,但会保持质量。

答案 3 :(得分:1)

对我来说,这是转换它的最佳方法。

ffmpeg -i {input} -vcodec copy {output}

我正在用python编写一个脚本,该脚本将多个.webm文件附加到一个.mp4。我花了10到20秒的时间才能使用以下方法转换5秒钟中的一个:

ffmpeg -i {input} -qscale 0 copy {output}

有些文件夹有500多个块。

现在,每个块只需不到一秒钟的时间。我花了5分钟的时间来转换1:20:00的长视频。