20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ffmpegでフォルダ内の動画を一括変換する

Last updated at Posted at 2021-04-02

やりたいこと

古いデジカメで撮ったAVI形式の動画が大量に出てきた。AVI形式はサイズが大きいので、MP4形式に変換し容量を節約したい。1ファイルずつ変換するのは面倒なので、一気に変換したいと考えた。

やりたいことは、以下の2点。
1)MP4形式をAVI形式に変換したい
2)特定のフォルダにあるファイルを、すべて〇〇したい(一括処理)

結論から書くと、Macのターミナル(zsh)を使い、下記コマンドで出来た。

for f in **/*.avi; do ffmpeg -i "$f" -pix_fmt yuv420p "${f%.AVI}.mp4"; done

ffmpegが入っていない場合は、Homebrew等でインストールしておく。

brew install ffmpeg

解説

1)AVI形式をMP4形式に変換

  • ffmpegを使って変換する。
  • AVI形式からMP4形式に変換する場合、そのままではMacのQuickTimeで再生できない。-pix_fmt yuv420pなどのオプションをつけて変換する必要がある。
ffmpeg -i input.avi -pix_fmt yuv420p output.mp4

2)フォルダにあるファイルを一括処理

フォルダにあるファイルの名前を取得する

  • **/*の記法を使えば、サブフォルダも含めてフォルダにあるファイルの名前を取得できる。
$ ls
movie1.avi  movie2.avi  movie3.avi
$ for f in **/*.avi; do echo $f; done
movie1.avi
movie2.avi
movie3.avi

ファイル名の拡張子だけを変更する

  • ffmpegでは、出力ファイル名を指定する必要がある。元のファイル名から、拡張子だけをavi→mp4に置き換えた名前にしたい。
  • ${変数%マッチパターン}で、後方からの検索で一番初めにマッチした部分を削除する。これを使って、拡張子を除いたファイル名を取得する。
  • 得られたファイル名に、変換したい形式(MP4形式なら.mp4)を付与してffmpegに渡せば変換してくれる。
$ var="movie.avi"; echo ${var%.avi}.mp4
movie.mp4

 初版 2021年4月3日公開
 第2版 2022年5月6日公開
 第3版 2024年8月14日公開

20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?