我正在尝试使用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过滤器生成无声/伪音频流:
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过滤器,但与直接使用yadiv相比,其可自定义性较差( - 如果输入
-framerate
选项的值相同,则不需要添加-r
输出选项,因此它已从命令中删除 - 通过省略
-threads
选项,让编码器自动选择最佳线程数 -q:v 0
被libx264忽略。拆下它- CCD_ 27可以设置为帧速率x2
- 如果您不想使用额外的java脚本,可以使用
ffmpeg
来捕获屏幕