使用FFmpeg反转视频报错:Stream specifier 's1:v'匹配不到流
解决FFmpeg反转视频时的流匹配错误
错误原因分析
报错里的s1:v匹配不到流,核心原因是split滤镜的输出已经是单个视频流(你的输入文件无音频),不需要额外指定:v流标识符。split会把输入的视频流拆成两个完全一致的视频流s0和s1,直接用s1引用即可。
另外代码里的instances[i].video属于多余操作:filter_multi_output返回的每个实例已经对应split输出的视频流,调用.video会让FFmpeg错误地尝试从这个单一流中再提取视频流,最终导致流引用失效。
修正后的代码
instances = ( ffmpeg .input(self.video_file) .filter_multi_output(filter_name="split", outputs=2) ) ordered_edits = [] for i in range(2): if i % 2 == 0: ordered_edits.append(instances[i]) else: # 去掉多余的.video,直接对split输出的流应用reverse滤镜 ordered_edits.append(instances[i].filter(filter_name="reverse")) ( ffmpeg .concat(*ordered_edits, a=0, v=1) .output('done/output.mp4') .run(overwrite_output=True) )
原生命令验证方案
如果想先确认逻辑可行性,可以直接用原生FFmpeg命令测试:
ffmpeg -i input.mp4 -filter_complex "split=2[s0][s1];[s1]reverse[s2];[s0][s2]concat=n=2:v=1:a=0" done/output.mp4
这个命令和你代码的逻辑完全一致:拆分视频流、反转其中一个、拼接原视频与反转后的视频。
内容的提问来源于stack exchange,提问作者Will Beeson
相关产品推荐
相关产品推荐

