各チャンネルの音量を映像化する abitscope

各チャンネルの音量(周波数ではない)を色別で横に並べて映像にする abitscope フィルタの使い方。出力フォーマットは RGBA。似たフィルタに showvolumeshowfreqs がある。

基本コマンド

ffmpeg -i input -filter_complex abitscope -acodec copy output
ffmpeg -re -i input -filter_complex abitscope -f sdl -

動画にオーバーレイする例
ffmpeg -i input -filter_complex abitscope,[0:v]overlay -acodec copy output
ffmpeg -re -i input -filter_complex abitscope,[0:v]overlay -f sdl -

abitscope フィルタで動画にオーバーレイする例(5.1ch なので6色)

公式ドキュメント:FFmpeg Filters Documentation : abitscope
続きを読む 各チャンネルの音量を映像化する abitscope

サラウンドをヘッドフォン用の2チャンネルに配置する headphone

ffmpeg 3.4 から追加予定のフィルタ。サラウンドを HRIRs(head-related impulse response, 頭部インパルス応答) ファイルを元にチャンネルを配置しステレオとして出力する headphone フィルタの使い方。

HRIRs ファイルの配布ページが重たい場合はミラーを上げている。

HRIRs ファイルには DFC, MINP, RAW があり、基本コマンドには Subject_001_Wav.zip を使っている。

基本コマンド

5.1ch の音声に映像をコピーして 2ch で出力
ffmpeg -i input -i azi_30_ele_0_DFC.wav -i azi_330_ele_0_DFC.wav -i azi_0_ele_0_DFC.wav -i azi_100_ele_0_DFC.wav -i azi_260_ele_0_DFC.wav -filter_complex "[0:a][1][2][3][3][4][5]headphone=FL|FR|FC|LFE|BL|BR" -vcodec copy output.mp4
2ch の音声を 5.1ch に surround フィルタで変換し映像をコピーして 2ch で出力
ffmpeg -i input -i azi_260_ele_0_DFC.wav -i azi_100_ele_0_DFC.wav -i azi_0_ele_0_DFC.wav -i azi_30_ele_0_DFC.wav -i azi_330_ele_0_DFC.wav -filter_complex "[a:0]surround[0a];[0a][1][2][3][3][4][5]headphone=FL|FR|FC|LFE|BL|BR" -vcodec copy output.mp4
公式ドキュメント:FFmpeg Filters Documentation : headphone
続きを読む サラウンドをヘッドフォン用の2チャンネルに配置する headphone

各チャンネルの音声を合わせたり調整する pan

各チャンネルの音声を合わせたり無音にしたりできる pan フィルタの使い方。

基本コマンド

c1(FR) をそのままに c0(FL) を無音にしたステレオ音声
ffmpeg -i input -af "pan=stereo|c1=c1" -vcodec copy output
ffplay -i input -af "pan=stereo|c1=c1"

c1(FR)c0(FL) を逆にしたステレオ音声
ffmpeg -i input -af "pan=stereo|c0=FR|c1=FL" -vcodec copy output
ffplay -i input -af "pan=stereo|c0=FR|c1=FL"

左右のチャンネルを同じだけ合わせたステレオ音声
ffmpeg -i input -af "pan=stereo|c0<1*FR+1*FL|c1<1*FR+1*FL" -vcodec copy output
ffplay -i input -af "pan=stereo|c0<1*FR+1*FL|c1<1*FR+1*FL"

5.1ch の音声の音量を変える(FC, LFE を2倍にする)
ffmpeg -i input -af "pan=5.1|FL=FL|FR=FR|FC=2*FC|LFE=2*LFE|BL=BL|BR=BR" -vcodec copy -acodec ac3 output.ts
ffplay -i input -af "pan=5.1|FL=FL|FR=FR|FC=2*FC|LFE=2*LFE|BL=BL|BR=BR"

公式ドキュメント:FFmpeg Filters Documentation : pan
続きを読む 各チャンネルの音声を合わせたり調整する pan

音声をサラウンド変換する surround

