如何通过仅更改分辨率来转码视频流?

时间:2013-05-03 12:11:50

标签: ffmpeg

我想使用ffmpeg工具转码视频流并仅更改视频流分辨率,即视频和音频参数应保持不变。

根据ffmpeg的手册页,以下命令行应该提供所需的结果:

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

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

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

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

1 个答案:

答案 0 :(得分: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(或slowerveryslow),这样可以提供更好的压缩效果。

  • 在您的情况下并不重要,因为您的输入使用了Constrained Baseline配置文件,但请注意,至少在使用B图片时,AVI中的H.264不受支持。基线不支持B图片,所以你应该没事。如果您使用Main配置文件或上述任何内容,可能会发生某些设备或播放器无法播放文件。我宁愿将它复制到MP4或MKV容器中,特别是如果你的输入文件是MP4的话。