我在使用 H.264(英特尔快速同步)编解码器在 Bandicam 上录制游戏时发现了 FFmpeg。不幸的是,我的一个视频最终被录制在 AVI 包装器中,我想以某种无损的方式将其转码为 MP4
我之所以想要更换包装器是因为 Adobe Premiere Pro CC 2017 在某种程度上不能很好地处理 AVI,当我使用 H.264 和 MP4 作为包装器导出时,整个视频看起来都坏了。
因此,我抓住 FFmpeg 并尝试使用以下命令对我的视频进行转码:
ffmpeg -i vid.avi -c:v h264_qsv -crf 10 -r 50 -c:a aac -b:a 192k -ac 2 vid.mp4
以黄色显示的错误消息是:
Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (vid.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
我非常确信 H.264(Intel Quick Sync)具有 CRF 支持,否则我可能错了,混淆了 H.264(QSV)和 libx264,后者显然支持 CRF。
有什么办法吗?我有 FFmpeg 版本 20170921-183fd30,64 位,静态。
编辑:现在的解决方法是返回到 libx264 并运行faster
,veryfast
或者superfast
,但我仍然想通过使用英特尔快速同步来节省相当多的时间。
答案1
QSV 编码器没有 CRF 参数。等效的速率控制方法是 LA_ICQ。
https://software.intel.com/en-us/articles/common-bitrate-control-methods-in-intel-media-sdk:
x264(FFmpeg 的默认 h264 实现)的默认速率控制是 CRF。这允许比特率波动以保持目标质量水平。Media SDK 的 ICQ 和 LA_ICQ 是此类算法的最佳匹配。
要调用它,需要以下形式的命令:
ffmpeg -i in.mp4 -c:v h264_qsv -global_quality 10 -look_ahead 1 out.mp4
look_ahead
应该是1
。global_quality
可以从 1 到 51。值越低表示质量越好。~25 应该相当于 x264 CRF 23。