我正在寻找一种方法来将 Twitch 流“管道化”(抱歉,如果我在这里使用术语)正在流式传输到文件中。我知道可以在流完成后下载 VOD,但这不适用于我的用例。
我看过一个名为 streamlink 的库,它可以让我获得给定流的确切 url,但我有点迷失了从这里去哪里
youtube-dl 提供了一个从流 URL 获取播放列表的接口。以下 1 个衬里效果很好:
ffmpeg -i $( youtube-dl -f best --get-url twitch.tv/host ) -codec copy "out.mp4"
还有一个我没试过的twitch-dl实用程序
这是一个对我有用的解决方案:
首先,安装Streamlink。然后运行这个命令
streamlink -o <file name>.mkv <URL of the Twitch stream> best
将流保存到本地文件。
如果您想以编程方式实现此目的,您可以将 Streamlink pip 模块 (
pip
install streamlink
) 与 ffmpeg 结合使用。
代码可能如下所示(在 Python 3 中):
import streamlink
from subprocess import Popen
from time import sleep
# get the URL of .m3u8 file that represents the stream
stream_url = streamlink.streams('https://www.twitch.tv/forsen')['best'].url
print(stream_url)
# now we start a new subprocess that runs ffmpeg and downloads the stream
ffmpeg_process = Popen(["ffmpeg", "-i", stream_url, "-c", "copy", 'stream.mkv'])
# we wait 60 seconds
sleep(60)
# terminate the process, we now have ~1 minute video of the stream
ffmpeg_process.kill()
youtube-dl 已弃用。但是 it's fork yt-dlp 几乎可以下载任何未受保护的视频。 (您需要在同一文件夹中安装 ffmpeg 或仅安装 .exe)。
Windows 用户可以使用下面的代码制作 .bat 文件并运行它来保存任何流(包括尚未直播的流),前提是流 url 是事先已知的。
有一个警告:在 twitch 上,您必须通过实验确定流媒体所需的流媒体采样率(默认为 48kHz)并正确指定(否则音频可能会出现问题)。感谢这家伙批处理文件。
@echo off
echo TwitchRec 1.3
echo.
set /P twitchUrl="Enter Twitch URL:"
set /P audioOnly="Audio only(y/n):"
if /I "%audioOnly%"=="N" (set /P aRate="Set audio sample rate(48/44.1):")
if "%aRate%"=="48" (set aRate=48000)
if "%aRate%"=="44.1" (set aRate=44100)
if "%aRate%"=="" (set aRate=48000)
if /I "%audioOnly%"=="Y" (set /P format="Which audio format(mp3,aac,alac,flac,m4a,mp3,opus,vorbis,wav):")
:start
if /I "%audioOnly%"=="Y" (yt-dlp -o "%%(title)s.%%(ext)s" -x --audio-format %format% --ignore-config --fixup never %twitchUrl%)
if /I "%audioOnly%"=="N" (yt-dlp -o "%%(title)s" --ignore-config --fixup never %twitchUrl% --exec "ffmpeg -i {} -c:v copy -af asetrate=%aRate% {}_f.mp4 && del {}")
timeout 15
goto start