您可以通过 RTMP 从 ffmpeg 流式传输到 YouTube。
对于您的 ffmpeg 命令中的输出参数,只需传递您打算流式传输到的 YouTube RTMP 地址,然后是您唯一的 YouTube 流密钥。
例子:
ffmpeg -i <input> [additional arguments] -f flv rtmp://x.rtmp.youtube.com/live2/STREAM_KEY
请注意,YouTube 可能无法识别流,除非它有伴随的音频;你可以使用 ffmpeg 中的anullsrc 过滤器来产生一个空的音频流。
您需要调整比特率和其他参数,以在质量与您的计算机和网络可以处理的内容之间取得平衡。
有关使用 ffmpeg 进行流式传输的更多信息:
正如@szatmary 所评论的,您可以将原始帧通过管道传输到标准输出,并让 ffmpeg 从标准输入中读取它。
我能够在我的个人 YouTube 频道上进行直播。它循环播放红色、绿色、蓝色帧每秒改变颜色:https://www.youtube.com/watch?v=cfWbDwrmCYA
我使用以下 Python 脚本实现了它(取决于 Pillow):
import os
import itertools
import PIL
from PIL import Image
from PIL import ImageColor
colors = itertools.cycle([ImageColor.getrgb('red'), ImageColor.getrgb('green'), ImageColor.getrgb('blue')])
while True:
color = next(colors)
for i in range(30):
os.write(1, Image.new('RGBA', [640, 360], color).tobytes())
然后我在终端中使用 PATH 中的脚本和 ffmpeg 运行它:
python3 script.py | \
ffmpeg \
-f rawvideo \
-vcodec rawvideo \
-s 640x360 \
-pix_fmt rgba \
-r 30 \
-i - \
-f lavfi \
-i anullsrc \
-c:v libx264 \
-b:v 1M \
-f flv \
rtmp://x.rtmp.youtube.com/live2/STREAM_KEY
以上是可执行的;这是一个 pastebin,每个参数旁边都有 cmets 描述它们(不可执行):https://pastebin.com/3G2y0tjm
最后要注意的两件事:
我尝试使用 Pillow ImageMode 'RGB',我认为它与 ffmpeg pix_fmt rgb8 相对应,但这会产生损坏的帧。确保两种像素格式匹配。
YouTube 抱怨 ffmpeg 流比实时 fps 更快(在“30fps”流上约为 350fps)。您可能需要某种方式来包含睡眠功能或其他东西,并对其进行调整以匹配您所需的 fps。
来源: