使用 ffmpeg 流式传输的自动方面

Auto aspect on stream with ffmpeg

我目前尝试使用以下配置每秒从 udp 流中获取图像:

ffmpeg -i udp://localhost:1234 -vf "scale=iw*sar:ih , pad=max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2" -aspect 16:9  -update 1 img.jpg

  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 1024x576 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.107.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1

如果流的第一帧是 4:3 黑色边框被添加到输出图像。如果纵横比在流中从 4:3 更改为 16:9,则输出图像仍然包含黑色边框,并且边界之间的图像纵横比为 4:3。

如果我在纵横比 16:9 时重新启动 ffmpeg,边框将从输出中移除并且输出图像看起来很好。

在控制台中,我得到以下关于流的纵横比变化的日志:

[swscaler @ 0x7fc6b1035600] deprecated pixel format used, make sure you did set range correctly

是否有解决此问题的选项。

设置过滤器以评估每帧的表达式,

ffmpeg -i udp://localhost:1234 \
       -vf "scale=iw*sar:ih:eval=frame,setsar=1,\
            pad=max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:eval=frame" \
       -aspect 16:9  -update 1 img.jpg