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


当前回答

我知道这可能是多余的,但我使用这个脚本批量转换文件。

old_extension=$1
new_extension=$2

for i in *."$old_extension";
  do ffmpeg -i "$i" "${i%.*}.$new_extension";
done

它需要2个参数使其更灵活:

要转换的扩展名 要转换的新扩展名

我为它创建了一个别名,但你也可以手动使用它,像这样:

sh batch_convert.sh mkv mp4

这将把所有的mkv文件转换为mp4文件。

正如你所看到的,它更多功能。只要ffmpeg可以转换它,您就可以指定任何两个扩展。

其他回答

另一个简单的解决方案是使用xargs:

ls *。Avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"

一个小缺陷是输出文件的尴尬命名(例如input.avi.mp4)。一个可能的解决方法是:

ls *。Avi | xargs -i -n1 bash -c "i={};Ffmpeg -i {} "\${i%.*}.mp4""

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

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

我为此开发了一个python包。

https://github.com/developer0hye/BatchedFFmpeg

您可以轻松地安装和使用它。

pip install batchedffmpeg
batchedffmpeg * -i folder * output_file

对于Windows,这是行不通的

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"

即使我做了双倍的%。

我甚至建议:

-acodec ***libmp3lame***

另外:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec libmp3lame "%~nG.mp3"

我需要所有的视频使用相同的编解码器合并的目的 这个转换是mp4到mp4 它在ZSH中,但应该很容易转换为bash

for S (*.mp4) { ffmpeg -i $S -c:v libx264 -r 30  new$S }