映像の黒枠の場所を検出する cropdetect

映像の黒枠を検出して crop フィルタで使う引数を返す cropdetect フィルタの使い方。

基本コマンド

ffmpeg -i input -vf cropdetect output
ffplay -i input -vf cropdetect

運用例
ffplay -f lavfi -i color=white -vf fillborders=0:0:32:16:2,cropdetect
ffplay -f lavfi -i color=white -vf fillborders=0:0:32:16:2,crop=320:192:0:32

以下のようなログが1フレーム毎に流れる。

x1:0 x2:319 y1:32 y2:223 w:320 h:192 x:0 y:32 pts:2 t:0.080000 crop=320:192:0:32
  • x1, x2 は黒枠を除外した横座標の開始と終了ピクセルで、0ピクセル開始
  • y1, y2 は黒枠を除外した縦座標の開始と終了ピクセル、0ピクセル開始
  • w, h, x, y は crop フィルタで指定する引数

上下左右を特定色で埋める fillborders
映像を指定座標に切り取る crop

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

Continue reading “映像の黒枠の場所を検出する cropdetect”

映像を指定座標に切り取る crop

映像を指定座標に切り取る crop フィルタの使い方。出力解像度はフレーム毎に変更できないがクロップする場所はフレーム毎に変更できる。

基本コマンド

中央から縦横100ピクセルにクロップする
ffmpeg -i input -vf crop=w=100:h=100 output
ffplay -i input -vf crop=100:100

左上からクロップするには x, y を 0 にする
ffmpeg -i input -vf crop=w=100:h=100:x=0:y=0 output
ffplay -i input -vf crop=100:100:0:0

左から1フレーム1ピクセル毎に移動する
ffmpeg -i input -vf crop=w=100:h=100:x=n output
ffplay -i input -vf crop=100:100:n

クロップする場所を動かすコマンド例
映像の上に映像をのせる overlay | 応用例

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

Continue reading “映像を指定座標に切り取る crop”

映像に余白を追加する pad

余白を追加することで、別のアスペクト比の映像に手軽に変換できる。ただし出力解像度が奇数になるとピクセルフォーマット次第で余白がずれたり、エンコードエラーになる。

基本コマンド

下のコマンドでエラーが出るときは setsar=1 フィルタを最初に当てる。

オリジナルの解像度に横に60ピクセル、縦に20ピクセル追加し、映像を横に30ピクセル、縦に10ピクセルずらし、余白の色を白にする。
ffmpeg -i input -vf pad=w=iw+60:h=ih+20:x=30:y=10:color=white output
ffplay -i input -vf pad=iw+60:ih+20:30:10:ffffff
ffplay -i input -vf setsar=1,pad=iw+60:ih+20:30:10:ffffff

16:9の映像を横幅固定で4:3の映像にして中央に配置。
ffmpeg -i input -vf pad=y=(ih-oh)/2:aspect=4/3 output
ffplay -i input -vf pad=y=(ih-oh)/2:aspect=4/3
ffplay -i input -vf setsar=1,pad=y=(ih-oh)/2:aspect=4/3

4:3の映像を縦幅固定で16:9の映像にして中央に配置。
ffmpeg -i input -vf pad=x=(iw-ow)/2:aspect=16/9 output
ffplay -i input -vf pad=x=(iw-ow)/2:aspect=16/9
ffplay -i input -vf setsar=1,pad=x=(iw-ow)/2:aspect=16/9

次の方法でも行える:4:3を16:9に、16:9を4:3に余白をつける

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

Continue reading “映像に余白を追加する pad”

mp4, mp3 にカバーアートを付ける

カバーアートを付けるとエクスプローラにサムネイルが表示、変更できる。

H.264 だとサムネイルが表示されるが、H.265 だと表示されないのがこれで表示できる。サムネイルは PNG でも可能。
ffmpeg -i movie.mp4 -i thumb.jpg -disposition:v:1 attached_pic -map 0 -map 1 -c copy movie-with-cover.mp4

