Twitch Stream 作为 ffmpeg 的输入
Twitch Stream as input for ffmpeg
我的 objective 是获取 twitch 视频流并从中生成图像序列,而无需创建中间文件。我发现 ffmpeg
可以拍摄视频并将其转换为视频并将其转换为图像序列。 ffmpeg website 说它的输入选项可以接受网络流,尽管我真的找不到任何明确的文档。我搜索了 Stack Overflow,也没有找到任何答案。
我试过将 link 添加到流中:
ffmpeg -i www.twitch.tv/channelName
但是程序要么报错"No such file or directory":
或者在将 https 添加到 link 时导致分段错误。
我也在使用 streamlink
并在 python 脚本中将其与 ffmpeg 一起使用来尝试流式传输 url:
import streamlink
import subprocess
streams = streamlink.streams("http://twitch.tv/channelName")
stream = streams["worst"]
fd = stream.open()
url = fd.writer.stream.url
fd.close()
subprocess.run(['/path/to/ffmpeg', '-i', url], shell=True)
但这会产生与网站 URL 相同的错误。我对 ffmpeg 和 streamlink 很陌生,所以我不确定自己做错了什么。有没有办法为 ffmpeg 添加 twitch 流到输入?
我已经弄明白了。 Ffmpeg 不会为您提取在线文件,您必须自己提取它们,这可以通过在流 url 上使用调用 GET 来完成,其中 returns 一个包含地址 [=11] 的文件=] 文件,curl
可用于将这些文件下载到您的驱动器上。将此与我的图像排序目标结合起来,过程在 python:
上看起来像这样
import streamlink
import subprocess
import requests
if __name__ == "__main__":
streams = streamlink.streams("http://twitch.tv/twitchplayspokemon")
stream = streams["worst"]
fd = stream.open()
url = fd.writer.stream.url
fd.close()
res = requests.get(url)
tsFiles = list(filter(lambda line: line.startswith('http'), res.text.splitlines()))
print(tsFiles)
for i, ts in enumerate(tsFiles):
vid = 'vid{}.ts'.format(i)
process = subprocess.run(['curl', ts, '-o', vid])
process = subprocess.run(['ffmpeg', '-i', vid, '-vf', 'fps=1', 'out{}_%d.png'.format(i)])
这不是一个完美的答案,您仍然必须创建我希望避免的中间视频文件。也许有更好更快的答案,但这就足够了。
我的 objective 是获取 twitch 视频流并从中生成图像序列,而无需创建中间文件。我发现 ffmpeg
可以拍摄视频并将其转换为视频并将其转换为图像序列。 ffmpeg website 说它的输入选项可以接受网络流,尽管我真的找不到任何明确的文档。我搜索了 Stack Overflow,也没有找到任何答案。
我试过将 link 添加到流中:
ffmpeg -i www.twitch.tv/channelName
但是程序要么报错"No such file or directory":
或者在将 https 添加到 link 时导致分段错误。
我也在使用 streamlink
并在 python 脚本中将其与 ffmpeg 一起使用来尝试流式传输 url:
import streamlink
import subprocess
streams = streamlink.streams("http://twitch.tv/channelName")
stream = streams["worst"]
fd = stream.open()
url = fd.writer.stream.url
fd.close()
subprocess.run(['/path/to/ffmpeg', '-i', url], shell=True)
但这会产生与网站 URL 相同的错误。我对 ffmpeg 和 streamlink 很陌生,所以我不确定自己做错了什么。有没有办法为 ffmpeg 添加 twitch 流到输入?
我已经弄明白了。 Ffmpeg 不会为您提取在线文件,您必须自己提取它们,这可以通过在流 url 上使用调用 GET 来完成,其中 returns 一个包含地址 [=11] 的文件=] 文件,curl
可用于将这些文件下载到您的驱动器上。将此与我的图像排序目标结合起来,过程在 python:
import streamlink
import subprocess
import requests
if __name__ == "__main__":
streams = streamlink.streams("http://twitch.tv/twitchplayspokemon")
stream = streams["worst"]
fd = stream.open()
url = fd.writer.stream.url
fd.close()
res = requests.get(url)
tsFiles = list(filter(lambda line: line.startswith('http'), res.text.splitlines()))
print(tsFiles)
for i, ts in enumerate(tsFiles):
vid = 'vid{}.ts'.format(i)
process = subprocess.run(['curl', ts, '-o', vid])
process = subprocess.run(['ffmpeg', '-i', vid, '-vf', 'fps=1', 'out{}_%d.png'.format(i)])
这不是一个完美的答案,您仍然必须创建我希望避免的中间视频文件。也许有更好更快的答案,但这就足够了。