ffmpegで画像ファイルの形式を変換する

Macのターミナル上で、ffmpegを使って画像ファイル形式を変換する方法を紹介します。
基本的な使い方から、出力ファイル名を指定しない方法や、一括変換する方法なども。

ffmpegの基本式

もっともシンプルな基本式です。

ffmpeg -i 入力ファイル名 出力ファイル名

オプションがある場合はこちら。

ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名

画像ファイルの形式を変換する

input.jpgoutput.jpgに変換する場合のコードです。

ffmpeg -i input.jpg output.png

画像ファイルの形式を、出力ファイル名を指定せずに変換する

input.jpgをpng画像に変換する場合のコードです。

for f in input.jpg;
do
  ffmpeg -i $f ${f%.jpg}.png;
done

画像ファイルの形式を一括変換する

現在のディレクトリ配下にある全てのjpg画像を、同じファイル名でpng画像に変換する場合のコードです。

for f in *.jpg;
do
  ffmpeg -i $f ${f%.jpg}.png;
done

コードの基礎部分の解説

シェルスクリプトの記号等を個別に解説した後、上述した一括変換のコードを解説します。

for文

複数の値を扱う際に使用します。

for 変数 in 値リスト;
do
  処理;
done

; カンマ

コマンドを連続して実行する際に使用します。

コマンド1; コマンド2

$ ドルマーク

$変数名 で変数を表します。

{} 波括弧

変数名と文字列を区別する際、変数名を明示的に示すために使用します。

var="user_${name}"

% パーセント記号

変数内の文字列の末尾を最短一致で削除します。

var=foofoobarbar; echo "${var%b*r}"
# => foofoobar

コードの難解部分の解説

${f%.jpg}.png の正体

ここまでの解説を踏まえ、先ほどの一括変換の際のコードを見てみます。

for f in *.jpg;
do
  ffmpeg -i $f ${f%.jpg}.png;
done

現在のディレクトリ配下にone.jpgtwo.jpgというファイルがある場合、for文の最初のループは以下のようになります。

コード実際の中身
$fone.jpg
${f%.jpg}one
${f%.jpg}.pngone.png

こうして、ffmpegコマンドの入力ファイル名の部分にone.jpg、出力ファイル名の部分にone.pngが入ることで、同じファイル名を残したまま形式のみを変換できます。