FFmpeg无法写入单通道float32格式EXR图像?求解决方法
解决FFmpeg写入单通道float32 EXR图像的格式兼容问题
问题出在FFmpeg处理单通道输入时,默认会自动将其转换为3通道RGB格式(gbrpf32le),即便你指定了输出像素格式为grayf32le,编码器的格式匹配逻辑也会跳过单通道选项。结合FFmpeg EXR编码器的实现(exrenc.c),确实支持单通道float32格式,只需调整命令参数即可解决:
解决方案1:用滤镜强制输出单通道格式
在写入命令中添加-vf format=grayf32le,强制将输入转换为单通道格式,确保编码器接收正确的像素结构:
ffmpeg_command_write = [ 'ffmpeg', '-hide_banner', '-f', 'rawvideo', '-pix_fmt', 'grayf32le', '-s', '2x2', '-i', 'temp1.raw', '-vf', 'format=grayf32le', # 强制锁定单通道格式 '-compression', 'zip1', '-format', 'float', '-vcodec', 'exr', '-y', 'output.exr', ]
解决方案2:指定输入为灰度色彩空间
在输入选项中添加-colorspace gray,明确告知FFmpeg输入是灰度图像,避免自动扩展为RGB通道:
ffmpeg_command_write = [ 'ffmpeg', '-hide_banner', '-f', 'rawvideo', '-pix_fmt', 'grayf32le', '-colorspace', 'gray', # 声明输入为灰度空间 '-s', '2x2', '-i', 'temp1.raw', '-pix_fmt', 'grayf32le', '-compression', 'zip1', '-format', 'float', '-vcodec', 'exr', '-y', 'output.exr', ]
修改后执行代码,FFmpeg不会再弹出格式兼容提示,读取回来的array2会与原始array1完全一致。
内容的提问来源于stack exchange,提问作者Hugues
相关产品推荐
相关产品推荐

