使用 FFMpeg 将网页流式传输到 YouTube

Streaming a WebPage to YouTube using FFMpeg

我正在尝试使用 phantomjsffmpeg 将网页流式传输到 YouTube
长问短:

这有效。视频保存到 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 不再积极开发,但这似乎不是 相关,因为 phantomjs 脚本按预期工作;
  2. phantomjs 脚本:runner.js;
  3. 我尝试了不同的 ffmpeg 设置,例如 frame-ratesbit-ratesbufsize,但均无济于事。
  4. 两个命令相似,但第一个输出到本地文件 test.flv 而第二个输出到 YouTube;
  5. 我在 OBS Studio 上使用了 YouTube 流媒体密钥,它可以正常工作;
  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/

  1. ffmpeg version 4.2.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers 运行 在 Ubuntu-1804

知道哪里出了问题吗?

您需要添加音频流。它可以来自文件,或者您可以使用 anullsrc filter:

生成 silent/dummy 音频流
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 filter,但不如直接使用 yadif 可定制)。
  • 如果输入 -framerate 选项的值相同,则不需要添加 -r 输出选项,因此它已从您的命令中删除。
  • 通过省略 -threads 选项让编码器自动选择最佳线程数。
  • -q:v 0 被 libx264 忽略。删除它。
  • -g可以设置为帧率x 2.
  • 如果您不想使用额外的 javascript,您可以使用 ffmpeg 来捕获屏幕。