1. 使用FFmpeg查看多媒体文件信息

任务目标

使用 ffprobe 和 ffmpeg -i 命令查看一个视频文件的封装格式、视频流编码格式、分辨率、码率、帧率以及音频流编码格式等关键元数据,并理解两种命令输出格式的差异。

环境准备

安装 FFmpeg(包含 ffprobe 工具):

# Ubuntu/Debian
sudo apt install ffmpeg

# macOS (Homebrew)
brew install ffmpeg

# Windows (Chocolatey)
choco install ffmpeg

验证安装:

ffmpeg -version | head -n 1
ffprobe -version | head -n 1

准备测试文件

使用 FFmpeg 生成一个包含 H.264 视频流和 AAC 音频流的测试文件(10秒,1280x720,25fps):

ffmpeg -f lavfi -i testsrc=size=1280x720:rate=25:duration=10 \
       -f lavfi -i sine=frequency=440:duration=10 \
       -c:v libx264 -c:a aac -shortest test_video.mp4

方法一:使用 ffprobe 查看详细信息

ffprobe 是专门用于分析多媒体文件的工具,输出结构化、可解析的元数据。执行以下命令:

ffprobe -v error -show_format -show_streams test_video.mp4

关键输出字段说明:

  • format 段:format_name=mov,mp4,m4a,3gp,3g2,mj2(封装格式)、duration(总时长)、bit_rate(总码率)
  • stream 0(视频流):codec_name=h264、width=1280、height=720、avg_frame_rate=25/1、bit_rate(视频码率)
  • stream 1(音频流):codec_name=aac、sample_rate=44100、channels=2

若需要更紧凑的摘要格式,可使用:

ffprobe -v error -show_entries format=format_name,duration,bit_rate:stream=codec_name,width,height,avg_frame_rate,bit_rate -of default=noprint_wrappers=1 test_video.mp4

方法二:使用 ffmpeg -i 查看概要信息

ffmpeg -i 在未指定输出文件时,会将文件信息打印到标准错误输出:

ffmpeg -i test_video.mp4 2>&1

输出末尾的 Stream mapping 之前的部分即为文件信息,例如:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_video.mp4':
  Duration: 00:00:10.00, start: 0.000000, bitrate: 1042 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 25 fps, 25 tbr, 12800 tbn
  Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s

验证与判定标准

运行上述命令后,检查以下条件是否满足,全部满足则本案例通过:

  1. ffprobe 输出中 codec_name=h264 且 width=1280、height=720;
  2. ffprobe 输出中 avg_frame_rate=25/1,即帧率为 25fps;
  3. ffmpeg -i 输出中视频流行包含 h264、1280x720、25 fps;
  4. 两种命令显示的封装格式均为 mov,mp4,m4a,3gp,3g2,mj2(即 MP4),音频流均为 aac。

常见问题

  • ffmpeg -i 输出到哪里? 信息打印在 stderr,因此需要 2>&1 重定向才能用管道捕获。
  • 码率显示为 N/A? 某些容器或流不存储码率信息,此时可改用 -show_entries stream=bit_rate 查看,若仍为 N/A 则说明该文件未记录此字段。
  • 如何只查看视频流? 在 ffprobe 命令中加 -select_streams v:0 可只显示第一条视频流。