Applescript批量转换视频与ffmpeg



我试图在他们的文件夹中添加大量的视频填充。我用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_urloutput_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##*.}";

最新更新