Applescript 使用 ffmpeg 批量转换视频

Applescript to batch convert videos with 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";

这确实告诉 ffmpeg input_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 值,但分为三个部分:

  • 最后 . 之前的所有内容(因此,原始路径和文件名)
  • 新下划线 _.
  • 最后 . 之后的所有内容(原始扩展名)

如果您想进入终端本身并试验这些替换,请考虑 no-op 示例,如下所示:

f="/example/path/filename with spaces.and.periods.mp4"; echo "   $f\n" "becomes\n" "  ${f%.*}_.${f##*.}";