我尝试使用英特尔核心 GPU 来加速 ffmpeg 视频转码(通过 RTSP 从摄像机提取视频,转换为自适应比特率 HLS 块)。
ffmpeg-hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128-y -rtsp_transport tcp -i rtsp://管理员:[电子邮件保护]/1/1 -filter_complex “[0:v]split=2[v0][v1];[v0]scale=w=1920:h=1080[v0out];[v1]scale=w=1280:h=720[v1out]” -map [v0out] -c:v:0 h264 -crf 17 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 16384k -g 48 -sc_threshold 0 -keyint_min 48 -map [v1out] -c:v:1 h264 -crf 20 -b:v:1 2800k -maxrate:v:1 2996k -bufsize:v:1 9600k -g 48 -sc_threshold 0 -keyint_min 48 -c:a 复制 -f hls -hls_time 2 -hls_segment_type mpegts -hls_flags delete_segments+independent_segments+omit_endlist -hls_list_size 10 -master_pl_name index.m3u8 -hls_segment_filename stream_%v/chunk_%02d.ts -var_stream_map v:0 v:1 stream_%v/index.m3u8
参数大胆的被添加以使用 GPU。此命令输出以下错误:
Impossible to convert between the formats supported by the filter 'Parsed_split_0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
虽然以下命令行运行良好:
ffmpeg -y -threads 1 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -rtsp_transport tcp -i rtsp://admin:[电子邮件保护]/1/1 -编解码器:v h264_vaapi out.mp4
有人能帮忙找出 HLS 自适应比特率编码的正确参数吗?谢谢!
PS,正如讨论的那样这里,使用-vf 'format=nv12,hwupload'
可能会解决这个问题,但是,我不知道如何使用语法使用该过滤器-filter_complex
。
答案1
感谢@Rotem,使用scale_vaapi
和h264_vaapi
一起解决了问题。完整的命令行是:
ffmpeg-hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128-y -rtsp_transport tcp -i rtsp://管理员:[电子邮件保护]/1/1 -filter_complex“[0:v]拆分=2[v0][v1];[v0]scale_vaapi=w=1920:h=1080[v0输出];[v1]scale_vaapi=w=1280:h=720[v1out]" -map [v0out] -c:v:0h264_vaapi-crf 17 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 16384k -g 48 -sc_threshold 0 -keyint_min 48 -map [v1out] -c:v:1h264_vaapi-crf 20 -b:v:1 2800k -maxrate:v:1 2996k -bufsize:v:1 9600k -g 48 -sc_threshold 0 -keyint_min 48 -c:a copy -f hls -hls_time 2 -hls_segment_type mpegts -hls_flags delete_segments+independent_segments+omit_endlist -hls_list_size 10 -master_pl_name index.m3u8 -hls_segment_filename stream_%v/chunk_%02d.ts -var_stream_map v:0 v:1 stream_%v/index.m3u8
中的论点加粗字体关键是使用 Intel HD Graphics 硬件加速,同时避免我在问题中发布的错误消息。