FFmpeg中如何为metadata=print:file参数指定绝对路径?
解决FFmpeg metadata filter写入绝对路径文件的错误问题
问题原因
你遇到的错误是因为Windows路径中的反斜杠未正确转义,导致FFmpeg解析filter参数时出错:未转义的\s被当成转义序列,使得file=D:\scenescores.txt被拆分为file=D:和scenescores.txt,后者被错误识别为direct选项的布尔值参数,最终触发过滤器初始化失败。
解决方案
有两种可靠的方式解决这个问题:
1. 改用正斜杠作为路径分隔符
Windows系统支持正斜杠作为路径分隔符,这种方式无需额外转义,写法更简洁:
ffmpeg -i input.mp4 -vf "select='gte(scene,0)',metadata=print:file=D:/scenescores.txt" -an -f null -
2. 转义反斜杠
如果必须使用反斜杠,需要对路径中的每个反斜杠进行双重转义(FFmpeg层面的转义):
ffmpeg -i input.mp4 -vf "select='gte(scene,0)',metadata=print:file=D:\\scenescores.txt" -an -f null -
Java应用中的特殊处理
在Java字符串中,反斜杠本身需要转义,因此如果使用反斜杠路径,需要写成四重反斜杠:
String ffmpegCmd = "ffmpeg -i input.mp4 -vf \"select='gte(scene,0)',metadata=print:file=D:\\\\scenescores.txt\" -an -f null -";
如果使用正斜杠路径,Java中无需额外转义,写法更简单:
String ffmpegCmd = "ffmpeg -i input.mp4 -vf \"select='gte(scene,0)',metadata=print:file=D:/scenescores.txt\" -an -f null -";
内容的提问来源于stack exchange,提问作者Axel Herrmann
相关产品推荐
相关产品推荐

