如何通过命令行或批处理脚本与ffmpeg转换整个目录/文件夹?


当前回答

对于Linux和macOS,这可以在一行中完成,使用参数展开来更改输出文件的扩展名:

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

其他回答

一行bash脚本很容易完成——替换*。Avi与您的文件类型:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov  ; done

前面的答案只会创建一个名为out.mov的输出文件。要为每一部老电影创建一个单独的输出文件,可以试试这个方法。

for i in *.avi;
  do name=`echo "$i" | cut -d'.' -f1`
  echo "$name"
  ffmpeg -i "$i" "${name}.mov"
done

@Linux 为了转换一堆,我的一行代码是这样的 (。Avi到。mkv)在同一目录:

for f in *.avi; do ffmpeg -i "${f}" "${f%%.*}.mkv"; done

请注意输出语句中的两个“%%”。它不仅提供了第一个单词或输入文件名,还提供了最后一个点之前的所有内容。

使用fd命令(存储库)的替代方法:

cd directory
fd -d 1 mp3 -x ffmpeg -i {} {.}.wav

-d表示深度

-x表示执行

{。没有文件扩展名的}路径

复制@HiDd3n,你也可以这样做,如果你想递归搜索文件目录,以防你有很多文件夹:

for /r %i in (*.webm) do "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i "%i" "%~ni.mp3"