カテゴリー別アーカイブ: FFmpeg

18の周波数帯に分けてゲインを調整する superequalizer

ffmpeg 3.4 から追加予定のフィルタ。compand フィルタのように設定した周波数の音量を調整するよりも手軽に特定周波数の音量を上げたり下げたり出来る superequalizer フィルタの使い方。

基本コマンド

以下のコマンドでは音量は変化しない
ffmpeg -i input -af superequalizer=1b=1:2b=1:3b=1:4b=1:5b=1:6b=1:7b=1:8b=1:9b=1:10b=1:11b=1:12b=1:13b=1:14b=1:15b=1:16b=1:17b=1:18b=1 output
ffmpeg -i input -af superequalizer=1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1 output
ffplay -i input -af superequalizer=1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1

公式ドキュメント:FFmpeg Filters Documentation : superequalizer
続きを読む 18の周波数帯に分けてゲインを調整する superequalizer

エッジ検出フィルタ roberts

ffmpeg 3.4 から追加予定のフィルタ。Roberts cross operator を用いたエッジ検出フィルタ roberts の使い方。同様のフィルタに sobel, prewitt があり、他にもエッジ検出できるフィルタはいくつかある。

エッジ検出フィルタ sobel, prewitt
ffmpeg でエッジ検出をする edgedetect
先鋭化やぼかし、エンボス処理などができる convolution
ffmpeg で使える frei0r フィルタの使い方

基本コマンド

ffmpeg -i input -vf roberts=planes=15:scale=1:delta=0 output
ffmpeg -i input -vf roberts=15:1:0 output
ffplay -i input -vf roberts=15:1:0

公式ドキュメント:FFmpeg Filters Documentation : roberts
続きを読む エッジ検出フィルタ roberts

各チャンネルの音量を映像化する 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つにつなげる方法をとれば処理は速くなる。

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

ffmpeg 3.3 リリース

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色を最適化する