ピクセル数はそのままなので、1280X720 だと、90度回転すると 720X1280 になる。似たフィルタにrotate, hflip, vflip
フィルタがある。
指定フレーム毎に順番を入れ換える shuffleframes
映像のフレーム順を入れ換えたり、間引いたりするshuffleframes
フィルタの使い方。AviSynth の SelectEveryのように使える。逆再生にする場合はreverse
フィルタを使う。
reverse
フィルタの使い方。
映像と音声を逆再生にエンコードする
応用例
1フレームに複数のフレームを表示する tile
Raspberry Pi 4 Model Bの64bit OSでインタレ解除してHWエンコードする
基本コマンド
引数はスペース区切りの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/1001fpsの映像を5フレーム毎に5番目のフレームを間引きフレームレートを5分の4にしてsetpts
フィルタでPTSを修正する。
ffmpeg -f lavfi -i testsrc2=r=30000/1001:d=10 -vf "shuffleframes=0 1 2 3 -1,setpts=N/((24000*TB)/1001)" -r 24000/1001 output
公式ドキュメント:FFmpeg Filters Documentation : shuffleframes
関連記事
2019年1月のニコ生統計
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。
2018年12月のニコ生統計
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。
ニコ生を外部ツールで見ながら録画する
配信形式が RTMP から HLS に変わり同じアカウントで録画しながら配信を見ると片方が止まることがあるのでそれを回避する方法。今回はTSではなくライブ配信を対象とする。使用するツールは ffmpeg と ffplay で録画しながら tee プロトコルで UDP に配信している。別の配信を同時に配信する場合はポート番号の 8080 を変更する。
FFmpeg Formats Documentation : tee
ユーザー生放送のライブの RTMP はうまく受信できない。さらに HLS は直ぐにプレイリストにアクセスできなくなるのでコメントビューワを同時に起動して配信コメントを受信する。それでもアクセスできなくなり録画が中断することもあるし、セグメント欠けを起こすこともある。
ニコ生旧配信TSの録画まとめ
2019年5月23日のメンテナンス以降の配信で getedgestatus で調べられる rtmp は廃止された。
2018年12月11日の昼過ぎの仕様変更により普通の方法では従来の Flash Player を使った配信が見られなくなった。しかし現在のところ Flash Player で見るのは完全にはふさがれていないので見る方法と保存方法、コメントとの同期についてのまとめ。
今までタイムシフト(TS)の保存と言えば kakorokuR が一般的で、他の作者も平行してlivedl、(仮 が開発されていたが公式のTSしか見ていない人には kakorokuR で十分だった。しかし kakorokuR、imarokuR が同時に使えなくなったので仕方なく他のツールを使う人が急増した。
livedl:livedl – 新配信(HTML5)に対応したニコ生録画ツール。他サイトにも対応 – himananiito’s diary
(仮:プログラムを作ってみるコミュニティ-ニコニコミュニティ
レンズ補正フィルタ lenscorrection
レンズ補正フィルタは他にperspective
、remap
フィルタやfrei0r
、lensfun
などの外部フィルタがある。手動補正なのであらかじめレンズの視野(Field of View)を調べておくと設定が楽になる。魚眼レンズの修正もできる。
写真など傾いた対象を修正する perspective
ffmpeg で使える frei0r フィルタの使い方
基本コマンド
既定値での設定。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 のデータが公開されている。
HERO5 Black の FOV (視野角) 情報より
垂直画角(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 |
- HERO7 の視野角 (FOV) 情報
- HERO10 Black:デジタルレンズ視野角 (FOV) 情報
- HERO12 Black:デジタルレンズ視野角 (FOV) 情報
- 視野角(FOV)情報 GoPro ゴープロ | 日本正規代理店 タジマモーターコーポレーション
2018年11月のニコ生統計
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。
フィールドタイプや色域を記述するsetparams
ffmpeg 4.1から使えるフィルタ。フィルタ内のフィールドタイプや色域などの色情報を記述するsetparams
フィルタの使い方。 入力映像は変更しないがフィルタやエンコーダの処理方法に影響を与える。
まとめ:色関係の設定のまとめ
再エンコードせずに fps を変更する
Using ffmpeg to change framerate – Stack Overflowより、H.264, H.265 の映像を再エンコードせずにフレームレート(fps)を変更する方法。映像のフレームレートだけなので音声は再エンコードしないと速度を変えられない。音声の速度変更はatempo, rubberband
フィルタのどちらかを使う。
公式wikiにも記載された。
How to speed up / slow down a video – FFmpeg
【ffmpeg】倍速再生できる動画にエンコードする
サンプリング周波数を変えずにテンポとピッチを変える rubberband
元映像のフレームレートよりも入力フレームレートを大きくすれば再生速度は速く、動画時間は短くなる。反対に入力フレームレートを小さくすれば再生速度は遅く、動画時間は長くなる。同様に本当のフレームレートが30000/1001なのに、30でエンコードされている動画の修正にも使える。
H.264 の場合。
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb output.h264
ffmpeg -fflags +genpts -r 12 -i output.h264 -c copy output.mp4
ffmpeg -fflags +genpts -r 36 -i output.h264 -c copy output.mp4
音声も合わせるなら映像の速度に合わせてatempo
も揃える。
ffmpeg -fflags +genpts -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 -bsf:v hevc_mp4toannexb output.h265
ffmpeg -fflags +genpts -r 12 -i output.h265 -c copy output.mp4
ffmpeg -fflags +genpts -r 36 -i output.h265 -c copy output.mp4
video – Change framerate in ffmpeg without reencoding – Super Userより、-itsscaleを使う方法もある。こちらはH.264、H.265に限らず、VP9やAV1でもフレームレートを変えられる。
30を30000/1001に修正するには、30/(30000/1001)=1.001で少数を指定する。逆に音声フィルタはその逆数を指定する。
ffmpeg -itsscale 1.001001 -i input -af "rubberband=(30000/1001)/30" -r 30000/1001 -c:v copy -c:a aac -b:a 128k output.mp4
How do I speed up a video by 60X in ffmpeg? – Super User
video – using ffmpeg to convert 60fps to 29.97fps without dropping frames – Super User
ffmpeg 4.4からはビットストリームフィルタでPTSを書き換えられるようになったので再エンコードコード不要で映像の再生速度を変更できる。以下の例は2倍速。setts=TS/再生速度で指定する。
ffmpeg -i input -af "atempo=2" -bsf:v setts=ts=TS/2 -c:v copy output