MP3 の場合。
ffmpeg -i audio.mp3 -i thumb.jpg -disposition:v:1 attached_pic -map 0 -map 1 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" audio-with-cover.mp3

ffmpeg でメタデータを加える | ニコラボ
albumart – How to add album art with ffmpeg? – Stack Overflow

disposition の設定
音声が2つ以上あるときに再生したとき最初に流れる音声を代えられる。ただし MKV コンテナに限る。

2番目の音声を最初に再生するコマンド例。
ffmpeg -i movie.mp4 -map 0:v -map 0:a -c copy -disposition:a:0 0 -disposition:a:1 default output.mkv

ffmpeg Documentation
-disposition[:stream_specifier] value (output,per-stream)
具体的にそれぞれにどのような効果があるのか分からない。

  • default
  • dub
  • original
  • comment
  • lyrics
  • karaoke
  • forced
  • hearing_impaired
  • visual_impaired
  • clean_effects
  • attached_pic
  • captions
  • descriptions
  • dependent
  • metadata

2019年2月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。

【10/1更新】【ニコニコ生放送】来場者数集計方法変更のお知らせ|ニコニコインフォ

Continue reading “2019年2月のニコ生統計”

リサイズする scale

標準で使える scale フィルタの使い方。外部ライブラリに zscale フィルタがありこちらは HDR、高品質リサイズ向けで処理速度は scale フィルタより速くない。

Zライブラリを使ったリサイズフィルタ zscale

Continue reading “リサイズする scale”

映像の上に映像をのせる overlay

映像を重ねてワイプを作ったり、重ねた映像を動かしたりできる overlay フィルタの使い方。重ねる映像は動画と画像どちらもできる。重ねる映像の解像度が背景となる映像よりも小さくなければならない。

Continue reading “映像の上に映像をのせる overlay”

RGB の色味を手軽に調整できる vibrance

RGB それぞれの色を強く、弱く、反転できる vibrance フィルタの使い方。他にも似たフィルタがあるが、輝度係数の指定があるのが特徴。

基本コマンド

intensity を上げて RGB を同じようにコントラストを上げる
ffmpeg -i input -vf vibrance=intensity=0.5:rbal=1:gbal=1:bbal=1 output
ffplay -i input -vf vibrance=0.5:1:1:1

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

Continue reading “RGB の色味を手軽に調整できる vibrance”

異なる fps を連結して VFR の動画にする

今まで ffmpeg は異なるフレームレートの動画を1つに出力するのはできないと思っていたが、あらかじめ異なるフレームレートにエンコードしておいて、その後に連結すれば VFR の動画になる。

方法は以前書いた demuxer の concat を使えば楽に VFR の動画になる。注意点は映像音声ともに同じコーデックで同じエンコード設定、音声は同じサンプリング数であること。ただし動画によっては「Non-monotonous DTS in output stream 0:0」のエラーが出るが再生して問題なかったら気にしない。

concat を使い分ける
【ffmpeg】動画・音声を連結する concat の使い方 其の3
再エンコードせずに fps を変更する
ffmpeg で使える映像のテストソース

ffmpeg -f concat -safe 0 -i 24-30.txt -c copy vfr.mp4

24-30.txt

file 24p.mp4
file 30p.mp4
file 24p.mp4

Continue reading “異なる fps を連結して VFR の動画にする”

ffmpeg でダウンロード速度を制限する

よく使われるのがリアルタイムの re であるが、それだと1倍速にしかならないので音声の PTS を加工して速度を調整する。

本来のダウンロード速度は制限前より高速であることが前提である。倍速の逆数に asetpts フィルタで変更し arealtime フィルタでリアルタイム処理にする。

1.1倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=10*PTS/11,arealtime -vn -f null -

1.5倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=2*PTS/3,arealtime -vn -f null -

2倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=PTS/2,arealtime -vn -f null -