我有一个从Firewire天文相机传输的灰度视频流,我想使用FFmpeg压缩视频流,但MPEG1VIDEO编解码器不接受单字节像素格式。我该如何使用FFmpeg API将灰度视频帧转换为FFmpeg可接受的帧格式?
我有一个从Firewire天文相机传输的灰度视频流,我想使用FFmpeg压缩视频流,但MPEG1VIDEO编解码器不接受单字节像素格式。我该如何使用FFmpeg API将灰度视频帧转换为FFmpeg可接受的帧格式?
MPEG-1 只支持 YUV 格式,因此您需要将帧转换为 YUV 格式。使用 SwsContext
结构体,并使用 sws_getContext()
函数创建它,然后使用 sws_scale()
函数进行缩放。
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128你实际上可以使用Y[i] = W[i],这几乎是相同的。128的值在0-256有符号转无符号的缩放/移位基础上代表'0'。
现在: 对于灰度图像(W):
R = W; G = W; B = W;
保持这样:
Y[i] = 0.895 * W[i] + 16. U[i] = 128(固定值) V[i] = 128(固定值)
如果你简单地使用“色调”过滤器,它就会起作用;像这样:
ffmpeg -i inputfile.ogv -vf hue=s=0 outputfile-unsat.ogv
如果您遇到了FFmpeg的问题,那么您需要先下载最新版本,这将修复一些错误:
https://ffmpeg.org/download.html#build-windows