![如何让 -vf“movie=...”指向 FFmpeg 中的另一个文件夹](https://linux22.com/image/1356320/%E5%A6%82%E4%BD%95%E8%AE%A9%20-vf%E2%80%9Cmovie%3D...%E2%80%9D%E6%8C%87%E5%90%91%20FFmpeg%20%E4%B8%AD%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我正在尝试使用位于不同文件夹中的另一个视频为一个视频添加水印。
源视频 [video.mov] 放置在类似
x:\test1\
叠加视频[overlay.mov]放置在
x:\test2\
我正在使用这个命令:
ffmpeg.exe -y -i x:\test1\video.mov -vf "movie=x:\test2\overlay.mov [watermark]; [in][watermark] overlay=0:0 [out]" x:\test3\video_overlay.mov
但我收到一条错误消息
Missing key or no key/value separator found after key 'test2overlay.mov'
将所有文件放在同一文件夹中并使用以下命令:
ffmpeg.exe -y -i video.mov -vf "movie=overlay.mov [watermark]; [in][watermark] overlay=0:0 [out]" video_overlay.mov
一切正常。
那么,如何让视频过滤器从 Windows 上的其他文件夹加载覆盖文件?
答案1
删除movie
源过滤器并使用-filter_complex
(用于过滤多个输入)而不是-vf
(用于过滤一个输入)。现在您可以像往常一样简单地列出您的输入,然后告诉每个过滤器您希望它们使用哪些输入。
由于您只有两个输入,因此您可以简单地执行以下操作:
ffmpeg.exe -i x:\test1\video.mov -i x:\test2\overlay.mov -filter_complex overlay x:\test3\video_overlay.mov
这与以下内容相同:
ffmpeg.exe -i x:\test1\video.mov -i x:\test2\overlay.mov -filter_complex "[0:0][1:0]overlay[out]" x:\test3\video_overlay.mov
-filter_complex
如果你的 ffmpeg 不支持,请获取最新版本Zeranoe FFmpeg 构建并看到FFmpeg 过滤器文档了解更多信息。
答案2
对我来说,这是唯一在所有设置下都能正常工作的版本(双转义冒号在 Windows 下的 git bash 中不起作用):
movie=\'c:/your/path/here.mp4\'
答案3
正如所提到的票号:2166您需要双重转义冒号:
movie=x\\:/test1/video.mov
答案4
虽然我个人会使用 @LordNeckbeard 的解决方案(因为我发现它更具可读性),但问题可能出在这些反斜杠上。请尝试使用movie=x:/test2/overlay.mov
。
FFmpeg 主要为 *nix 系统开发,其中\
用作转义符而不是分隔符;而且 ffmpeg 的 filterchains/filtergraphs 是一个特例,因此需要加上引号。