タグ別アーカイブ: Audio_Filters

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

各チャンネルの音量を映像化する 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

ドラクエの戦闘シーンチェンジエフェクトを作る

ニコニコ動画に投稿された「DQエンカウント風AviUtlシーンチェンジ用素材 sm30578410」を元に ffmpeg でも同じことを実装する。配布されたファイルは 8bit PNG なのでそれを使い、グラデーションマスクを作成し2入力を合わせる方法をとる。サンプルコマンドの出力コーデックは適宜変える。input1.mp4 と input2.mp4 は 640×360 30000/1001 fps の動画である。それに伴って。color ソースもそれに統一する。シーンチェンジは input1.mp4 から input2.mp4 の順番に切り替わるのがドラクエの戦闘シーンチェンジエフェクトになる。
続きを読む ドラクエの戦闘シーンチェンジエフェクトを作る

音声のダイナミックレンジを広げる crystalizer

ffmpeg 3.2 でリリース予定のオーディオフィルタ。単純なアルゴリズムで音声のダイナミックレンジを広げる crystalizer フィルタの使い方。

基本コマンド

既定値のオプションを当てる
ffmpeg -i input -af crystalizer=i=2:c=1 output
ffmpeg -i input -af crystalizer=2:1 output
ffplay -i input -af crystalizer=2:1

公式ドキュメント:FFmpeg Filters Documentation : crystalizer
続きを読む 音声のダイナミックレンジを広げる crystalizer

ループ回数を指定できる loop, aloop

ffmpeg で無限入力が可能に で追加されていたが、フィルタを掛けて加工することはできなかった。今回はフィルタ内でループするのでループ回数やループした部分にもフィルタが当てられる。

基本コマンド

1回ループして2回読み込む
asetpts を追加した。2017年10月4日
ffmpeg -i input -filter_complex loop=1:32767:0;aloop=1:2.14748e+009:0,asetpts=N/SR/TB

オプション

  • loop
    ループ回数。-1 で無限
    既定値:0[int]
  • size
    ループにどれだけバッファサイズを取るか
    loop ならフレーム数
    最大値:32767
    既定値:0[int64]
    aloop サンプル数
    最大値:2.14748e+009
    既定値:0[int64]
  • start
    ループするときにどの位置からループするか
    loop ならフレーム数
    既定値:0[int64]
    aloop サンプル数
    既定値:0[int64]

メタデータをコンソールに表示する metadata, ametadata

特定のフィルタで出力されるメタデータを扱うことができる metadata の使い方。ametadata も同じオプションで使うことができる。こちらはコンソールに出力するに対して drawgraph は映像にテキストやグラフで出力する。drawgraph と比べて出力範囲を指定しなくても良いので使いやすい。

メタデータを映像化する drawgraph, adrawgraph

基本コマンド

signalstats フィルタから YDIF を表示している
ffplay -f lavfi -i movie=input,signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
unsharp フィルタの Y差分を ssim で表示している
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,metadata=print:key=lavfi.ssim.Y
drawtext フィルタで映像に書き込む
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,drawtext=fontfile='C\://WINDOWS/Fonts/arial.ttf':text='"SSIM="%{metadata\:lavfi.ssim.all}'
ebur128 フィルタで M, S, I を同時に表示する
ffplay -f lavfi -i amovie=input,ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I[out0];amovie=input[out1]

公式ドキュメント:FFmpeg Filters Documentation : metadata, ametadata
続きを読む メタデータをコンソールに表示する metadata, ametadata

音声統計データを表示する astats

音声統計データを表示する astats の使い方。メタデータ対応しているので出力したログの加工が容易になる。

公式ドキュメント:FFmpeg Filters Documentation : astats

基本コマンド

ffprobe
ffprobe -f lavfi -i amovie=input,astats=length=0.05:metadata=0:reset=0
ffprobe -f lavfi -i aevalsrc=sin(440*2*PI*t):s=8000:d=1,astats=length=0.05:metadata=0:reset=0
続きを読む 音声統計データを表示する astats