在 ffmpeg package 中有一个 ffprobe 工具,主要用来查看多媒体文件或者流媒体信息,在线的视频信息也能够快速获取。大部分情况下个人比较喜欢使用 ffmpeg -i input.mp4
来快速查看,这种时候在终端上比较快速,而如果有些时候想要分析一下媒体文件,需要编程获取得到的媒体文件结果,显然 ffmpeg 的输出结果简直无法忍受,而 ffprobe 提供非常清晰的输出格式,非常方便的可以提供给编程软件解析使用。
官网说明:http://ffmpeg.org/ffprobe.html
命令格式
ffprobe [OPTION] file
常用的参数
-show_format 显示输入多媒体流的容器格式信息
-show_streams 显示输入多媒体流中每一个流的信息
-i input_file 指定输入文件
-print_format json json 形式输出
-of 或者 -print_format default/compact/csv/flat/ini/json/xml
命令行:
./ffprobe -print_format json -show_format -show_streams -i ./video/c.ts
其中:
-print_format json 以 json 格式输出 ,
-show_format 输出封装格式信息 ,
-show_streams 输出流信息,
-i ./video/c.ts 输入文件
使用实例
基本用法
ffprobe -v error -show_format -show_streams input.mp4
输出该视频的基本信息,如果上面的命令输出结果过多,而只想要比如 size 可以
ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1 input.mp4
如果只想要结果可以
ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 input.mp4
上面的命令中:
-v
参数是日志输出级别error
则略去了 build 和 generic 信息,暴露 error 错误-print_format
则是输出结果格式
获取视频时长
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
直接输出视频时长。
下面是一段 shell 脚本,之前遇到过有一批视频地址,想要获取这批视频的市场,用 ffprobe 就能够完成。
while IFS='' read -r line || [[ -n "$line" ]]; do
lineArray=($line)
echo ${lineArray[0]}
duration=$(ffprobe -i ${lineArray[1]} -show_entries format=duration -v quiet -of csv="p=0")
echo $duration
echo "${lineArray[0]} ${duration}" >> duration.txt
done < "$1"
以 json 格式输出
ffprobe -show_streams -show_entries format=bit_rate,filename,start_time:stream=duration,width,height,display_aspect_ratio,r_frame_rate,bit_rate -of json -v quiet -i 98a74a06741a091b8a42aaa31b4edc66.mp4
输出:
{
"programs": [
],
"streams": [
{
"width": 720,
"height": 1280,
"display_aspect_ratio": "0:1",
"r_frame_rate": "30/1",
"duration": "40.833333",
"bit_rate": "1710937",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0
},
"tags": {
"language": "und",
"handler_name": "VideoHandler"
}
},
{
"r_frame_rate": "0/0",
"duration": "40.890431",
"bit_rate": "128102",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0
},
"tags": {
"language": "und",
"handler_name": "SoundHandler"
}
}
],
"format": {
"filename": "98a74a06741a091b8a42aaa31b4edc66.mp4",
"start_time": "-0.046440",
"bit_rate": "1065995"
}
}
外延
mediainfo 也是一个用来获取音频视频信息的工具,比如封装格式、音视频编码格式、码率等信息。
mediainfo 可以获取的信息包括
- General: title, author, director, album, track number, date, duration…
- Video: codec, aspect, fps, bitrate…
- Audio: codec, sample rate, channels, language, bitrate…
- Text: language of subtitle
- Chapters: number of chapters, list of chapters
mediainfo 支持的格式
- Video: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, MPEG-4, DVD (VOB)…
- Video Codecs: DivX, XviD, MSMPEG4, ASP, H.264, AVC…
- Audio: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF…
- Subtitles: SRT, SSA, ASS, SAMI…
mediainfo 输出的字段不容易被解析,表述方法不统一。例如,对于 h264 这种编码格式,mediainfo 可能输出的表述为 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10;还比如,对于 mp3 这样的音频格式,居然会分两个字段进行描述,分别说明 mpeg 和 layer3.