我正在尝试使用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
备注:
phantomjs
不再积极开发,但这似乎没有相关,因为phantomjs
脚本按预期工作;phantomjs
脚本:runner.js;ffmpeg
设置,如frame-rates
,bit-rates
和bufsize
无济于事。test.flv
,第二个输出到test.flv
;YouTube
流键,并且可以正常工作;[YouTube
输出到streaming到ffmpeg
:
YouTube
ffmpeg version 4.2.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
上运行]有什么错的主意吗?
您需要添加音频流。它可以来自文件,也可以使用Ubuntu-1804
:
anullsrc filter
不相关的更改:
phantomjs runner.js | ffmpeg -f image2pipe -framerate 10 -video_size 1280x720 -i - -f anullsrc -c:v libx264 -preset ultrafast -g 50 -b:v 400k -maxrate 400k -minrate 400k -bufsize 800k -c:a aac -f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxx
ffmpeg -h demuxer=image2pipe
。我怀疑输入是隔行扫描的。如果是,则使用过滤器(-deinterlace
使用-deinterlace
,但与直接使用yadif相比,其可自定义性较低。-r
输出选项,因此已从命令中将其删除。-framerate
选项自动选择最佳线程数。-threads
被libx264忽略。删除它。-q:v 0
可以设置为帧率x 2。-g
捕获屏幕。