我尝试了这里的命令:https://trac.ffmpeg.org/wiki/Hardware/QuickSync:
ffmpeg -hwaccel qsv -c:v hevc_qsv -i input.mp4 -vf 'vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080' -c:v h264_qsv output.mp4
并将 hevc_qsv 替换为 h264_qsv:
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -vf 'vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080' -c:v h264_qsv output.mp4
这是我得到的输出:
WARNING: defaulting child_device_type to AV_HWDEVICE_TYPE_DXVA2 for compatibility with old commandlines. This behaviour will be removed in the future. Please explicitly set device type via "-init_hw_device" option.
Stream mapping:
Stream #0:0 -> #0:0 (h264 (h264_qsv) -> h264 (h264_qsv))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[AVFilterGraph @ 0000016db059aac0] No such filter: 'scale_qsv=w=1920:h=1080'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
[aac @ 0000016db0c60740] Qavg: 65536.000
[aac @ 0000016db0c60740] 2 frames left in the queue on closing
Conversion failed!
我使用的计算机配备了英特尔第 11 代 i5-1135G7,我知道它支持 QSV 编码器。
答案1
以下命令有效(针对特定的硬件和软件配置):
ffmpeg -y -init_hw_device qsv=hw,child_device_type=dxva2 -hwaccel qsv -hwaccel_output_format qsv -c:v h264_qsv -i input.mp4 -vf "vpp_qsv=framerate=60,scale_qsv=w=640:h=480" -c:v h264_qsv output.mp4
为测试而构建input.mp4
:解码
器h264_qsv
不支持yuv444p
像素格式(至少我的硬件不支持)。
为了确保像素格式正确yuv420p
,构建input.mp4
文件(用于测试):
ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=10:duration=10 -vcodec libx264 -pix_fmt yuv420p input.mp4
用于测试的软件配置:
- Windows 10,带有更新的 Intel HD Graphics 驱动程序。
- FFmpeg 版本 5.0.1-full_build-www.gyan.dev
用于测试的硬件配置:
- 英特尔酷睿 i7 Gen 6(iGPU:英特尔高清显卡 530)。
- 主显示器连接至英特尔 GPU(当 NVIDIA GPU 也存在时)。
注意,
有一条警告信息:
[h264_qsv @ 0000025ac57dc040] 解码调用未消耗任何数据:输入时需要更多数据(-10)
但输出好像没什么问题。