2017年12月のニコ生統計

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

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

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

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

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 のビルドにはオプション指定しなくても複数のビット深度に対応している。

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

AMD VCE 対応の ffmpeg をつくる

ffmpeg 4.0 から追加されたエンコーダ。AMF(Advanced Media Framework)SDK を使ったAMD の VCE(Video Coding Engine)を ffmpeg で使う方法。RX470 で試したところ、h264_amfのほうが、hevc_amfよりも VMAFスコアを見る限り高画質でエンコード速度は少し遅く、デコード速度が早くなる。

関連記事

wiki

準備

Windows以外
Gentooでamf-amdgpu-proを利用してGPUで動画エンコードを行えるffmpegを作る方法のメモ – joker1007’s diary
[Question]: What are the proper FFMPEG syntax usages with AMD AMF drivers on Ubuntu Linux? · Issue #332 · GPUOpen-LibrariesAndSDKs/AMF

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フィルタを使って左右に余白を追加し、その余白を合わせ鏡のように変えることも出来る。

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

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

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

1つのファイルで連続するフレームを混ぜるならtmixフィルタがある。
連続フレームの映像を任意の割合でミックスするtmix

似たフィルタに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フィルタの使い方。複数並べた映像を元の連続フレームに戻すにはuntileフィルタを使う。

映像を分割し連続フレームにするuntile

3×3のタイルの出力例

基本コマンド

3×3のタイルを-t 3で3秒間の重複のない連続画像を出力する。
ffmpeg -i input -t 3 -vf tile=layout=3x3:nb_frames=0:margin=0:padding=0:color=black:overlap=0:init_padding=0 output-%03d.jpg

キーフレームだけ出力する場合には入力ファイルの前に-skip_frame nokeyをつける。
ffmpeg -skip_frame nokey -i input -t 3 -vf tile=3x3 output-%03d.jpg

ノンリニア編集のように過去5つ前までのフレームを横に表示し、アスペクト比を維持せずに最大横幅が1920ピクセル、縦幅が1080ピクセルまで。
ffplay -i input -vf tile=5x1:overlap=4,scale=1920:1080:force_original_aspect_ratio=decrease

関連記事

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

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

ffmpeg で MPEG-DASH を扱う

MP4Boxは使わずにffmpegだけでMPEG-DASHのMPDファイルを作る方法。またffmpeg 3.4からはlibxml2をリンクすることでMPDファイルを読み込むこともできる。各セグメントの.m4sファイルは最初に読み込むinit.mp4を毎回参照し各セグメントの.m4sファイルをデコードしている。

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

公式のガイドライン : DASH-IF Live Media Ingest Protocol : web.archive

外部記事

基本コマンド

すべてのセグメントをMPDに記載してコピーする。
ffmpeg -i input.mp4 -c copy -window_size 0 -movflags +faststart output.mpd

1つの映像に1つ目はオリジナルをコピーし、2つめはアスペクト比固定で横解像度は2で割れて、縦解像度360pにリサイズして2つのストリームをリアルタイム-reで出力する。-mapを2度使うことで2出力にしている。
ffmpeg -re -i input.mp4 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -c:v:0 copy -c:a:0 copy -filter:v:1 "scale=-2:360" -c:v:1 libx264 -profile:v:1 main -b:v:1 600k -c:a:1 aac -b:a:1 128k -f dash -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -movflags +faststart output.mpd

改行しわかりやすくしたもの。

ffmpeg -re -i input.mp4 -map 0 -map 0 -c:v:0 copy -c:a:0 copy 
-filter:v:1 "scale=-2:360" -c:v:1 libx264 -profile:v:1 main -b:v:1 600k -c:a:1 aac -b:a:1 128k 
-f dash -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" 
-movflags +faststart output.mpd

公式ドキュメントには-movflagsを以下に利用している。
-movflags empty_moov+separate_moof+default_base_moof+cmaf

ffmpeg Documentation : mov, mp4, ismv

その他のフラグは以下に利用している。
-fflags genpts -export_side_data prft

ffmpeg Documentation : Format Options
ffmpeg Documentation : Codec Options

dashの読み込み時の設定がDemuxersのほうで、da9a6d5から-decryption_keys key=value形式の辞書型のキーから復号できる。
avformat/mov: add support for multiple decryption keys · FFmpeg/FFmpeg@da9a6d5 · GitHub

公式ドキュメント:FFmpeg Formats Documentation : dash(Demuxers)
公式ドキュメント: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月のニコ生統計”