You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更换FFmpeg的h264_v4l2m2m编码器后画面比例异常求助

解决h264_v4l2m2m编码器输出1:1画面比例的问题

你的问题出在硬件编码器h264_v4l2m2m对视频元数据(SAR/DAR)的处理逻辑和libx264不同——libx264会自动继承输入的宽高比元数据,而h264_v4l2m2m可能默认强制样本宽高比(SAR)为1:1,导致YouTube错误解析画面为正方形。以下是可行的解决方法:

方法1:编码前强制设置正确的宽高比元数据

在滤镜链中明确设置SAR(样本宽高比)为1:1、DAR(显示宽高比)为16:9,确保编码器输出正确的元数据:

-f v4l2 \
-input_format yuyv422 \
-video_size 1280x720 \
-framerate 30 \
-i /dev/video0 \
-f lavfi \
-i anullsrc=r=44100:cl=stereo \
-vf "setsar=1,setdar=16/9" \
-c:v h264_v4l2m2m \
-b:v 2500k \
-c:a aac \
-b:a 128k \
-ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/[STREAM-KEY]

方法2:用比特流滤镜修正编码后的元数据

如果编码器仍强制修改元数据,可在编码后通过比特流滤镜直接修正H.264流的SAR和DAR:

-f v4l2 \
-input_format yuyv422 \
-video_size 1280x720 \
-framerate 30 \
-i /dev/video0 \
-f lavfi \
-i anullsrc=r=44100:cl=stereo \
-c:v h264_v4l2m2m \
-b:v 2500k \
-bsf:v h264_metadata=sar=1/1,dar=16/9 \
-c:a aac \
-b:a 128k \
-ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/[STREAM-KEY]

方法3:确保编码器使用正确的输入分辨率

部分情况下,硬件编码器可能未正确识别输入分辨率,可在编码器参数中再次指定-video_size(注意放在-c:v之后):

-f v4l2 \
-input_format yuyv422 \
-video_size 1280x720 \
-framerate 30 \
-i /dev/video0 \
-f lavfi \
-i anullsrc=r=44100:cl=stereo \
-c:v h264_v4l2m2m \
-video_size 1280x720 \
-b:v 2500k \
-vf "setsar=1" \
-c:a aac \
-b:a 128k \
-ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/[STREAM-KEY]

补充说明

这不是h264_v4l2m2m的“已知限制”,而是硬件编码器对元数据的处理更严格,需要明确指定宽高比参数,避免自动覆盖。你之前尝试的滤镜未生效,可能是因为滤镜顺序错误,或者编码器在滤镜之后修改了元数据——上述方法通过提前设置元数据或事后修正,确保YouTube能正确识别16:9比例。

内容的提问来源于stack exchange,提问作者LycoReco2007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:24