与ffmpeg一起使用自动方面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与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的流中将方面更改,则输出图像仍包含黑色broder,并且边框之间的图像方面为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

以上是关于与ffmpeg一起使用自动方面的主要内容,如果未能解决你的问题,请参考以下文章

将 FFmpeg 与 Android-NDK 一起使用

使用 FFmpeg 通过管道输出视频片段

如何通过传递文件对象(而不是磁盘上文件的位置)将 ffmpeg 与 Python 一起使用

GStreamer 与 FFmpeg

将ffmpeg与python一起使用,在找到END元素之前输入缓冲区已耗尽

片段内的片段不能与 ScrollView 一起使用