ffmpeg youtube 直播在一段时间后停止

ffmpeg youtube livestream stops after a while

我会更新这个问题

ffmpeg-版本

ffmpeg -version
ffmpeg version 4.3.1-4ubuntu1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10 (Ubuntu 10.2.0-9ubuntu2)

我运行这个命令使用ffmpeg流式传输到youtube;

ffmpeg -y -threads 12 \
-loop 1 -framerate 30 -re \
-i ./1280x720.jpg \
-i ./audio.mp3 \
-video_size 1280x720 \
-vcodec libx264 -pix_fmt yuv420p \
-b:v 4500k -maxrate 5500k -bufsize 22000k \
-preset ultrafast -crf 23 -tune stillimage \
-b:a 128k -ar 44100 -ac 2 -acodec aac \
-filter_complex "dynaudnorm=f=150:g=15" \
-r 30 -g 60 \
-f flv rtmp://a.rtmp.youtube.com/live2/xxxx 2>&1 | tee _LOG

该流在 45-53 分钟内表现出色,然后我会从 ffmpeg 收到这样的错误:

[flv @ 0x56077027cd80] Delay between the first packet and last packet in the muxing queue is 10034000 > 10000000: forcing output

然后 youtube 开始说,没有收到数据,流将结束,它确实如此。

这是完整的日志:http://0x0.st/-zUH.txt

您的 MP3 持续时间是 00:49:57.42,因此流在结束后变得混乱。使用 -stream_loop -1 循环音频并添加 -re 以实时读取输入:

ffmpeg -y \
-loop 1 -framerate 30 -re -i ./1280x720.jpg \
-re -stream_loop -1 -i ./audio.mp3 \
-c:v libx264 -pix_fmt yuv420p \
-b:v 4500k -maxrate 5500k -bufsize 22000k \
-preset ultrafast -tune stillimage \
-b:a 128k -ar 44100 -ac 2 -c:a aac \
-filter_complex "dynaudnorm=f=150:g=15" \
-g 60 -f flv rtmp://a.rtmp.youtube.com/live2/xxxx

或者,如果您希望流在音频结束时结束,请删除 -re -stream_loop -1 并添加输出选项 -shortest

不相关的更改:

  • 无需设置-threads。让 ffmpeg 自动选择。
  • -video_size 1280x720 是某些多路分解器的输入选项,在您的命令中不执行任何操作。删除。无论如何,您的输入已经是 1280x720:否则,请参阅 Resizing videos with ffmpeg to fit a specific size
  • -b:v-crf 是互斥的。在你的情况下 -b:v 被忽略了。对于流式传输,您可能想使用 -b:v。删除了 -crf.
  • 您已经使用 -framerate 30 设置了帧速率,因此不需要 -r 30。已删除。
  • 建议使用最慢的 -preset,但编码速度仍然足够快。