我正在使用 ffmpeg 将 plex 服务器上通过无线天线捕获的 input.ts 文件硬件转码为 output.mp4。文件是 mpeg2,由于原始文件是 mpeg2,是否应将 mpeg2_qsv 指定为解码器,或者 h264_qsv 硬件是否解码 mpeg2 文件...如果不是,则在使用以下命令时是否使用软件而不是硬件解码:
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.ts -c:v h264_qsv output.mp4"
答案1
输入视频的编解码器为 mpg2(MPEG 视频版本 2)。
视频采用隔行扫描(而非逐行扫描)。
转码视频的正确命令是:
ffmpeg -c:v mpeg2_qsv -i input.ts -c:v h264_qsv output.mp4
据我所知,我们不必使用-hwaccel qsv
,因为在这个简单的转码中没有什么可以加速(除了由mpeg2_qsv
和处理的解码和编码h264_qsv
)。
测试:
构建合成输入文件(用于测试):
ffmpeg -y -f lavfi -i testsrc=size=720x480:rate=59.94:duration=3 -vf "interlace=scan=tff:lowpass=complex,format=yuv420p" -c:v mpeg2video -profile:v main -pix_fmt yuv420p -flags +ilme+ildct in.ts
使用 FFprobe 获取信息:
ffprobe in.ts
相关输出:
Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 720x480 [SAR 1:1 DAR 3:2], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
转码:
ffmpeg -y -c:v mpeg2_qsv -i in.ts -c:v h264_qsv out.mp4
我收到以下警告消息(但输出文件“可播放”):
[h264_qsv @ 00000260ccae6980] 编码期间警告:视频参数不兼容(5)
最后一条消息重复了 83 次
[mpeg2_qsv @ 00000260cca35080] 解码调用未消耗任何数据:输入时需要更多数据(-10)
[h264_qsv @ 00000260ccae6980] 编码期间警告:视频参数不兼容(5)
[mpeg2_qsv @ 00000260cca35080] 解码调用未消耗任何数据:输入时需要更多数据(-10)
[h264_qsv @ 00000260ccae6980] 编码期间警告:视频参数不兼容(5)
[mpeg2_qsv @ 00000260cca35080] 解码调用未消耗任何数据:输入时需要更多数据(-10)
探测输出文件:
ffprobe out.mp4
相关输出:
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x480 [SAR 1:1 DAR 3:2], 789 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
解码 mpeg2 视频编解码器对 CPU 的要求并不高,因此,如果无法mpeg2_qsv
正常工作,您可以使用 CPU 解码和硬件加速编码:
ffmpeg -i input.ts -c:v h264_qsv output.mp4