フィールドタイプや色域を記述する setparams

ffmpeg 4.1 から使えるフィルタ。出力映像のフィールドタイプや色域などの色情報を記述する setparams フィルタの使い方。 入力映像は変更しないがフィルタやエンコーダの処理方法に影響を与える。

基本コマンド

SD 解像度の設定で記述する。
ffmpeg -i input -vf setparams=field_mode=prog:range=tv:color_primaries=smpte170m:color_trc=smpte170m:colorspace=smpte170m output

HD 解像度の設定で記述する。
ffmpeg -i input -vf setparams=field_mode=prog:range=tv:color_primaries=bt709:color_trc=bt709:colorspace=bt709 output

ちなみに、showinfo フィルタで色域などの色情報を調べることができる。ただし古いバージョンだと表示しない
ffplay -i input -vf showinfo

n:   0 pts:      0 pts_time:0       pos:  615334 fmt:yuv420p sar:1/1 s:640x360 i:P iskey:1 type:I checksum:34D2040D 
plane_checksum:[4CFF3752 C34B881E EC87448E] mean:[126 117 133] stdev:[52.7 7.8 6.1]
color_range:tv color_space:smpte170m color_primaries:smpte170m color_trc:smpte170m

しかし、setparams フィルタで書き換えても idet フィルタで調べたフィールドタイプは変えられない。

フレームがインターレースかどうかを調べる idet

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

Continue reading “フィールドタイプや色域を記述する setparams”

再エンコードせずに fps を変更する

Using ffmpeg to change framerate – Stack Overflow より、H.264, H.265 の映像を再エンコードせずにフレームレート(fps)を変更する方法。映像のフレームレートだけなので音声は再エンコードしないと速度を変えられない。音声の速度変更は atempo, rubberband フィルタのどちらかを使う。

【ffmpeg】倍速再生できる動画にエンコードする
サンプリング周波数を変えずにテンポとピッチを変える rubberband

元映像のフレームレートよりも入力フレームレートを大きくすれば再生速度は速く、動画時間は短くなる。反対に入力フレームレートを小さくすれば再生速度は遅く、動画時間は長くなる。

H.264 の場合。
ffmpeg -i input.mp4 -c copy output.h264
ffmpeg -r 12 -i output.h264 -c copy output.mp4
ffmpeg -r 36 -i output.h264 -c copy output.mp4

音声も合わせるなら映像の速度に合わせて atempo も揃える。
ffmpeg -r 36 -i output.h264 -i input.mp4 -filter_complex [1:a]atempo=1.5[a] -map 0 -c:v copy -map [a] -c:a aac output.mp4

H.265 の場合。
ffmpeg -i input.mp4 -c copy output.h265
ffmpeg -r 12 -i output.h265 -c copy output.mp4
ffmpeg -r 36 -i output.h265 -c copy output.mp4

映像と音声の pts を扱う setpts, asetpts

pts を処理することで再生速度を上げたり下げたり、複数のファイルを合わせたりするときに pts を揃えたりするのに使う setpts, asetpts フィルタの使い方。

基本コマンド

再生速度を2倍にする。
ffmpeg -i input -filter_complex setpts=(PTS-STARTPTS)/2;atempo=2 output

再生速度を半分にする。
ffmpeg -i input -filter_complex setpts=2*(PTS-STARTPTS);atempo=0.5 output

【ffmpeg】倍速再生できる動画にエンコードする

2つの映像の pts を 0 開始に揃えて縦に並べる。
ffmpeg -i input1 -i input2 -filter_complex [0:v]setpts=PTS-STARTPTS[v0];[1:v]setpts=PTS-STARTPTS[v1];[v0][v1]vstack output

公式ドキュメント:FFmpeg Filters Documentation : setpts, asetpts

Continue reading “映像と音声の pts を扱う setpts, asetpts”

透過部分だけに色を付ける

Replace transparent pixels (alpha) with black in ffmpeg? – Stack Overflow より、透過情報のある画像、または映像に透過部分を別の色に変えて透過情報を消すコマンド。

透過部分に映る色を color=black で指定するか、FFFFFF形式の RGB で指定する。
ffmpeg -i in.png -filter_complex "color=black,format=rgb24[c];[c][0]scale2ref[c][i];[c][i]overlay=format=auto:shortest=1,setsar=1" out.png
ffmpeg -i in.png -filter_complex "color=000000,format=rgb24[c];[c][0]scale2ref[c][i];[c][i]overlay=format=auto:shortest=1,setsar=1" out.png

