【问题标题】:FFMPEG image not updatingFFMPEG 图像未更新
【发布时间】:2017-10-31 13:27:23
【问题描述】:

输入文件

  1. 由 Python 脚本每 5 秒更新一次的叠加图像
  2. 一个小的 MP4 文件,将由 concat 输入循环
  3. 作为音频源的 MP3 文件


命令(更新)

这是我目前用来组合和流式传输输入的命令。

ffmpeg -re -i music.mp3 -f concat -i videoincludes.txt
-r 1 -loop 1 -f image2 -i overlay.png
-c:v libx264 -c:a aac -shortest -crf 23 -pix_fmt yuv420p
-maxrate 2500k -bufsize 2500k -preset ultrafast -r 30 -g 60 -b:v 2000k -b:a 192k -ar 44100
-filter_complex "[1:v][2:v] overlay=0:0" -map 0:a -strict -2
-f flv rtmp://a.rtmp.youtube.com/live2/{key}

Als 尝试使用 -framerate 1 而不是 -r 1


问题

所以问题是图像并不总是更新。有时它会在开始时每隔几秒钟更新一次,但它会在 10-20 秒后停止更新,而日志输出没有任何差异,有时它只是不更新​​。

然而,我可以确认图像正在由 Python 脚本更新,但 FFmpeg 只是没有接收到它。

我阅读了将图像的输入格式设置为image2 应该允许它更新所以我不确定什么是错误的或者我可以做些什么来改进它。

【问题讨论】:

  • 不在我现在可以测试的 comp 上,但尝试将 -r 1 更改为 -framerate 1 并在其旁边添加 -re
  • 尝试了这两个标志,但似乎都没有解决问题:(
  • @Mulvya 所以我做了一些测试,似乎问题是图像文件与前一个文件的差异不足以触发 ffmpeg 更新文件输入,任何想法这个?
  • 我在这里测试一下。

标签: ffmpeg stream video-streaming video-encoding


【解决方案1】:

我正在做同样的任务,最后,我想,我找到了答案。 因为流彼此不同,我们必须使用 setpts=PTS-STARTPTS 重置它们的时间戳,以使它们以相同的零时间戳开始。另外,请尝试使用image2pipe 而不是image2

这是您的时间戳重置代码:

ffmpeg -re -i music.mp3 -f concat -i videoincludes.txt
-r 1 -loop 1 -f image2pipe -i overlay.png
-c:v libx264 -c:a aac -shortest -crf 23 -pix_fmt yuv420p
-maxrate 2500k -bufsize 2500k -preset ultrafast -r 30 -g 60 -b:v 2000k -b:a 192k -ar 44100
-filter_complex "[1:v]setpts=PTS-STARTPTS[out_main]; [2:v]setpts=PTS-STARTPTS[out_overlay]; [out_main][out_overlay]overlay=0:0" -map 0:a -strict -2
-f flv rtmp://a.rtmp.youtube.com/live2/{key}

ps,我认为,-r-framerate 不再需要了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多