如何用ffprobe获取MediaInfo中的Bit depth(视频位深度)信息?
可靠获取视频位深度的ffprobe方案
方法1:基于pix_fmt的预定义映射表
ffmpeg的像素格式命名有明确规律,你可以通过官方像素格式列表构建映射表,覆盖绝大多数场景:
- 8bit格式:如
yuv420p、yuv422p、rgb24等,无数字后缀 - 10bit格式:如
yuv420p10le、yuv422p10le、p010le等,带10le/10be后缀 - 12bit格式:如
yuv420p12le、yuv422p12le等,带12le/12be后缀 - 16bit格式:如
yuv420p16le、rgb48le等,带16le/16be后缀
你可以用以下命令导出完整的像素格式-位深度对应表,直接整理成程序可用的映射字典:
ffmpeg -pix_fmts | awk '{if(NR>1) print $1, $3}'
之后用ffprobe获取pix_fmt字段,再通过映射表直接对位深度即可。
方法2:结合bits_per_raw_sample与编码参数兜底
先尝试直接读取bits_per_raw_sample字段:
ffprobe -i input.mp4 -v error -select_streams v:0 -show_entries stream=bits_per_raw_sample -of default=noprint_wrappers=1:nokey=1
如果返回N/A,再通过编码参数辅助判断x264/x265视频的位深度:
ffprobe -i input.mp4 -v error -select_streams v:0 -show_entries stream_tags=encoder -of default=noprint_wrappers=1:nokey=1
若编码器信息包含10bit字样(如x264的core xxx H.264/MPEG-4 AVC codec ... 10bit、x265的x265 HEVC encoder ... 10bit),即可直接判定为10bit视频,剩余情况用方法1的映射表处理。
方法3:调用MediaInfo命令行工具(兜底方案)
既然MediaInfo能正常识别,可直接用其命令行工具提取位深度:
mediainfo --Inform="Video;%BitDepth%" input.mp4
该方法可作为ffprobe方案失效时的补充。
内容的提问来源于stack exchange,提问作者Sam Kook
相关产品推荐
相关产品推荐

