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
验证与判定标准
运行上述命令后,检查以下条件是否满足,全部满足则本案例通过:
ffprobe输出中codec_name=h264且width=1280、height=720;ffprobe输出中avg_frame_rate=25/1,即帧率为 25fps;ffmpeg -i输出中视频流行包含h264、1280x720、25 fps;- 两种命令显示的封装格式均为
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可只显示第一条视频流。