やりたいこと
古いデジカメで撮った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日公開