ffmpeg 3.4 から追加予定のフィルタ。入力した音声の周波数からフロントとリアなどの音声に分けてサラウンド(5.1ch など)に変換する surround フィルタの使い方。

基本コマンド

アンプなどにもよるがサラウンドは 48KHz じゃないとサラウンドでデコードしないこともある。コーデックも aac や pcm よりも ac3 のほうがデコードの汎用性が高い。既定値では入力音声のチャンネル数 chl_in はステレオになっている
ffmpeg -i input -af surround -ar 48000 -vcodec copy -acodec aac output.ts

sox がインストールされている場合は高品質な sox でリサンプリングする
ffmpeg -i input -af aresample=48000:resampler=soxr,surround -vcodec copy -acodec aac output.ts

サラウンドの各チャンネルを出力するには channelsplit フィルタを使う
ffmpeg -i input -filter_complex surround,channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR] -map [FL] FL.wav -map [FR] FR.wav -map [FC] FC.wav -map [LFE] LFE.wav -map [SL] SL.wav -map [SR] SR.wav
公式ドキュメント:FFmpeg Filters Documentation : surround
続きを読む 音声をサラウンド変換する surround

VP9(libvpx-vp9) のエンコード設定について

次世代エンコーダ VP9 のエンコード設定について ffmpeg で使ったときの設定をまとめた。libvpx-vp9 は外部ライブラリなので別途インストールする必要がある。さらに音声のエンコーダで使われる libopus も外部ライブラリなのでこれもインストールする必要がある。

設定内容は多くあるがほとんどの設定は何も変えず、ビットレートの設定と品質・速度のトレードオフの設定を変える。VP9 で処理が遅いとよく言われるが、これは仕様上、現在ではどうにもならないので2つ3つ同時にエンコードして1つにつなげる方法をとれば処理は速くなる。それでも threads を設定することで早くなる。libx264 のように自動設定しないので一番下の方にある解像度に併せて設定する。

webmproject/libvpx: github.com
Downloads – Opus Codec
CompilationGuide/Quick/libopus – FFmpeg
続きを読む VP9(libvpx-vp9) のエンコード設定について

ffmpeg 3.3 リリース

2017年9月12日に 3.3.4 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。

Changelog: update release version 3.3.4 – ffmpeg.git/commitdiff

2017年7月30日に 3.3.3 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。

Changelog: update release version 3.3.3 – ffmpeg.git/commitdiff

2017年6月7日に 3.3.2 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。

Changelog: update release version 3.3.2 – ffmpeg.git/commitdiff

2017年5月15日に 3.3.1 がリリースされた。アップデート内容は修正ばかりで新しいフィルタは入ってない。

Changelog: update release version 3.3.1 – ffmpeg.git/commitdiff

2017年4月13日、ffmpeg 3.3 Hilbert(ヒルベルト)がリリースされた。3.3 は 3.2 からのメジャーアップデートでこれまでに取り込まれたコミットのすべてが入っている。

前回更新記事:ffmpeg 3.2 リリース

git.ffmpeg.org Git – ffmpeg.git/blob – RELEASE_NOTES
git.videolan.org Git – ffmpeg.git/blob – Changelog
続きを読む ffmpeg 3.3 リリース

APNG をループ出力する

Using ffmpeg to create looping apng – Stack Overflow より、アニメGIF なら loop でループできるのに APNG ではこのオプションではループできないので plays オプションを使う。このオプションはループ回数を指定する。ただし -1 を指定して無限ループは出来ないので大きい値を指定する。

ss で開始秒、t で動画時間を指定する
ffmpeg -ss 10 -i input.mp4 -plays 10 -t 1 -vf setpts=PTS-STARTPTS output.apng

ちなみにフレームレートを変えるなら fps フィルタを使う。
ffmpeg -ss 10 -i input.mp4 -plays 10 -t 1 -vf fps=10,setpts=PTS-STARTPTS output.apng

【APNG】ブロマガのサムネイルを動かす方法
ffmpeg で アニメーションWebP(Animated WebP)を作る
ffmpeg で 256色を最適化する