Вы можете вести потоковую передачу на YouTube из ffmpeg через RTMP.
В качестве выходного аргумента в своей команде ffmpeg просто передайте адрес YouTube RTMP, на который вы собираетесь передавать, а затем свой уникальный ключ потока YouTube.
Пример:
ffmpeg -i <input> [additional arguments] -f flv rtmp://x.rtmp.youtube.com/live2/STREAM_KEY
Обратите внимание, что YouTube может не распознать поток, если у него нет сопровождающего аудио; Вы можете использовать фильтр anullsrc
в ffmpeg для создания и очистки аудиосигнала.
Вы можете настроить битрейт и другие аргументы, чтобы достичь баланса качества и возможностей вашего компьютера и сети.
Дополнительная информация о потоковой передаче с помощью ffmpeg: https://trac.ffmpeg.org/wiki/StreamingGuide
Как прокомментировал @szatmary, вы можете передать необработанные кадры на стандартный вывод и заставить ffmpeg читать его из стандартного ввода.
Мне удалось создать прямую трансляцию на моем личном канале YouTube. Это циклы красной, зеленой, синей рамок, меняющие цвет каждую секунду: https://www.youtube.com/watch?v=cfWbDwrmCYA
Я добился этого с помощью следующего сценария Python (зависит от подушки):
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())
И затем я запустил это в своем терминале с помощью скрипта и ffmpeg в моем PATH:
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
Вышеприведенное является исполняемым; Вот пастбина с комментариями рядом с каждым аргументом, описывающим их (не исполняемый): https://pastebin.com/3G2y0tjm
Обратите внимание на две вещи:
I попытался использовать Pillow ImageMode 'RGB'
, который, как я предполагал, соответствовал ffmpeg pix_fmt rgb8
, но при этом получались поврежденные кадры. Убедитесь, что оба пиксельных формата соответствуют друг другу.
YouTube пожаловался на скорость потоковой передачи ffmpeg быстрее, чем в режиме реального времени (~ 350 к / с в потоке '30 к / с). Возможно, вы захотите каким-либо образом включить функцию сна или что-то в этом роде и настроить ее так, чтобы она соответствовала желаемому fps.
Источники: