🐕
ffmpegで画像が変色する話
この記事は かろ噴水・ゆるゆる Advent Calendar 2023 の12/05日分です(1日遅れ)
バグ一つ直すのに4回リリースするとかいうアホなことをやらかしたので備忘録的に
前提
私はffmpegを用いて映像に対して連番のpng画像をオーバーレイするものを作っています
ユーザーさんからオーバーレイしている画像の色がおかしいという報告をもらったためこれについて調査していました
結論
[元データ]format=yuva444p,colorspace=bt709:iall=bt601-6-525:fast=1[color];[元データ]format=rgba,alphaextract[alpha];[color][alpha]alphamerge[結果]
これで行けます
原因
ffmpeg標準のrgb→yuv変換がクソ
ref: https://zenn.dev/razokulover/scraps/4282a6911e4ca7
解説
- 画像の色空間をyuva444pに変換します
format=yuva444p,colorspace=bt709:iall=bt601-6-525:fast=1
- 1で変換を行う際にalpha値が失われてしまうためalpha値だけを別で取り出します
format=rgba,alphaextract
- 画像データとalpha値を合成します
alphamerge
実例
オーバーレイしたい場合は
ffmpeg -i input.mp4 -r 30 -i image_%03d.png -filter_complex "[1:v]format=yuva444p,colorspace=bt709:iall=bt601-6-525:fast=1[color];[1:v]format=rgba,alphaextract[alpha];[color][alpha]alphamerge[image];[0:v][image]overlay[out_v]" -map:v "[out_v]" -map:a "0:a" output.mp4
とするとできます
Discussion