gpt4 book ai didi

ffmpeg - 为什么 ffmpeg 为同一文件返回与 ffprobe 不同的帧数?

转载 作者:行者123 更新时间:2023-12-04 22:50:31 61 4
gpt4 key购买 nike

我正在尝试计算视频中的帧数,但 ffmpeg 和 ffprobe 给了我两个不同的答案。

$ time ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 myvideo.mp4
2858

real 0m2.987s
user 0m2.740s
sys 0m0.172s

当我用 ffmpeg 检查同一个文件时,我又得到了 2 个帧......
$ time ffmpeg -y -i myvideo.mp4 -vcodec copy -acodec copy -f null /dev/null 2>&1 | grep 'frame=' | awk '{print $2}'
2860

real 0m0.127s
user 0m0.080s
sys 0m0.032s

我使用 ffprobe 输出所有帧并计算结果输出中“[FRAME]”的数量......
ffprobe -i myvideo.mp4 -show_frames -v error | grep -o '\[FRAME\]' | wc -l
2858

如您所见,它显示了 ffprobe 认为的数字。

显然,我更喜欢在这里使用 ffmpeg,因为它比 ffprobe 快得多,而且我正在处理数千个需要解析和索引的视频。但是,多个视频的失败并不一致;有时是1个,有时是2个或更多...

不幸的是,过去两年我一直在使用 ffmpeg 方法计算帧数,所以我现在有一个重要的视频库要重新处理......他大吃一惊......我想这是验证文件可读性的好方法集群......即便如此,重新计算所有现有视频帧大小可能需要几周时间。

最佳答案

是的,Mulvya 是正确的。通过使用 FFprobe 查询 nb_frames,我能够获得一致的数字。默认情况下 ffprobe 使用 -count_frames ,它从文件顶部开始并一直计数到文件底部的帧数。当然,这是一个相当缓慢的操作,尤其是在视频文件很大的情况下(我的往往如此)。

time ./ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 big.mp4
real 1m4.531s
user 0m7.172s
sys 0m0.104s

FFmpeg 写入 stsz 框,当(在我的情况下)它从另一种格式转换时,它认为文件中的帧数。所以,我选择使用stsz中的值,因为虽然不正确,但是一致,查询起来也很快
time ffprobe -v quiet -pretty  -select_streams v:0 -show_entries "stream=nb_frames" big.mp4
real 0m0.023s
user 0m0.040s
sys 0m0.008s

谢谢马尔维娅!

关于ffmpeg - 为什么 ffmpeg 为同一文件返回与 ffprobe 不同的帧数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997930/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com