月別アーカイブ: 2015年7月

ffmpeg で聞き取りやすい音量に変える

大きすぎる音は小さく、小さい音は大きく聞き取りやすい音量に変える音量ノーマライザフィルタ。雑談などの声中心なら聞こえやすくなるので効果的で、急に音量が変わって聞き取りにくい音声を修正するのにも使える。

音量を調べるには showwavespicebur128volumedetect などがある。

サンプリング周波数を一枚画像で出力する showwavespic
適切な音量が調べられる ffmpeg の ebur128 の使い方

volumedetect の使い方
ffmpeg -i input -vn -af volumedetect -f null -

公式ドキュメント:FFmpeg Filters Documentation : dynaudnorm
続きを読む ffmpeg で聞き取りやすい音量に変える

映像と音声を逆再生にエンコードする

reverse を使って逆再生にエンコードする。ただし音声の逆再生は未対応なので別のアプリケーションを使う必要がある。trim 必須なので予めカットしておいた方が処理速度は速い。

2015年7月24日音声の逆再生フィルタも追加された
avfilter: add areverse filter :: git.videolan.org Git – ffmpeg.git/commitdiff

reverse は最近追加されたフィルタなので master を利用する。
avfilter: Add reverse filter :: git.videolan.org Git – ffmpeg.git/commitdiff

trim フィルタの使い方
続きを読む 映像と音声を逆再生にエンコードする

ffmpeg でインターレース解除

30000/1001fps のインターレースの動画からアニメの 24000/1001fps のプログレッシブ動画にするためにインターレースを解除してフレームを間引くにはいくつかの方法があるので目的に合わせてフィルタを使う。

ポイントはフレームを間引く必要があるかどうかと、テロップなどの片フィールド補完がいるかどうか。フレーム間引きするには decimate を併用し、pullup には必要ない。fieldmatch 後にインターレースフラグだけインターレース解除する場合アルゴリズムを変えても結果は同じで速度も同じになる。片フィールドを補完した 60p は w3fdif だけ使うのが手軽だが、他にも yadifbwdifnnedi も Bob化できる。yadifbwdif の第1引数を 1 にする必要があるのは片フィールド補完した Bob化する場合である。

24pの処理速度比較
5 < 4 << 3 << 2 << 1

  1. 手動インターレース解除して、間引きも手動指定
    fieldhint=hint.txt:relative,select=(mod(n-1\,5)),fps=24000/1001
  2. 高速なプログレVFR(-r で固定フレームにできる)(品質と速度を両立)
    pullup -r 24000/1001
  3. 一般的な 24fps化(品質と速度を両立)
    yadif=0:-1:1,decimate
  4. yadif より高画質な 24fps化(速度より品質重視)
    bwdif=0:-1:1,decimate
  5. IVTC と yadif を併用して 24fps化(速度より品質重視)
    fieldmatch=order=auto:combmatch=none,yadif=0:-1:1,decimate
  6. 一般的なインターレース解除(品質と速度を両立)
    yadif=0:-1:1
  7. yadif より高画質
    bwdif=0:-1:1
  8. テロップなど 60p の Bob
    yadif=1:-1:1
  9. テロップなど 60p の Bob
    bwdif=1:-1:1
  10. テロップなど 60p の Bob
    w3fdif=1:0
  11. テロップなど 60p の Bob(かなり遅いが一番高画質)
    nnedi=deint=1:field=af

続きを読む ffmpeg でインターレース解除

H.264/AVC でシークしやすい中間出力ファイルに変換する

適宜音声フォーマットでコピーできない場合はそれに変える。
-qp 0 は可逆圧縮、-g 1 は全フレームが I-frame になりシークバーが動かしやすくなる。

出力は YUV444
ffmpeg -i input -vcodec libx264 -qp 0 -g 1 -tune fastdecode -acodec copy output.mp4

RGB 出力の場合
ffmpeg -i input -vcodec libx264rgb -qp 0 -g 1 -tune fastdecode -acodec copy output.mp4

ffmpeg できれいにロゴを消す方法

ffmpeg には標準でロゴを消すフィルタがあるが、以前紹介した特定の場所にだけフィルタを当てる方法と、ロゴ消しに適したロゴデータの作り方を交えてロゴをきれいに消す方法。

ffmpeg でロゴを消すフィルタと言えば、removelogodelogo があるが、ロゴデータを元にロゴを消すのが removelogo で、座標を指定して周りの色でブレンドするのが delogo である。
続きを読む ffmpeg できれいにロゴを消す方法

明るいところ、暗いところにフィルタを当てる

明暗の度合いでもマスクできるのでこれを応用して一つの映像に複数のフィルタを使い分ける方法。特定色なら colorkey フィルタを使ってマスクすることもできる。一般的には映像をシャープにするほど容量は大きく、ぼかすほど容量は小さくなるので、シャープとぼかしを使い分けて高画質配信を目指す。

colorkey の使い方:ffmpeg でクロマキー合成

なぜぼかしも併用するかと言えばビットレートの節約になるのも正しいが、ニコ生のようなビットレート制限が厳しいところでは、低解像度で暗くて見えにくい部分にビットレートをたくさん割り当てる必要はないからである。
続きを読む 明るいところ、暗いところにフィルタを当てる

ffmpeg でヒストグラムを表示する

動画編集ツールによくあるヒストグラムを表示する histogram フィルタの使い方。以前あった color, waveform オプションは非推奨になり個別のフィルタとして独立した。

2チャンネルの値を2次元で表示する vectorscope
ffmpeg で YUV, RGB波形を表示する waveform

公式ドキュメント:FFmpeg Filters Documentation : histogram
続きを読む ffmpeg でヒストグラムを表示する

サンプリング周波数を一枚画像で出力する showwavespic

音声データを読み込み、最初から最後までのサンプリング周波数を一枚画像で出力する ffmpeg の showwavespic の使い方。

読み込み開始時点や終了時点を変更する -ss, -t, -to などはエラーになるので使えない。出力フォーマットはグレースケール RGBA で波形以外の部分は透過する。。

基本コマンド

ffmpeg -i input -lavfi showwavespic=s=600x240:split_channels=1 waveform.png

waveform のサンプル画像


リアルタイムに波形を調べるには showwaves を使う
音声波形を表示する showspectrum, showwaves の使い方

オプション

  • size, s[image_size]
    画像の出力解像度
    既定値:600×240
  • split_channels[boolean]
    チャンネル別に表示するかどうか
    既定値:0(しない)
  • color[string]
    波形の色指定。チャンネル数毎に | で指定する
    既定値:”red|green|blue|yellow|orange|lime|pink|magenta|brown”
  • scale[int]
    振幅のサイズ指定

    • 0, lin:一番小さい。既定値
    • 1, log:一番大きい
    • 2:2番目に小さい
    • 3:3番目に小さい(2番目に大きい)

関連記事