ass の字幕ファイルを動画に焼き付ける ass

ass の字幕ファイルを動画に焼き付ける(ハードサブ) ass フィルタの使い方。似たフィルタに subtitles フィルタがあるが、ass フィルタは単純に ass ファイルを動画に焼き付けるだけの簡易なフィルタである。このフィルタを使うには –enable-libass が必要である。

字幕ファイルを動画に焼き付ける subtitles

基本コマンド

input.ass ファイルを表示する
ffmpeg -i input -vf ass=input.ass output
ffplay -i input -vf ass=input.ass

ass ファイルのパス指定の例。詳しくは パス指定とエスケープ を参照
ffmpeg -i input -vf ass='E\:/input.ass' output
ffplay -i input -vf ass='E\:/input.ass'

字幕ファイルのエンコードは –enable-libass がなくてもできる
ffmpeg -i input.srt output.ass

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

Continue reading “ass の字幕ファイルを動画に焼き付ける ass”

x264 一つのバイナリで複数のビット深度に対応

一つのバイナリで 8, 10 ビット深度の両方に対応した。それに伴って ffmpeg も両方エンコードが出来るようになった。ただし古い ffmpeg を利用するとエラーが出るので master を利用する。

対応コミット
git.videolan.org Git – x264.git/commitdiff : Unify 8-bit and 10-bit CLI and libraries
git.videolan.org Git – ffmpeg.git/commitdiff : x264: Support version 153

x264 のビルドにはオプション指定しなくても複数のビット深度に対応している。

ソースコード配布先
x264, the best H.264/AVC encoder – VideoLAN
git clone https://git.videolan.org/x264.git

Continue reading “x264 一つのバイナリで複数のビット深度に対応”

AMD VCE 対応の ffmpeg をつくる

ffmpeg 4.0 に追加されたエンコーダ。AMF(Advanced Media Framework) SDK を使ったAMD の VCE(Video Coding Engine) を ffmpeg で使う方法。

関連記事
ffmpeg に nvenc(cuda) をインストールする
qsv 対応の ffmpeg をつくる

hardware acceleration の Wiki:HWAccelIntro – FFmpeg

準備

Continue reading “AMD VCE 対応の ffmpeg をつくる”

RGB を伸張させる normalize

指定色でのモノトーンを作ったり、レンジを広げて見栄えをよくするnormalize フィルタの使い方。

基本コマンド

フルダイナミックレンジに伸張し、平準化はしない、フリッカー(ちらつき)は映像によっては発生する
ffmpeg -i input -vf normalize=blackpt=black:whitept=white:smoothing=0:independence=1:strength=1
ffplay -i input -vf normalize=blackpt=black:whitept=white:smoothing=0:independence=1:strength=1

Continue reading “RGB を伸張させる normalize”

上下左右を特定色で埋める fillborders

解像度を変えずに上下左右を特定色で埋める fillborders フィルタの使い方。上下左右にロゴや不要な映像が入っているときに真っ黒にしたり、4:3解像度の映像を16:9にするときに pad フィルタを使って左右に余白を追加し、その余白を合わせ鏡のように変えることも出来る。

基本コマンド

左右100ピクセルを隣接した色で埋める
ffmpeg -i input -vf fillborders=left=100:right=100 output
ffplay -i input -vf fillborders=100:100

上下100ピクセルを白枠に変える
ffmpeg -i input -vf fillborders=top=100:bottom=100:mode=fixed:color=white output
ffplay -i input -vf fillborders=0:0:100:100:2:white

smptebars に fillborders フィルタでライムグリーンをつけた例

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

Continue reading “上下左右を特定色で埋める fillborders”

複数の映像を任意の割合でミックスする mix

ffmpeg 4.0 で追加されたフィルタ。複数の映像を任意の割合でミックスする mix フィルタの使い方。今までは透過チャンネルを使って overlay フィルタを使っていたがこれからはもっと手軽に複数の映像を映し出すことが出来る。

似たフィルタに fade フィルタがある
フェードイン、フェードアウトの設定ができる fade

基本コマンド

既定値では2入力である
ffmpeg -i input1 -i input2 -filter_complex mix ouput
ffmpeg -re -i input1 -i input2 -filter_complex mix -f sdl -

testsrc2 の映像

smptebars の映像

testsrc2, smptebars を mix した映像

3入力する場合のコマンド例
ffmpeg -i input1 -i input2 -i input3 -filter_complex mix=3 ouput
公式ドキュメント:FFmpeg Filters Documentation : mix

Continue reading “複数の映像を任意の割合でミックスする mix”

