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_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
值,但分为三个部分:
- 最后
.
之前的所有内容(因此,原始路径和文件名)
- 新下划线
_
和 .
- 最后
.
之后的所有内容(原始扩展名)
如果您想进入终端本身并试验这些替换,请考虑 no-op 示例,如下所示:
f="/example/path/filename with spaces.and.periods.mp4"; echo " $f\n" "becomes\n" " ${f%.*}_.${f##*.}";
我正在尝试为他们文件夹中的大量视频添加填充。我用 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_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
值,但分为三个部分:
- 最后
.
之前的所有内容(因此,原始路径和文件名) - 新下划线
_
和.
- 最后
.
之后的所有内容(原始扩展名)
如果您想进入终端本身并试验这些替换,请考虑 no-op 示例,如下所示:
f="/example/path/filename with spaces.and.periods.mp4"; echo " $f\n" "becomes\n" " ${f%.*}_.${f##*.}";