映像を重ねてワイプを作ったり、重ねた映像を動かしたりできるoverlayフィルタの使い方。1入力目の映像が背景になり、2入力目の映像が最初に入力された映像の上に表示される。2入力目に透過情報があればその部分に背景にとなる1入力目の映像が映る。
透過部分に関係なく複数の映像を任意の割合で混ぜるならmixフィルタを使う。
複数の映像を任意の割合でミックスする mix
niconicoとffmpegのことを中心に書いてる
映像を重ねてワイプを作ったり、重ねた映像を動かしたりできるoverlayフィルタの使い方。1入力目の映像が背景になり、2入力目の映像が最初に入力された映像の上に表示される。2入力目に透過情報があればその部分に背景にとなる1入力目の映像が映る。
透過部分に関係なく複数の映像を任意の割合で混ぜるならmixフィルタを使う。
複数の映像を任意の割合でミックスする mix
RGB それぞれの色を強く、弱く、反転できるvibranceフィルタの使い方。他にも似たフィルタがあるが、輝度係数の指定があるのが特徴。
intensity を上げて RGB を同じようにコントラストを上げる
ffmpeg -i input -vf vibrance=intensity=0.5:rbal=1:gbal=1:bbal=1 output
ffplay -i input -vf vibrance=0.5:1:1:1
今まで ffmpeg は異なるフレームレートの動画を1つに出力するのはできないと思っていたが、あらかじめ異なるフレームレートにエンコードしておいて、その後に連結すれば VFR の動画になる。
方法は以前書いた demuxer の concat を使えば楽に VFR の動画になる。注意点は映像音声ともに同じコーデックで同じエンコード設定、音声は同じサンプリング数であること。ただし動画によっては「Non-monotonous DTS in output stream 0:0」のエラーが出るが再生して問題なかったら気にしない。エラーが気になるときは入力オプションに-fflags +igndtsをつけてremuxする。
ffmpeg -fflags +igndts -i input.ts -c:v copy tmp.mp4 ffmpeg -i tmp.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts fix.ts
Trim with concat gives issues on the trim point : ffmpeg
または-bsf:a aac_adtstoascをつけてremuxする。
ffmpeg -i input.ts -c:v copy -bsf:a aac_adtstoasc output.mp4
m3u8 – how to fix Non-monotonous DTS in output stream 0:1; when using ffmpeg – Stack Overflow
ffmpeg -f concat -safe 0 -i 24-30.txt -c copy vfr.mp4
24-30.txt
file 24p.mp4 file 30p.mp4 file 24p.mp4
よく使われるのがリアルタイムの-reであるが、それだと1倍速にしかならないので音声の PTS を加工して速度を調整する。
本来のダウンロード速度は制限前より高速であることが前提である。倍速の逆数にasetptsフィルタで変更しarealtimeフィルタでリアルタイム処理にする。
1.1倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=10*PTS/11,arealtime -vn -f null -
1.5倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=2*PTS/3,arealtime -vn -f null -
2倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=PTS/2,arealtime -vn -f null -
公式ドキュメント:FFmpeg Filters Documentation : realtime, arealtime
2021年7月17日以降のバージョンでは-readrateが追加され、任意の倍率に制限できるようになった。-readrate 1は-reと同じ効果。
2倍速の例
ffmpeg -readrate 2 -i "https://example.com/hls/playlist.m3u8" -c copy output.ts
任意の角度に回転でき、時間経過で回転させたり止めたりできるrotateフィルタの使い方。似たフィルタにtranspose、hflip、vflipフィルタがある。
解像度はそのままに上下左右を入れ換えるvflip, hflipフィルタの使い方。似たフィルタにrotate, transposeフィルタがある。
ピクセル数はそのままなので、1280X720 だと、90度回転すると 720X1280 になる。似たフィルタにrotate, hflip, vflipフィルタがある。
映像のフレーム順を入れ換えたり、間引いたりする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
関連記事
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。