用FFmpeg读取视频或音频信息
📊 素材信息读取的创作意义

在开始剪辑前读取素材信息,是专业视频创作流程的第一步:

  • 了解分辨率:查看素材分辨率决定输出规格。混用 1080p 和 4K 素材时需统一输出分辨率,避免画质不一致。
  • 查看编码格式:不同编码(H.264、H.265、AV1)影响兼容性和编辑性能。原始素材为高效编码可减少转码环节。
  • 分析码率:码率过低意味着画质上限有限,过高则文件臃肿。评估码率可判断素材是否适合当前项目。
  • 检查时长:了解总时长便于规划剪辑节奏、估算成品长度,避免超时或内容不足。
  • 识别流信息:确认视频是否包含音频轨道、字幕轨道、多角度视频等,确保创作时不会遗漏关键素材。
FFmpeg媒体信息读取概述

FFmpeg 提供了两套工具用于读取媒体文件信息:ffmpegffprobe,各有适用场景。

ffmpeg -i:快速查看基本信息

使用 ffmpeg -i 输入文件 可以快速获取文件的基本信息,包括:

  • 容器格式(Container):如 MP4、MKV、AVI、FLV 等,标识文件的封装方式。
  • 编码器(Codec):视频编码如 H.264、H.265/HEVC、VP9,音频编码如 AAC、MP3、Opus。
  • 分辨率(Resolution):视频的宽×高,如 1920×1080。
  • 码率(Bitrate):视频或音频的数据传输速率,单位 kb/s,影响画质/音质和文件大小。
  • 帧率(Frame Rate):视频每秒显示的帧数,如 30 fps、60 fps。
  • 时长(Duration):文件的总播放时长,格式为 hh:mm:ss.ms。

示例输出片段:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Duration: 00:02:35.12, start: 0.000000, bitrate: 1256 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1024 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
-hide_banner:隐藏版本信息

默认情况下 ffmpeg 会在输出前打印版本号、编译选项、库信息等冗长的 banner 内容。-hide_banner 参数可以隐藏这些信息,只保留文件本身的分析结果,使输出更加简洁清晰:

$ ffmpeg -hide_banner -i video.mp4

这在脚本处理或频繁查看文件信息时尤其有用,避免无关信息干扰。

ffprobe:输出结构化详细信息

ffprobe 是 FFmpeg 套件中专用于媒体分析的命令行工具,支持多种输出格式:

  • JSON 格式-print_format json,方便程序解析。
  • XML 格式-print_format xml
  • CSV 格式-print_format csv
  • 纯文本格式-print_format default
-show_streams:查看每个流的信息

每个媒体文件通常包含多个流(视频流、音频流、字幕流等)。-show_streams 选项可以逐一展示每个流的详细参数,包括编码器名称、编码器配置、像素格式、采样率、声道数、语言等。

-show_format:查看容器信息

-show_format 选项输出容器级别的元数据,如文件格式名称、大小、总时长、全局码率、元数据标签(标题、作者、日期等)。

综合使用示例

以下命令同时查看容器信息和所有流的信息,并以 JSON 格式输出:

$ ffprobe -v quiet -print_format json -show_format -show_streams video.mp4

输出 JSON 结构包含两个顶级字段:

  • streams:数组,每个元素描述一个流的详细信息。
  • format:对象,描述容器格式的元数据。

-v quiet 参数用于抑制 log 级别的输出,只保留最终结果,使 JSON 输出纯净可解析。

广告
{{v.name}}
使用 -i 选项来查看输入文件的基本信息,代码如下
$ ffmpeg -i your_video_file.mp4
使用 -hide_banner 参数可以隐藏 FFmpeg 的版本和编译信息 banner,让输出更聚焦于文件信息本身,代码如下
$ ffmpeg -hide_banner -i your_video_file.mp4
输出为 JSON 格式,代码如下
$ ffprobe -v quiet -print_format json -show_format -show_streams your_video_file.mp4
友链