Twitch Stream作为ffmpeg的输入

问题描述 投票:0回答:1

我的目标是拍摄一个抽搐视频流并从中生成图像序列,而无需创建中间文件。我发现ffmpeg可以拍摄视频并将其转换为视频并将其转换为图像序列。 ffmpeg website说它的输入选项可以占用网络流,虽然我真的找不到任何明确的文档。我搜索了Stack Overflow,但我也没有找到任何答案。

我已经尝试添加链接到流:

ffmpeg -i www.twitch.tv/channelName 

但该程序要么声明错误“没有这样的文件或目录”:

"No such file or directory"

或者在向链接添加https时导致分段错误。

我也使用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的输入添加一个抽搐流?

ffmpeg video-streaming streaming twitch livestreamer
1个回答
0
投票

我已经明白了。 Ffmpeg不会为你提供在线文件,你必须自己拉它们,这可以通过在流url上使用调用GET来完成,它返回一个包含.ts文件地址的文件,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)])  

这不是一个完美的答案,你仍然需要创建我希望避免的中间视频文件。也许有更好更快的答案,但这就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.