使用 FFMpeg 将网页流式传输到 YouTube
Streaming a WebPage to YouTube using FFMpeg
我正在尝试使用 phantomjs
和 ffmpeg
将网页流式传输到 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
备注:
- 我知道
phantomjs
不再积极开发,但这似乎不是
相关,因为 phantomjs
脚本按预期工作;
phantomjs
脚本:runner.js;
- 我尝试了不同的
ffmpeg
设置,例如 frame-rates
、bit-rates
和 bufsize
,但均无济于事。
- 两个命令相似,但第一个输出到本地文件
test.flv
而第二个输出到 YouTube
;
- 我在 OBS Studio 上使用了
YouTube
流媒体密钥,它可以正常工作;
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
知道哪里出了问题吗?
您需要添加音频流。它可以来自文件,或者您可以使用 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
来捕获屏幕。
我正在尝试使用 phantomjs
和 ffmpeg
将网页流式传输到 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
备注:
- 我知道
phantomjs
不再积极开发,但这似乎不是 相关,因为phantomjs
脚本按预期工作; phantomjs
脚本:runner.js;- 我尝试了不同的
ffmpeg
设置,例如frame-rates
、bit-rates
和bufsize
,但均无济于事。 - 两个命令相似,但第一个输出到本地文件
test.flv
而第二个输出到YouTube
; - 我在 OBS Studio 上使用了
YouTube
流媒体密钥,它可以正常工作; 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
知道哪里出了问题吗?
您需要添加音频流。它可以来自文件,或者您可以使用 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
来捕获屏幕。