基本上我正在做的是通过streamlink抓取一个抽搐流,并通过ffmpeg将其输出到youtube流。在查找我如何做到这一点时,我(诚然)只是复制了文档上的第一个命令并稍微调整了一下,最后得到了这个命令:
streamlink -O twitch.tv/boxbox best | ffmpeg -i pipe:0 -s 1920x1200 -framerate 30 -vcodec libx264 -preset veryfast -s 1280x720 -threads 0 -f flv "rtmp://a.rtmp.youtube.com/live2/-------------"
运行此命令有效,youtube上会出现一个流,但它非常滞后。控制台告诉我,我以一致的9fps流式传输,这不是我想要的。由于这是我对ffmpeg的第一次体验,我真的不知道是什么导致了这一点。它甚至可能是我的服务器,因为我正在运行一个非常便宜的debian VPS。这是可以预料的还是我可以调整一下来更好地传播它?
答案 0 :(得分:1)
ffmpeg流媒体非常低效
因为这是我对ffmpeg的第一次体验,所以我真的不知道是什么造成了这种情况。
是什么让你觉得它效率低下?您正在重新编码视频。这需要大量的CPU。
它甚至可能是我的服务器,因为我正在运行一个相当便宜的debian VPS。
非常可能。
无论如何,你有几个选择。最好的办法是不重新编码视频。如果Twitch为您提供H.264和AAC音频,请使用-vcodec copy -acodec copy
。
你可以做的另一件事(虽然不太可能在VPS上)是强制硬件加速。这将导致一些平庸的视频质量(不是你可能还在乎,因为你已经重新编码了以前编码的视频),但是它会在没有对CPU造成重大影响的情况下运行。 FFmpeg支持一堆GPU。您必须选择与您正在使用的任何硬件兼容的一个。
您应该做的不是中继流,而是从原始源流式传输多个流。这可以帮助您通过重新编码来避免质量损失。