如何使用ffmpeg在视频流上叠加来自管道的图像序列?

时间:2018-06-07 09:55:31

标签: ffmpeg pipe

我试图找出ffmpeg的问题。 我有以下安装: - DeckLink Mini Recorder卡(用于HDMI输入) - DeckLink迷你监视器卡(用于HDMI输出)

我已成功设法从Decklink卡获取HDMI输入,并使用以下命令将输出原样输出到输出卡:

ffmpeg -f decklink -video_input hdmi -raw_format yuv422p10 -i "DeckLink Mini Recorder" -f decklink -pix_fmt uyvy422 "DeckLink Mini Monitor"

我尝试添加一个复杂过滤器来添加图像的叠加层,使用以下命令,它可以工作:

ffmpeg -f decklink -video_input hdmi -raw_format yuv422p10 -i "DeckLink Mini Recorder" -i ./tools/bin/windows/2.png -y -filter_complex "[0:1][1:0]overlay=10:10" -f decklink -pix_fmt uyvy422 "DeckLink Mini Monitor"

我从decklink记录器获得实时馈送,图像被添加到流中,并将其输出到输出HDMI卡。一切似乎都有效。

现在我尝试将静态图像路径更改为使用stdin(pipe:0),并且我有一个工具可以不断地将PNG图像传输到stdout: ffmpeg -f decklink -video_input hdmi -raw_format yuv422p10 -i "DeckLink Mini Recorder" -i pipe:0 -y -filter_complex "[0:1][1:0]overlay=10:10" -f decklink -pix_fmt uyvy422 "DeckLink Mini Monitor"

我输出HDMI卡的结果是第一帧的静态图像。 ffmpeg的输出现在也改变了,看起来它卡在流的第一秒:

``` frame = 30 fps = 7.4 q = -0.0 size = N / A time = 00:00:01.00 bitrate = N / A speed = 0.247x

{frames:30,    currentFps:7,    currentKbps:NaN,    targetSize:NaN,    时间标记:' 00:00:01.00' } ```

它只保留在00:00:01.00上,永不改变。

我试图找到问题,并做了以下事情:

  • 尝试流式传输Decklink Recorder - > static png file overlay - > Decklink Monitor = IS WORKS

  • 尝试流式传输静态png文件 - > Decklink Monitor = IS WORKS

  • 尝试流管:0(PNG文件) - > Decklink Monitor = IS WORKS

  • 尝试流式传输Decklink Recorder - >管道:0(PNG文件覆盖) - > RAW AVI文件工作

唯一的问题是: - 试图流Decklink Recorder - > pipe:0(PNG文件)overlay - > Decklink Monitor 不工作

我怀疑Decklink输出更严格,我的pipe:0 PNG图像不稳定,两者的组合导致它冻结。

知道怎么解决吗? :(

谢谢!

1 个答案:

答案 0 :(得分:0)

我会先试试这个

ffmpeg -f decklink -video_input hdmi -raw_format yuv422p10 -i "DeckLink Mini Recorder" \
       -framerate 1/10 -i pipe:0 \
    -y -filter_complex "[1]fps=5[i];[0:1][i]overlay=10:10" \
       -f decklink -pix_fmt uyvy422 "DeckLink Mini Monitor"

其中10中的1/10表示通过管道发送的图像之间的大致持续时间(以秒为单位)。