2013-05-03 63 views
2

我想使用ffmpeg工具对视频流进行转码,并仅更改视频流分辨率,即视频和音频参数应保持不变。如何通过只更改分辨率来转码视频流?

按照FFMPEG下面的命令行应提供所需的结果的人页:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -s WxH output.avi 

输入流的视频编解码器是与AVI容器兼容。

实际结果是分辨率保持不变,似乎该流只是重新包装在AVI容器中。

输出流的分辨率已成功更改,但没有-vcodec copy选项,但视频编解码器已更改:h264(约束基线) - > mpeg4(简单配置文件)。

回答

6

当你的copy视频流,你不能改变它的任何参数,因为......好吧,你正在复制它。 ffmpeg不会以任何方式触摸它,所以它不能改变尺寸,帧速率等等。

此外,ffmpeg总是选择一个默认的视频编解码器,如果你没有指定一个。对于AVI文件,这是mpeg4

如果你想H.264视频,选择-c:v libx264而不是(或-vcodec libx264这是相同的)。如果您需要保留原始配置文件,请使用-profile:v baseline

两件事情:

  • 当你改变大小,你会重新编码的视频。这降低了质量,可能会严重损害视频。为了弥补这一点,你可能需要设置一个更高的质量水平。您可以通过setting the Constant Rate Factor对默认值为23以下的任何内容执行此操作。与-crf 20。试验一下,看看你的视频是怎样的。如果你有时间,可以加上-preset slow(或slower,veryslow),这会给你更好的压缩。

  • 由于您的输入使用了约束基准配置文件,所以请注意,在AVI中的H.264未得到正确支持,至少在使用B图片时并不重要。虽然Baseline不支持B图片,所以你应该没问题。如果您使用主配置文件或以上任何内容,可能会发生该文件无法在某些设备或播放器上播放的情况。我宁愿将它复制到MP4或MKV容器中,尤其是如果您的输入文件是MP4。

+1

好的我理解了这一点。 但问题是我想以某种方式对视频流进行转码,即输入和输出的差异仅仅是分辨率。 也就是说是否有可能获得输入文件编码器的预设,使用该预设对其进行转码并仅更改分辨率? – user1051417 2013-05-03 15:46:26

+0

那么,你*有*代码转换。您无法改变“仅”视频流的分辨率。你将不得不解码,缩放,然后重新编码它,'-c:v libx264'为你做。像帧速率,像素宽高比等的其余部分将保持不变。如果您需要基线配置文件,您将不得不明确指定。 – slhck 2013-05-03 15:51:41

+0

非常感谢您的快速回复。 – user1051417 2013-05-03 15:59:11