我在一个目录中的不同子目录中有一堆视频,我如何运行 FFMPEG 来转换这些子目录中的所有视频,然后将每个视频的输出放回它来自的原始子目录。
for i in **/*.mp4; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .mp4)"/*.mp4 ; done
最佳答案
这个Shellcheck -clean 演示程序可能包含您想要的内容:
#! /bin/bash -p
shopt -s globstar
shopt -s nullglob
shopt -s dotglob
for mp4 in **/*.mp4; do
new_mp4=${mp4%.mp4}_qscale_0.mp4
ffmpeg -i "$mp4" -qscale 0 "$new_mp4"
done
a/b/c.mp4
的路径的文件在当前目录下运行ffmpeg
生成文件a/b/c_qscale_0.mp4
.原始文件保持不变。 new_mp4=${mp4%.mp4}_qscale_0.mp4
删除 .mp4
从$mp4
中路径的末尾开始, 附加 _qscale_0.mp4
结果,并将最终结果放入 new_mp4
多变的。见 Removing part of a string (BashFAQ/100 (How do I do string manipulation in bash?)) ${var%pattern}
的解释句法。 关于linux - FFMPEG Bash 自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71138462/