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


当前回答

如果你有GNU并行,你可以将vid_dir以下的所有。avi文件并行转换为mp4,使用你的CPU内核

find vid_dir -type f -name '*.avi' -not -empty -print0 |
    parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

要从/转换为不同的格式,请更改'*。Avi '或。mp4。GNU parallel在大多数Linux发行版的存储库中以一个通常称为parallel的包的形式列出。

其他回答

for i in *.flac;
  do name=`echo "${i%.*}"`;
  echo $name;
  ffmpeg -i "${i}" -ab 320k -map_metadata 0 -id3v2_version 3 "${name}".mp3;
done

使用[1][2]批量处理flac文件到mp3(安全的文件名与空格)

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

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

我在linux中使用这一行程序将文件(通常是H265)转换为我可以在Kodi上毫无问题地播放的东西:

for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k output.mkv; mv -f output.mkv "$f"; done

这将转换为临时文件,然后替换原始文件,以便转换后名称保持不变。

如果你有GNU并行,你可以将vid_dir以下的所有。avi文件并行转换为mp4,使用你的CPU内核

find vid_dir -type f -name '*.avi' -not -empty -print0 |
    parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

要从/转换为不同的格式,请更改'*。Avi '或。mp4。GNU parallel在大多数Linux发行版的存储库中以一个通常称为parallel的包的形式列出。

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

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