1フレームに複数のフレームを表示する tile

一つの映像の前後フレームを1フレームに表示し確認できる tile フィルタの使い方。

3×3 のタイルの出力例

基本コマンド

3×3 のタイルで3秒間連番画像を出力する
ffmpeg -i input -vf tile=layout=3x3:nb_frames=0:margin=0:padding=0:color=black:overlap=0:init_padding=0 -t 3 output-%03d.jpg
キーフレームだけ出力する場合には入力ファイルの前に -skip_frame nokey をつける
ffmpeg -skip_frame nokey -i input -vf tile=3x3 -t 3 output-%03d.jpg
ノンリニア編集のように過去5つ前までのキーフレームを横に表示する
ffplay -skip_frame nokey -i input -vf tile=5x1:overlap=4,scale=1920:-1
ノンリニア編集のように過去5つ前までのフレームを横に表示する
ffplay -i input -vf tile=5x1:overlap=4,scale=1920:-1

関連記事
【ffmpeg】動画から特定フレームを画像で出力する方法
ニコ生のTSから一定時間毎に画像を出力する
ニコ生のTSからサムネイルを出力する
Windows の ffmpeg で生放送する方法 : スタック(映像を並べる)

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

Continue reading “1フレームに複数のフレームを表示する tile”

ffmpeg で MPEG-DASH を扱う

MP4Box は使わずに ffmpeg だけで MPEG-DASH の MPDファイルを作る方法。また ffmpeg 3.4 からは libxml2 を有効にすることで MPDファイルを読み込むことも出来る。

関連記事
ffmpeg で Apple HTTP Live Streaming(HLS)を扱う

公式のガイドライン : Guidelines | DASH Industry Forum

基本コマンド

すべてのセグメントを MPD に記載してコピーする
ffmpeg -i input -c copy -window_size 0 output.mpd
1つの映像に1つ目はオリジナルをコピーし、2つめは 640×360 にリサイズして2つのストリームでリアルタイム -re で出力する。-map 0 を2度使うことで2出力にしている
ffmpeg -re -i input -map 0 -map 0 -c:a copy -c:v:0 copy -b:v:1 600k -s:v:1 -s 640x360 -profile:v:1 main -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" output.mpd

公式ドキュメント:FFmpeg Formats Documentation : dash(Muxers)

Continue reading “ffmpeg で MPEG-DASH を扱う”

2017年11月のニコ生統計

集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。2017年8月24日(34週目)からユーザー生放送の新配信での予約延長が無料になり総配信数が減っている。

1枠30分はもはや絶滅危惧種なので来年からは30分枠、6000制限をなくす予定。

Continue reading “2017年11月のニコ生統計”

新しい映像の動きの評価 vmafmotion

2017年12月16日
vmafmotion, libvmafフィルタの意味をはき違えていたのでタイトルと本文を訂正、修正しました。

Netflix が使っている複数の解像度にエンコードされた動画の 品質評価 動きの評価に使われている VMAF(Video Multimethod Assessment Fusion) のモーションスコアの計算が ffmpeg で使えるようになった。

VMAF を計算するフィルタは2つあり、この vmafmotion./configure --enable-libvmaf でライブラリをインストールして使える libvmaf フィルタがある。前者は1つの映像の vmafモーションスコア(映像の変化)を計算し、後者は2つの映像を比較した vmafスコア(品質評価)を計算する。vmafmotion, libvmafフィルタは異なる解像度でも評価ができ、libvmafフィルタは ssim, psnrフィルタよりも見た目の評価(主観的評価)に近しいものを目指している。vmafmotion フィルタは数値が 0 に近いほど前フレームからの変化が少ないことを示す。

新しい映像の品質評価 libvmaf
2つの映像の画質評価をする ssim

VMAF の解説記事
Netflix/vmaf: Perceptual video quality assessment based on multi-method fusion.
Toward A Practical Perceptual Video Quality Metric – Netflix TechBlog – Medium
Finding the Just Noticeable Difference with Netflix VMAF – Streaming Learning Center

基本コマンド

vmaf モーションスコアを計算しエンコードが終わると平均 vmaf モーションスコアをコンソールに表示する
ffmpeg -i input -vf vmafmotion -an -f null -
さらにフレーム毎の vmaf モーションスコアを log.txt のテキストファイルで出力する
ffmpeg -i input -vf vmafmotion=log.txt -an -f null -

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

オプション

stats_file[string]
すべてのフレームの vmaf モーションスコアを表示したログファイルを指定したパスに出力する
既定値:無指定(何も出力しない)