将14位TIF图像转换为H264编码帧



背景

我正在尝试将tiff图像转换为h.264编码的帧。我正在使用FFMPEG来做这件事。对于PNG,我可以使用以下命令进行转换

./ffmpeg -loglevel error -hide_banner -i /path/to/input.png -c:v libx264 -pix_fmt yuv420p10le /path/to/outputFrame.h264

这很好用,给了我一个合适的框架。PNG是16位灰度。

我尝试了以下14位灰度tif作为输入

./ffmpeg -loglevel error -hide_banner -i /path/to/input.tiff -c:v libx264 -pix_fmt yuv420p10le /path/to/outputFrame.h264

并得到一个错误:This format is not supported (bpp=14, bppcount=1)

我在其他地方读到

FFmpeg支持高达16 bpc的RGB TIFF或8位YUV TIFF或16位灰度级的。。

所以使用imagemagik标识函数来验证我的tif它表示这确实是一个14位灰度灰度的图像。

所以我尝试了一个10位的版本,这给了我同样的错误,只是现在是bpp=10,而不是bpp=14。

然后我觉得像素fmt坏了,所以我尝试了10位图像的灰度10le,但没有成功。同样的错误。

无论如何,我想拥有完整的图像深度,所以我更喜欢16或14位的解决方案。

我的问题

如何使用ffmpeg或Imagemagik将14位TIF转换为h264编码的帧,以保持h264允许的最高位深度?我也不希望转换为中间格式。我在CentOS Linux 上运行

更新

当我用TIF将深度降低到8,并将其发送到上面的ffmpeg命令中时,它确实通过了,但当我在VLC中打开帧时,它不会像我用16位灰度PNG做同样的事情时那样出现。。。

更新2根据一条评论,我尝试将tif强制为16位灰度,这与我在以PNG为中心的ffmpeg命令中使用的原始像素格式一致。

我仍然很难在VLC中显示帧,但这可能是由于图像的大小。它相当大。我将尝试平铺它以确保数据完好无损。如果它没有完好无损,这个问题仍然存在。如果它完好无损;回答我自己的问题";

正如Kesh在评论中提到的:

FFmpeg没有任何非多重8灰度pix_fmt似乎是你问题的根源。你能不能"上采样";tiff数据使用imagemagik(作为另一个tiff文件或PNG文件集(?然后,您应该能够将这些图像馈送到FFmpeg创建h264流。

他是对的,我确保我的TIFF是16位灰度级,而不是14位,它进入FFMPEG没有问题。

然后我平铺我的数据进行检查,并确保转换到h264按计划进行。它看起来不错。

TL;DR回答

确保进入FFMPEG的灰度TIF是8或16位(8的倍数(深度,如果你想让它们正确地编码到h.264。

最新更新