我想使用ffmpeg工具转码视频流并仅更改视频流分辨率,即视频和音频参数应保持不变。
根据ffmpeg的手册页,以下命令行应该提供所需的结果:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -s WxH output.avi
输入流的视频编解码器与avi容器兼容。
实际结果是分辨率保持不变,似乎只是在avi容器中重新打包了流。
输出流的分辨率在没有-vcodec copy
选项的情况下成功更改,但视频编解码器已更改:h264(约束基线) - > mpeg4(简单简介)。
答案 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
(或slower
,veryslow
),这样可以提供更好的压缩效果。
在您的情况下并不重要,因为您的输入使用了Constrained Baseline配置文件,但请注意,至少在使用B图片时,AVI中的H.264不受支持。基线不支持B图片,所以你应该没事。如果您使用Main配置文件或上述任何内容,可能会发生某些设备或播放器无法播放文件。我宁愿将它复制到MP4或MKV容器中,特别是如果你的输入文件是MP4的话。