2

我想使用 ffmpeg 工具对视频流进行转码,只更改视频流的分辨率,即视频和音频参数应该保持不变。

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

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

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

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

输出流的分辨率不带-vcodec copy选项更改成功,但视频编解码器更改:h264(Constrained Baseline)-> mpeg4(Simple Profile)。

4

1 回答 1

6

当您copy制作视频流时,您无法更改其任何参数,因为……好吧,您正在复制它。ffmpeg不会以任何方式触摸它,因此它无法更改尺寸、帧速率等。

此外,ffmpeg如果您未指定,请始终选择默认视频编解码器。对于 AVI 文件,即mpeg4.

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

两件事情:

  • 当您更改大小时,您将重新编码视频。这会降低质量并可能严重损害视频。为了弥补这一点,您可能需要设置更高的质量级别。您可以通过将恒定速率因子设置为低于默认值 23 的任何值来执行此操作,例如使用-crf 20. 试验一下,看看你的视频是什么样子的。如果您有时间,请添加-preset slow(或slower, veryslow),这将为您提供更好的压缩。

  • 在您的情况下这并不重要,因为您的输入使用约束基线配置文件,但请注意 AVI 中的 H.264 未得到正确支持,至少在使用 B 图片时。Baseline 不支持 B 图片,所以应该没问题。如果您使用主配置文件或以上任何内容,则可能无法在某些设备或播放器上播放文件。我宁愿将它混合到 MP4 或 MKV 容器中,特别是如果您的输入文件仍然是 MP4。

于 2013-05-03T15:30:32.850 回答