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
,但编码速度仍然足够快。
我会更新这个问题
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
,但编码速度仍然足够快。