ffmpeg による音声・動画の変換

Tech
著者

ぷに

日付

7/18/2024

はじめに

ffmpeg は Unix 系 OS 上で動く,動画と音声の変換をしてくれる万能ツールである.MacOS の多くのアプリは裏で ffmpeg を使っている.この記事にあるコードをコピー&ペーストすれば,ブラウザ上の「動画変換サービス」にアップロードせずに済む!(それに,コンピュータへの理解も深まる.)

1 早見表

ffmpeg -i <filename>

で情報を表示する.

1.1 動画を .gif

ffmpeg -i <filename> -r 10 -f gif <name>.gif
  • -r はフレームレートを指定する.
  • -f はフォーマットを指定する.
ffmpeg -i input.mkv -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif -f gif output.gif
  • -vf はビジュアルフィルタを指定する.
    • fps=10 はフレームレートを指定する.
    • scale=320:-1:flags=lanczos はサイズを指定する.幅を 320 ピクセルとし,高さは自動調節する.
    • flags=lanczosLanczos アルゴリズム を用いて,アンチエイリアスを指定する.
  • -c:v はビデオコードを指定する.
    • -c:v gif は出力のビデオコーデックを GIF にする.
  • -f はフォーマットを指定する.

codec とは encoder と decoder のかばん語であり,圧縮と復号を司る.

1.2 動画から音声へ

ffmpeg -i <filename> -vn -acodec copy <output filename>
  • -vn は動画でないことを指定 (video not)
  • -acodec copy は同じストリームを使うことを表す

1.3 音声を .mp3

ffmpeg -i <filename> -acodec libmp3lame <name>.mp3
  • -acodec libmp3lame は音声コードの指定をしている(省略可能).

2 波形表示

音声から動画にする際に,小粋なアニメーションをつけることもできる

2.1 スペクトルを表示する

ffmpeg -i <input> -filter_complex "showspectrum" <output>

次の音声を変換してみると

ffmpeg -i example.aac -filter_complex "showspectrum=slide=1:mode=separate:color=plasma:scale=log:saturation=1:legend=0" -r 60 output1.gif

ffmpeg -i example.wav -filter_complex "showwaves=split_channels=1:mode=line" example_waves.gif
  • showwaves は音声の波形を表示する.
  • split_channels=1 はチャンネルを 1 つにする.
  • mode=line は波形の表示方法を直結びにする.

2.2 波形を表示する

ffmpeg -i example.aac -filter_complex "showwaves=split_channels=1:mode=line" output2.gif

2.3 音量を表示する

ffmpeg -i example.aac -filter_complex "showvolume" output3.gif

2.4 周波数を表示する

ffmpeg -i example.aac -filter_complex "showfreqs=mode=bar" output4.gif

2.5 定 Q-変換 を表示する

ffmpeg -i example.aac -filter_complex "showcqt" output5.gif

これは複素 Morlet ウェーブレット変換とも呼ばれる変換であり,ピアノのような見た目から,音源などでよく用いられる.

2.6 scalogram を表示する

ffmpeg -i example.aac -filter_complex "showcwt=mode=channel" output6.gif

これは連続ウェーブレット変換を適用した結果を表示している.

3 参考になるリンク