我在使用 ffmpeg 将嵌入在 SER 容器中的原始视频流转换为单个图像时遇到了麻烦:
ffmpeg -i my.ser frames_%03d.fits
流中的数据被编码为 bayerrggb16be 像素格式,但无论出于什么原因,当我将单帧导出为 tiff 或 fits 时,ffmpeg 似乎无法正确解释 16 位大端字节序,并且生成的图片只是垃圾数据:
我的解决方法是强制使用灰度解释像素格式():
ffmpeg -f rawvideo -pix_fmt gray16be my.ser -pix_fmt + frames_%03d.tif
或者
ffmpeg -r 1 -f rawvideo -pix_fmt gray16be my.ser -f 片段 -segment_time 1 帧_%03d.fits
(注意:导出到 fits 需要将输入流分割成单独的帧,否则所有帧都将存储为单个 fits 序列文件)
当我导出适合的帧时,这种方法非常有效,但当我选择 tiff 作为输出格式时,底层原始值似乎发生了显著变化。似乎 tiff 发生了一些颜色空间转换,而适合容器则没有发生。即使在 tiff 输出文件名前加上 -pix_fmt + 似乎也会应用某种转换,尽管告诉 ffmpeg 使用相同的像素格式。
有没有办法完全禁用颜色空间转换?这些 CFA 图像中的颜色可以通过一些曲线转换恢复,但由于图像包含科学图像数据,因此手动进行此转换是不切实际的。