映像、音声情報を映像に表示する graphmonitor, agraphmonitor

ffmpeg 4.1 から使えるフィルタ。フィルタ間のフレーム数、時間、解像度、フォーマット、フレームレートを映像に表示する graphmonitor, agraphmonitor フィルタの使い方。文字の描写に drawtext フィルタを使わないので、fontconfig 関係のライブラリが不要。出力フォーマットは rgba になるので overlay フィルタを使うと透過して下の映像が映る。

基本コマンド

ffplay -i input -vf graphmonitor=s=hd720:o=0.9:m=full:f=queue
ffplay -i input -vf graphmonitor

公式ドキュメント:FFmpeg Filters Documentation : graphmonitor, agraphmonitor

Continue reading “映像、音声情報を映像に表示する graphmonitor, agraphmonitor”

解像度が一致しなくても映像を並べられる xstack

ffmpeg 4.1 から使えるフィルタ。overlay, stack フィルタを合わせたような xstack フィルタの使い方。解像度が異なっていても使えるのが特徴で、上下左右にも映像の上にも重ねられる。余白部分は YUV なら [0:0:0] の緑、RGB なら [0:0:0] の黒になり、フレームレートが一致しないと小さい方に合わされる。

overlay フィルタのように映像の上に重ねることもできるが、透過情報は引き継げないのできれいに色が抜けない。overlay フィルタよりも処理が早いので透過させないならこちらの方がよいが、overlay_opencl, overlay_qsv が使えるのならその限りではない。

Windows の ffmpeg で生放送する方法 : overlay
Windows の ffmpeg で生放送する方法 : stack
qsv 対応の ffmpeg をつくる : overlay_qsv

Continue reading “解像度が一致しなくても映像を並べられる xstack”

2018年10月のニコ生統計

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

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

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

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

Continue reading “2018年10月のニコ生統計”

ffmpeg で動画にロゴ画像を追加し透過させる

具体的には overlay フィルタを使って画像を映像の上に載せるが、そのままだと画像が透過しないので format フィルタでアルファチャンネルを追加し、lutyuv フィルタで透過具合を指定する。画像が動画よりも縦横のどちらかの解像度が超えている場合は予めリサイズするか、フィルタで小さくする。

Windows の ffmpeg で生放送する方法 : lutyuv
Windows の ffmpeg で生放送する方法 : overlay
Windows の ffmpeg で生放送する方法 : scale
Windows の ffmpeg で生放送する方法 : crop
ffmpeg を使って透過したオーバーレイ動画を作る

プレビュー例
ffmpeg -re -i movie.mp4 -loop 1 -i input.jpg -filter_complex [1]format=yuva420p,lutyuv=a=64,[0]overlay=x=10:y=20 -an -f sdl -

動画で出力
ffmpeg -i movie.mp4 -loop 1 -i input.jpg -filter_complex [1]format=yuva420p,lutyuv=a=64,[0]overlay=x=10:y=20 -c:a copy output.mp4

画像を半分にリサイズする
ffmpeg -i movie.mp4 -loop 1 -i input.jpg -filter_complex [1]scale=iw/2:ih/2,format=yuva420p,lutyuv=a=64,[0]overlay=x=10:y=20 -c:a copy output.mp4

左上を基準で半分にクロップする
ffmpeg -i movie.mp4 -loop 1 -i input.jpg -filter_complex [1]crop=iw/2:ih/2:0:0,format=yuva420p,lutyuv=a=64,[0]overlay=x=10:y=20 -c:a copy output.mp4

ffmpeg 4.1 リリース

2018年11月6日に ffmpeg 4.1 al-Khwarizmi(フワーリズミー) がリリースされた。今回のリリースはメジャーアップデートとなり、セキュリティ対応や 4.0 以降に追加された新機能の中からマスターにしか追加されていなかったフィルタやエンコーダ、デコーダ等の新機能が全て取り込まれた。今回は AV1 パーサlibdav1d による AV1 デコーダ
(4.2 以降)
AV1 のビットストリームフィルタlibaomenc による AV1 エンコーダの tile サポートlibxavs2 による AVS2 エンコーダなど新しいコーデックの新機能が追加されている。

libdav1d による AV1 デコーダは 4.2 以降だったので訂正した。

前回記事
ffmpeg 4.0 リリース

RELEASE NOTES for FFmpeg 4.1 “al-Khwarizmi”

4.0 以降に取り込まれた機能の一覧
Changelog 4.0 to 4.1 < git.videolan.org Git

言及し忘れていたが configure の速度が大幅に向上している。