Ubuntu查看媒体信息全攻略:mediainfo与ffprobe工具链详解

发布时间:2026/9/18 3:51:18

Ubuntu查看媒体信息全攻略:mediainfo与ffprobe工具链详解 做视频处理或者管理本地媒体库的时候总会遇到几个特别烦人的瞬间明明视频能正常播放但就是不知道它到底压成了什么编码从剪辑软件里导出的片子换台设备就花屏却查不出是哪一项参数出了问题想批量整理电影库又不想一个一个打开播放器看属性。在Ubuntu下查看媒体信息其实有一套非常成熟的工作流核心就是mediainfo加ffprobe外围再配exiftool和file基本能覆盖我从日常查看到写脚本批量整理素材的所有场景。这篇文章就把这套工具链从安装、参数解读、批量脚本到避坑经验完整过一遍想少走弯路的可以直接照着操作。1. 媒体信息工具选型为什么我推荐这个组合1.1 媒体信息到底包含什么很多人以为“查看媒体信息”就是看看分辨率、时长、文件大小其实远不止这些。一次完整的媒体信息读取至少应该覆盖三层内容。第一层是封装格式信息也就是容器层面。一个MP4文件内部可能有视频流、音频流、字幕流、章节信息、甚至附加的字体文件这些东西是怎么打包排列的属于封装层的事。常见封装格式有MP4、MKV、AVI、MOV、TS、FLV不同封装对后期剪辑、流媒体播放的支持都不一样。第二层是编码信息也就是视频流和音频流本身的参数。视频要看编码标准H.264/H.265/VP9/AV1、码率、帧率、色彩空间、色深、HDR元数据音频要看编码AAC/AC3/FLAC/Opus、采样率、位深、声道布局。第三层是标签元数据包括标题、导演、专辑、语言、录制时间这些人类可读的信息。这三层信息在工具的输出里往往是混在一起的如果不熟悉字段含义很容易被一堆参数搞晕。我在实际使用中的经验是日常快速查看用mediainfo因为它输出清晰、字段全做转码或剪辑前的深度排查用ffprobe因为它和ffmpeg同源能直接告诉你解码器会怎么解析这个文件批量修改或提取元数据用exiftool而file命令就是随手确认下文件真实类型防止扩展名骗人。1.2 工具矩阵与适用场景对比选工具不能只看“功能多不多”还得看使用场景。我整理了一个简单的对照表基本反映了这几个工具在Ubuntu下的定位差异。工具安装命令擅长领域典型使用人群mediainfosudo apt install mediainfo封装格式、音视频流概览、语言字幕信息日常查看、媒体库管理ffprobesudo apt install ffmpeg流级别深度分析、帧数据、HDR参数、逐帧诊断压制、剪辑、嵌入式调试exiftoolsudo apt install libimage-exiftool-perl全类型元数据读写、批量标签处理摄影、归档、批量重命名fileUbuntu自带快速识别真实文件类型任何人随手使用这里有个容易踩的坑很多人装了ffmpeg但不知道ffprobe也在里面。ffmpeg和ffprobe是同一个软件包只要apt安装ffmpegffprobe就会一起装好不需要单独搜索。另外如果你用的是Ubuntu 22.04以上的版本mediainfo和ffprobe都可以直接从官方软件源安装不需要添加任何第三方源这对系统安全来说是更稳妥的。2. Mediainfo上手最快的媒体信息查看利器2.1 安装与命令行基础用法Mediainfo在Ubuntu下的安装非常简单终端里执行一行命令就行。sudo apt update sudo apt install mediainfo如果你还想用图形界面可以再装一个mediainfo-gui。sudo apt install mediainfo-gui装完之后最基础的使用方式就是直接把文件路径跟在后头。假设我在Videos目录下有个视频执行mediainfo Videos/example.mp4输出会分成几个区块General是封装信息Video是视频流信息Audio是音频流信息Text是字幕流信息。以一段常见的24分钟视频为例General部分长这样General Complete name : /home/user/Videos/example.mp4 Format : MPEG-4 Format profile : Base Media Codec ID : isom (isom/iso2/avc1/mp41) File size : 1.45 GiB Duration : 24 min 4 s Overall bit rate mode : Variable Overall bit rate : 8 611 kb/s这里最关键的就是Format、Codec ID、Duration、Overall bit rate。Format告诉你容器是MP4Codec ID告诉你详细的兼容性标识Overall bit rate是整个文件混合后的平均码率。接下来Video块会详细列出编码器、分辨率、帧率、色彩参数Video ID : 1 Format : AVC Format profile : HighL4 Format settings : CABAC / 4 Ref Frames Codec ID : avc1 Duration : 24 min 4 s Bit rate : 8 000 kb/s Width : 1 920 pixels Height : 1 080 pixels Display aspect ratio : 16:9 Frame rate mode : Constant Frame rate : 25.000 FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Encoding settings : cabac1 / ref4 / deblock1:0:0 / analyse0x3:0x113 / mehex / subme8 / psy1 / psy_rd1.00:0.00注意Format profile里的HighL4这代表H.264的档次是High级别是4.0。色深如果是10 bits说明这是HDR素材这类素材在调色、压制时的处理方式跟普通8bit视频完全不同。Audio块里会列出音轨编码、声道、采样率和语言字幕轨则显示在Text块中。当你需要快速确认一个视频是否包含多语种音轨、有没有内封字幕时mediainfo的输出比播放器属性窗口清晰得多。2.2 输出模板定制技巧Mediainfo真正强大的地方在于可以定制输出格式只看你想看的那几个字段。这个功能在做批量脚本时尤其好用。比如我只想看视频的分辨率和编码格式可以用Inform参数mediainfo --InformVideo;%Width%x%Height% %CodecID% example.mp4输出就是类似1920x1080 avc1 这样的一行短文本没有多余信息。这个语法是先指定要读的流类型再列出想显示的字段。如果要看多条信息字段之间用竖线或者逗号分隔mediainfo --InformVideo;%CodecID%|%Width%x%Height%|%FrameRate% example.mp4如果想把整个文件的媒体信息导出成JSON方便后续用Python或者jq处理可以这样mediainfo --OutputJSON example.mp4 example.jsonJSON输出里每个字段都带了明确的key比如video字段数组里的codecid、width、height解析起来非常方便。在批量处理媒体库时我经常用这招把几百个视频的信息一次性收集到一个JSON文件里然后用Python做分类汇总。2.3 图形界面与右键菜单技巧虽然在终端里用命令行最高效但偶尔也想用图形界面快速看两眼。装了mediainfo-gui之后打开图形界面的命令是mediainfo-gui或者在文件管理器里右键文件选择属性在“音频/视频”标签页里也能看到部分信息。不过说实话图形界面查看长视频信息时字段滚动起来并不比终端方便。我更推荐的用法是把右键菜单里加上“MediaInfo打开”这个选项但Ubuntu默认的Nautilus文件管理器不支持直接自定义右键动作我一般直接在终端里输命令或者用Nautilus的脚本扩展把mediainfo输出写到临时文件里再打开。另外一个实用技巧是结合open命令在终端里用mediainfo --OutputXML example.mkv | less用管道传给less翻页查看。很多新手拿到一长串输出就慌其实只要知道General、Video、Audio、Text这四个区块各自代表什么就完全能应对绝大部分查信息需求了。3. ffprobe深入流级别的专业分析工具3.1 安装与三种常用输出模式ffprobe是ffmpeg组件里被严重低估的一个成员。它的优势在于和ffmpeg共享同一套底层解码库所以它解析出来的结果基本就是ffmpeg真正转码时看到的结果不会出现“mediainfo说能解ffmpeg死活打不开”的矛盾。安装ffprobe很简单sudo apt install ffmpeg装好后先验证一下版本ffprobe -versionffprobe的输出模式大体有三种。第一种是默认的人类可读文本第二种是JSON第三种是扁平化的键值对。先看默认模式ffprobe example.mkv这能看到每个流的基本信息但默认输出格式其实不算好看。我更常用的是精细控制流级别的参数。如果想要某个流的所有信息用show_streamsffprobe -show_streams example.mkvshow_streams会把每个流的所有字段都打出来包括编码器名称、时间基、像素格式、参考帧数量等等信息量极大。如果只想看封装格式信息用show_formatffprobe -show_format example.mkv这里最关键的就是format_name、duration、bit_rate、tags这几个字段。实际开发中我几乎总是把show_streams和show_format合并并且输出JSONffprobe -v error -show_streams -show_format -of json example.mkv输出会是一个结构清晰的JSON对象外层是streams数组和format对象非常方便程序解析。这里的-v error是让ffprobe只输出错误信息不输出一堆warning干扰视线。3.2 帧数据、HDR等深度字段排查ffprobe最有价值的场景是排查那些普通工具无法解释的问题。举个例子之前我遇到过一段航拍视频在播放器里显示75%速度播放时明显丢帧mediainfo只显示“Frame rate mode: Variable”但也说不清到底哪里有问题。用ffprobe一查就明白了。ffprobe -v error -select_streams v:0 -show_entries streamavg_frame_rate,r_frame_rate -of defaultnoprint_wrappers1 example.mp4输出可能显示avg_frame_rate30000/1001r_frame_rate30/1这代表文件是可变帧率平均接近29.97fps但原始标称帧率是30fps。这种不一致在非编软件里就可能引发音频视频不同步。另一个重要场景是查HDR信息。现代视频的HDR元数据藏在色彩参数里普通查看器不一定暴露出来。用下面这条命令能直接看到ffprobe -v error -select_streams v:0 -show_entries streamcolor_transfer,color_primaries,color_range,color_space -of defaultnoprint_wrappers1 example.mkv如果输出里有bt2020nc、smpte2084、pq这些关键词基本可以确定是HDR Dolby Vision或者HDR10内容。这类素材在普通显示器上看会发灰不是文件损坏是色彩转换没做。知道这个参数后转码时就能针对性地加色调映射参数而不是盲目重压。3.3 与jq配合的批量信息提取批量处理媒体库时ffprobe输出JSON的好处就完全体现出来了。配合jq命令可以在不写Python脚本的情况下完成复杂的过滤任务。jq是Ubuntu下特别好用的命令行JSON解析器安装很简单sudo apt install jq假设我有个目录里面全是mkv文件想知道每个文件是H.264还是H.265编码分辨率是1080p还是4K可以写个循环for f in *.mkv; do echo $f ffprobe -v error -select_streams v:0 -show_entries streamcodec_name,width,height -of json $f | jq -r .streams[0] | \(.codec_name) \(.width)x\(.height) done这样每个文件会输出一行比如h264 1920x1080或者hevc 3840x2160整批文件一目了然。如果还要看音频语言和声道数就在show_streams里加音频流的查询或者用-show_entries同时查多个流类型。这个组合比一个一个双击打开文件看属性不知道快了多少。4. exiftool与file媒体信息查看的补充武器4.1 exiftool的基本用法exiftool在Ubuntu软件源里的包名叫libimage-exiftool-perl安装命令是sudo apt install libimage-exiftool-perl它的看家本领是处理元数据尤其是照片里的EXIF信息和视频文件里的各种标签。exiftool能读的文件类型极多从JPEG、TIFF到MP4、MOV甚至一些工业相机产生的RAW格式它都能解析出或强或弱的元数据。最基本的用法就是exiftool photo.jpg这会输出相机的品牌型号、镜头参数、曝光时间、ISO、GPS坐标、拍摄时间等一大堆信息。对于视频文件exiftool也能读出不少封装标签但它的强项更偏向批量处理元数据比如批量提取某次拍摄的所有照片参数。不过要注意exiftool对MP4、MOV里的QuickTime标签支持不错但对MKV的高级流信息解析能力就不如mediainfo了。4.2 file命令快速识别file命令是Ubuntu自带的它的作用不是读取媒体详细信息而是快速判断文件真实类型。这个命令最常用的场合是处理那些“扩展名可疑”的文件。比如你从网上下载了一个文件叫video.mp4但双击无法播放用file命令一看file video.mp4如果输出是“RIFF data, AVI, 640 x 360, 30.00 fps”那这个文件实际上是AVI格式只是扩展名被改成了mp4。这种情况在实际工作中非常多见尤其是从非正规渠道获取的素材或者从老旧存储设备拷贝出来的文件。file命令查出来的不一定准确到编码级别但它能在半秒内告诉你文件的真实容器类型这对批量文件分类非常有帮助。我在整理旧硬盘时会先把一整个目录的文件类型统计一遍file * | sort | uniq -c | sort -nr这是非常高效的粗筛手段能在文件系统层面先摸清素材的家底。4.3 实战批量重命名媒体文件把ffprobe和exiftool配合起来可以写出很实用的批量脚本。我举一个自己一直在用的例子把整个目录下的视频统一重命名为“片名.分辨率.编码.mkv”格式。说白了就是先获取每个文件的媒体信息再高低拼接成新文件名。for f in *.mkv; do # 提取分辨率比如 1920x1080 res$(ffprobe -v error -select_streams v:0 -show_entries streamwidth,height -of csvp0:sx $f) # 提取编码名比如 h264 / hevc codec$(ffprobe -v error -select_streams v:0 -show_entries streamcodec_name -of defaultnoprint_wrappers1:nokey1 $f) # 去掉原文件扩展名 base${f%.mkv} mv $f ${base}.${res}.${codec}.mkv done这段脚本有个小陷阱分辨率里的x符号在Linux文件名里是合法的直接用它做文件名没问题。如果文件名本身包含空格脚本里所有变量都要加双引号不然mv命令会被截断。我早期写脚本时没注意这点一晚上跑崩三次后来所有变量一律加引号再也不出这问题了。5. 常见问题与排查技巧实录5.1 编码信息对不上到底以哪个为准使用中经常碰到一种情况mediainfo显示编码是H.264但ffprobe却给出了hevc或者反过来。这通常不是工具出错而是它们读取的信息层级不同。mediainfo优先读容器里的Codec ID而ffprobe有时候会尝试初始化解码器读出实际码流里的编码标识。当封装信息与真实码流不一致时以ffprobe读出的实际码流为准因为解码器最终是按真实码流工作的。我一个习惯是遇到可疑文件先跑一遍ffmpeg -i它会同时打印输入文件的封装层和流层信息输出里如果有“Stream #0:0: Video: hevc”这样的字样后面跟着的才是解码器实际看到的编码。5.2 音轨字幕信息看不全有时候查看MKV文件mediainfo里没有Text块但播放器明明能显示字幕。这种一般是字幕藏在Attachments或者Chapters里或者字幕轨被标记为强制隐藏。可以用ffprobe把所有轨道名带ID列出来ffprobe -v error -show_entries streamindex,codec_type,codec_name,profile:stream_tagslanguage,title -of csvp0 example.mkv如果能看到字幕轨但没有语言标签默认会被播放器当成“未知语言”显示时容易出问题。解决方法是压制或重封装时补上语言标签比如mkvpropedit这类的封装工具可以直接改轨道语言。还有一个坑是某些播放器不支持UTF-8字幕编码导致字幕乱码这时候就要看字幕轨的编码信息或者干脆把字幕抽出来转成SRT再封装。5.3 批量处理时的两个坑批量操作里最容易踩两个坑。第一个是文件名编码问题Ubuntu下文件名默认是UTF-8但如果从Windows拷贝过来可能出现文件名乱码。用脚本批量统计时这类文件名往往会在for循环里产生空变量或者奇怪字符。解决方法是先统一转码文件名用convmv工具或者干脆手动把这几个文件挑出来处理。第二个坑是ffprobe在批量处理时偶尔会卡住尤其处理损坏或正在写入的文件。这些文件常常没有完整的moov atom索引也就是MP4分为moov写在开头和写在结尾两种情况如果moov在文件末尾且文件没有正常结尾ffprobe会报错甚至短暂无响应。处理这类异常文件时可以加上超时限制timeout 10 ffprobe -v error -show_format faulty.mp4如果命令在10秒内没执行完就直接跳过不至于让整个批量脚本卡死在单个文件上。平时如果要拷贝大量素材建议先跑一轮file命令看是否有明显的异常文件再进入详细的探测流程。实际体验中的一点小感想用久了这些工具之后我发现它们之间互补性特别强。mediainfo是日常第一眼印象ffprobe是出问题时深入解剖的手段exiftool适合处理标签批量整理file则是最不起眼但最高效的守门员。我自己现在养成了一个习惯每次拿到新素材不管是从相机里导出的还是从网络下载的都先跑一条ffprobe把基本参数记录下来存成一个文本清单。下次需要找特定编码、特定分辨率或特定帧率的视频时直接grep这个清单就能定位根本不用再去翻一个个文件。最后一个实用小技巧在终端里给mediainfo和ffprobe加个颜色高亮别名虽然内容不变但眼睛扫起来舒服很多。类似的把常用的ffprobe查询命令保存成一个小脚本放在/usr/local/bin下以后直接一个命令就能列出目录下所有视频的核心参数效率提升非常明显。这篇内容如果你有更好用的思路也欢迎在实际使用中慢慢摸索出自己的搭配。
延伸阅读

