Потоковая веб-страница на YouTube с помощью FFMpeg - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь передать веб-страницу на YouTube, используя phantomjs и ffmpeg.
Короткий вопрос:

Это работает . Видео сохраняется в test.flv :

phantomjs runner.js|ffmpeg -y -f image2pipe -r 10 -s 1280x720 -i - -deinterlace -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -r 10 -g 20 -vb 400k -maxrate 400k -minrate 400k -bufsize 800k -threads 6 -q:v 0 -t 10 -f flv test.flv

Это не . Несмотря на отсутствие ошибок, ничего не передается YouTube.

phantomjs runner.js|ffmpeg -f image2pipe -r 10 -s 1280x720 -i - -deinterlace -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -r 10 -g 2 -vb 400k -maxrate 400k -minrate 400k -bufsize 800k -threads 6 -q:v 0 -f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxx

Замечания :

  1. Я в курсе phantomjs isn ' Сейчас он активно развивается, но это не актуально, так как скрипт phantomjs работает как задумано; скрипт
  2. phantomjs: runner. js;
  3. Я пробовал разные ffmpeg настройки, такие как frame-rates, bit-rates и bufsize, но безрезультатно.
  4. Обе команды похожи, но 1-й вывод в локальный файл test.flv в то время как 2-й до YouTube;
  5. Я использовал потоковый ключ YouTube в OBS Studio, и он работает нормально;
  6. ffmpeg вывод при потоковая передача до YouTube:

frame= 13 fps=0.0 q=42.0 size= 94kB time=00:00:00.50 bitrate=1531.0kbits/ frame= 18 fps= 16 q=40.0 size= 130kB time=00:00:01.00 bitrate=1063.6kbits/ frame= 23 fps= 14 q=44.0 size= 149kB time=00:00:01.50 bitrate= 810.8kbits/

ffmpeg version 4.2.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers работает на Ubuntu-1804

Есть идеи, что может быть не так?

1 Ответ

1 голос
/ 30 марта 2020

Вам необходимо добавить аудиопоток. Он может быть из файла, или вы можете генерировать тихий / фиктивный аудиопоток, используя anullsr c filter :

phantomjs runner.js | ffmpeg -f image2pipe -framerate 10 -video_size 1280x720 -re -i - -f lavfi -i anullsrc -c:v libx264 -preset ultrafast -g 20 -b:v 400k -maxrate 400k -bufsize 800k -vf format=yuv420p -c:a aac -f flv rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx

Не связанные изменения:

  • Используйте параметры ввода image2pipe вместо универсальных. См. ffmpeg -h demuxer=image2pipe
  • Удалено -deinterlace. Я сомневаюсь, что вход чересстрочный. Если вместо этого используется фильтр (-deinterlace использует фильтр yadif , но он менее настраиваемый, чем непосредственно использование yadif).
  • Вам не нужно добавлять вывод -r параметр, если параметр ввода -framerate имеет то же значение, поэтому он был удален из вашей команды.
  • Позволяет кодировщику автоматически выбирать оптимальное количество потоков, пропуская параметр -threads.
  • -q:v 0 игнорируется libx264. Удалите его.
  • -g можно установить на частоту кадров x 2 .
  • Вы можете использовать ffmpeg для захвата экрана, если не хотите используйте дополнительные javascripts.
...