我试图在他们的文件夹中添加大量的视频填充。我用AppleScriptEditor创建了一个应用,这样我就可以拖放文件并自动转换。我在网上找到了一个脚本,我用我需要的ffmpeg命令编辑它,但它不会工作,因为它想要覆盖源文件。
on open argv
set paths to ""
repeat with f in argv
set paths to paths & quoted form of POSIX path of f & " "
end repeat
tell application "Terminal"
do script "for f in " & paths & "; do ffmpeg -i "$f" -vf pad="9/8*iw:ih:(ow-iw)/2:0:color=black" "$f"; done"
activate
end tell
end open
请注意,我想保留文件名,文件类型,并将新文件放在旧文件旁边,但只是在新文件的末尾添加下划线,在扩展名之前;例如:file.ext。比;file_.ext
您通过do script
运行的实际ffmpeg命令是:
ffmpeg -i "$f" -vf pad="9/8*iw:ih:(ow-iw)/2:0:color=black" "$f";
这确实告诉ffmpeginput_url
和output_url
是相同的:$f
。根据您的评论,尝试以类似于此更改的方式指定不同的output_url
。
do script "for f in " & paths & "; do outfile="${f%.*}_.${f##*.}"; ffmpeg -i "$f" -vf pad="9/8*iw:ih:(ow-iw)/2:0:color=black" "$outfile"; done"
具体的参数和替换语法可能因shell而异。在zsh(可能还有bash)中,上面的代码创建了一个新的outfile
变量,然后在ffmpeg命令中使用。它被设置为等于当前循环的f
值,但分为三个部分:
- 最后
.
之前的所有内容(所以,原始路径和文件名) - 新增下划线
_
和.
- 最终
.
(原始扩展名)之后的所有内容
如果您想直接进入Terminal并尝试这些替换,可以考虑使用如下的无操作示例:
f="/example/path/filename with spaces.and.periods.mp4"; echo " $fn" "becomesn" " ${f%.*}_.${f##*.}";