指定フレーム毎に順番を入れ換える shuffleframes

映像のフレーム順を入れ換える shuffleframes フィルタの使い方。AviSynth の SelectEvery のように使える。逆再生にする場合は reverse フィルタを使う。

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

基本コマンド

引数はスペース区切りの 0 フレーム目から指定する。-1 を指定するとフレームがドロップする。

3フレーム毎に、2フレーム目と3フレーム目を入れ換える。
ffmpeg -i input -vf "shuffleframes=0 2 1" output

4フレーム毎に 4, 8, 12 … のように4番目のフレームがドロップする。
ffmpeg -i input -vf "shuffleframes=0 1 2 -1" output

4フレーム毎に、2, 3, 4番目のフレームがドロップする。
ffmpeg -i input -vf "shuffleframes=0 -1 -1 -1" output

30000/1001 の映像を5フレーム毎に5番目のフレームがドロップし、pts, fps を修正する。
ffmpeg -i input -vf "shuffleframes=0 1 2 3 -1,setpts=N/((24000*TB)/1001)" -r 24000/1001 output

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

映像と音声の pts を扱う setpts, asetpts
ffmpeg でのフレームレート設定の違い
映像と音声を逆再生にエンコードする

2019年1月のニコ生統計

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

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

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

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

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

2018年12月のニコ生統計

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

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

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

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

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

ニコ生を外部ツールで見ながら録画する

配信形式が RTMP から HLS に変わり同じアカウントで録画しながら配信を見ると片方が止まることがあるのでそれを回避する方法。今回はTSではなくライブ配信を対象とする。使用するツールは ffmpeg と ffplay で録画しながら tee プロトコルで UDP に配信している。別の配信を同時に配信する場合はポート番号の 8080 を変更する。

FFmpeg Formats Documentation : tee

ユーザー生放送のライブの RTMP はうまく受信できない。さらに HLS は直ぐにプレイリストにアクセスできなくなるのでコメントビューワを同時に起動して配信コメントを受信する。それでもアクセスできなくなり録画が中断することもあるし、セグメント欠けを起こすこともある。

Continue reading “ニコ生を外部ツールで見ながら録画する”

ニコ生旧配信TSの録画まとめ

2018年12月11日の昼過ぎの仕様変更により普通の方法では従来の Flash Player を使った配信が見られなくなった。しかし現在のところ Flash Player で見るのは完全にはふさがれていないので見る方法と保存方法、コメントとの同期についてのまとめ。

今までタイムシフト(TS)の保存と言えば kakorokuR が一般的で、他の作者も平行してlivedl、(仮 が開発されていたが公式のTSしか見ていない人には kakorokuR で十分だった。しかし kakorokuR、imarokuR が同時に使えなくなったので仕方なく他のツールを使う人が急増した。

livedl:livedl – 新配信(HTML5)に対応したニコ生録画ツール。他サイトにも対応 – himananiito’s diary
(仮:プログラムを作ってみるコミュニティ-ニコニコミュニティ

Continue reading “ニコ生旧配信TSの録画まとめ”

レンズ補正フィルタ lenscorrection

レンズ補正フィルタは他に frei0rlensfun などの外部フィルタがある。手動補正なのであらかじめレンズの視野(Field of View)を調べておくと設定が楽になる。

基本コマンド

既定値での設定。k1, k2 が0なので変化しない。
ffmpeg -i input -vf lenscorrection=cx=0.5:cy=0.5:k1=0:k2=0 output

video – Is there a way to remove GoPro fisheye using ffmpeg – Stack Overflow より k1 の計算方法。

GoPro 3 setting: 16 x 9 Widescreen :: H fov = 69.5 || V fov = 118.2 || Diag = 133.6
118.2 / 69.5 * 133.6 = 227.216, k1=227

GoPro のここでは HERO5 の FOV のデータが公開されている。
jp.gopro.com/help/articles/Question_Answer/HERO5-Black-Field-of-View-FOV-Information より

垂直画角(V. FOV) 水平画角(H. FOV) 対角画角(Diag)
4 x 3 W 94.4 122.6 149.2
4 x 3 M 72.2 94.4 115.7
4 x 3 N 49.1 64.6 79.7
16 x 9 W 69.5 118.2 133.6
16 x 9 M 55 94.4 107.1
16 x 9 N 37.2 64.4 73.6

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

Continue reading “レンズ補正フィルタ lenscorrection”

2018年11月のニコ生統計

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

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

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

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

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

フィールドタイプや色域を記述する 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”