更多相关文章

2026/9/18 3:46:18

Python视觉识别项目实战:从猫狗识别到模型部署

1. 项目定位:Python视觉识别到底在做什么先聊点实在的。我在社区和群里经常看到有人问"Python学完之后能干什么",或者更直接一点,"人工智能大作业选什么方向好"。我的看法一直很明确:视觉识别是Python进阶路线…

2026/9/18 3:46:18

HAProxy负载均衡实战:从配置到故障转移的完整实验指南

说实话,我第一次看到“HAProxy实验”这个标题时,就想起当年自己搭第一个负载均衡集群时手忙脚乱的样子。那时候连四层和七层都分不清,配置写错了就在那一个劲地重启服务,日志又没开,排查了半天才发现是后端健康检查路径…

2026/9/18 4:51:20

110kV降压变电站毕业设计闭环实践:从主接线比选到设备校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 4:51:20

MiniMax暗盘涨24.61%将登陆港股,AI应用公司迎来成人礼

最近几天,很多朋友都在讨论一件事:MiniMax的暗盘收涨24.61%,而且按计划明天就正式在港股挂牌交易。说实话,作为一个长期跟踪AI应用和一级市场的老兵,看到这个数字我第一反应不是“哇涨了好多”,而是“AI应用…

2026/9/18 4:46:20

三跨线路云台实时视频录像监测装置选型部署与运维指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码