FFmpeg 视频转PNG的一些坑,及避坑
dwing吧
全部回复
仅看楼主
吧务
level 14
Mr-Z♂ 楼主
本文仅适用于当前版本,如果以后FFmpeg修复了某些Bug请勿喷我[滑稽]
是之前在搞Flip Flappers的OP的Waifu2x的时候,用FFmpeg把视频转成PNG序列的时候、以及平时偶尔瞎捣鼓的时候发现的(不要吐槽为什么不用VS滤镜……我用waifu2x-ncnn-vulkan,那时候还没有VS移植)
大概是以下几点:
1、YUV420-->RGB的时候,使用的Chroma Upscaling算法是Neighbor,导致颜色质量降低(见图一中间红色部分)
2、对于没有标注Matrix的视频,默认使用BT.601的Matrix进行YUV-->RGB,但如果视频实际为BT.709,会导致色差(见图一和图二三的色差)
3、10Bit的YUV,FFmpeg默认将其转换为RGB48BE,如果直接指定转为RGB24会出现色带(见图一和真领子)
避坑方法:
1、先进行一次YUV420-->YUV444的转换:format=yuv444p10le(之前我是先extractplanes再分别scale色度,后来发现这个偷懒办法)
2、使用Zscale滤镜进行Matrix的指定:zscale=min=709:m=709
3、先转换为RGB48BE,再转换为RGB24:format=rgb48be,format=rgb24
总的滤镜链的写法是:-vf zscale=min=709:m=709,format=yuv444p10le,format=rgb48be,format=rgb24
图一(默认)↓
图二(调教)↓
图三(madVR)↓
如果发现上面的图片不是PNG,请看以下地址:
图一:files.catbox.moe/zb5w3y.png
图二:files.catbox.moe/334g02.png
图三:files.catbox.moe/59fq4h.png
2020年04月04日 18点04分 1
吧务
level 14
Mr-Z♂ 楼主
至少在我这边,查看大图后的图片是扩展名为 .jpg 实际为 PNG 的图片,应该是没有问题
2020年04月04日 18点04分 2
好吧,图三可能是超过限制,被压了[阴险]
2020年04月04日 18点04分
level 7
我一般是用vs转化成RGB48的PNG,最后就在拿vs把RGB48给压成视频。
2020年04月04日 20点04分 3
level 8
感谢
平时比较瞎 碰上了可能也留意不到[黑线]
2020年04月10日 23点04分 4
level 1
想和楼主请教下:如果源视频有色彩文件的话这样转换确实没有问题,几乎无色差。但好像这种方案不太适用于无色彩信息的源视频,比如有的视频colorspace、color primarys和color tranfer信息为unknown,这样的话转为的png图片还是有色差,请问这种无色彩文件的问题该如何解决呢?感谢楼主!!!
2021年05月18日 11点05分 7
根据源的分辨率判断,一般sd是601,hd是709
2021年05月18日 12点05分
@Mr-Z♂ 视频是SD的,但我把601和709都试了一下,还是有挺明显的色差的,就很困惑。所以还想麻烦请教下对于这类视频还有什么其他的解决途径嘛~感谢楼主大大!
2021年05月19日 02点05分
吧务
level 14
Mr-Z♂ 楼主
对了,补充一下为什么要用这种拐弯抹角的方式……因为ffmpeg似乎对yuv2rgb的处理有问题:当进行rgb2yuv的时候,使用zscale后接format,就等于是为zscale指定输出格式,过程全部由zscale完成;但是当进行yuv2rgb的时候,在两者之间似乎被加入了一些神(黑)秘(暗)流(魔)程(法),导致结果不是很理想
2021年05月18日 12点05分 8
吧务
level 14
Mr-Z♂ 楼主
现在ffmpeg有vs输入了,还是用vs比较好啊(vs内置的imwri也可以输出图片序列,但是比ffmpeg慢……)[滑稽]
2021年05月18日 12点05分 9
哈哈哈,你最终还是回到最靠谱的vs上了。其实只要把流程流水线化,vs的imwri性能根本不是问题,甚至我一般配合trim多开一堆[滑稽]
2021年05月19日 03点05分
level 1
楼主我想问一下vs滤镜是什么啊
2022年03月26日 16点03分 10
level 5
我前几天刚把十几个bt709的视频转成png去用ifrnet补帧[喷]补完才看到这个帖子,早知道我就用webp或jpg了这就不用进行yuv到rgb的转换了
2022年12月12日 20点12分 11
@FTP-伦敦 用vapoursynth
2022年12月13日 05点12分
ffmpegver20221125,这么久还是没改
2022年12月12日 20点12分
现在谁还拆帧玩啊,那都是小白干的事[滑稽]
2022年12月12日 21点12分
webp和jpg的yuv用的应该都是bt601,一样有问题[滑稽]
2022年12月12日 21点12分
level 5
shanaencoder有个类似的问题,转码有colorrange和matrix信息的视频时不像ffmpeg和handbrake会和源保持致,而是直接清除这些信息,导致非常严重的亮度和颜色失真
2022年12月12日 20点12分 13
1