有谁知道如何使用ffmpeg从视频文件中提取总帧数? ffmpeg的渲染输出显示当前帧,我需要帧计数以百分比计算进度。
最佳答案
注意:MP4 / M4V / M4A / MOV中存在编辑列表会影响您的帧号。请参阅下面的编辑列表。
ffprobe:查询容器
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mp4
N/A
输出的帧数。请参阅下面列出的其他方法。 ffprobe:计算帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mkv
-skip_frame nokey
选项以仅计算关键帧。 ffmpeg:计算帧数
如果您没有
ffprobe
,则可以改用ffmpeg
:ffmpeg -i input.mkv -map 0:v:0 -c copy -f null -
frame=
。 -discard nokey
输入选项(在-i
之前)以仅计算关键帧。 编辑 list
使用
-ignore_editlist 1
输入选项忽略MP4 / M4V / M4A / MOV编辑列表。默认值为,而不是忽略编辑列表。ffprobe选项是什么意思
-v error
这将隐藏“信息”输出(版本信息等),这使解析更加容易。 -count_frames
计算每个流的帧数,并在相应的流部分中报告。 -select_streams v:0
仅选择视频流。 -show_entries stream=nb_frames
或-show_entries stream=nb_read_frames
仅显示nb_frames
或nb_read_frames
的条目。 -of default=nokey=1:noprint_wrappers=1
将输出格式(也称为“writer”)设置为default
,不打印每个字段的键(nokey=1
),也不打印节的页眉和页脚(noprint_wrappers=1
)。有更短的选择,例如-of csv=p=0
。 另见
媒体信息
众所周知的
mediainfo
工具可以输出帧数:mediainfo --Output="Video;%FrameCount%" input.avi
MP4盒
对于MP4 / M4V / M4A文件。
来自gpac的
MP4Box
可以显示帧数:MP4Box -info input.mp4
请引用输出中有关视频流的
Media Info
行:Media Info: Language "Undetermined (und)" - Type "vide:avc1" - 2525 samples
在此示例中,视频流具有2525帧。
翻斗车
对于MP4 / M4V / M4A / MOV文件。
boxdumper
是l-smash中的简单工具。它将输出大量信息。在stsz
样本大小框部分下,请参阅sample_count
以获取帧数。在此示例中,输入具有1900个视频帧:boxdumper input.mp4
...
[stsz: Sample Size Box]
position = 342641
size = 7620
version = 0
flags = 0x000000
sample_size = 0 (variable)
sample_count = 1900
stsz
原子。