如何解决如何在几秒钟内可靠地找到视频的帧数?
我需要一种快速可靠的方法来获取视频的总帧数。
以下是我尝试过的以下方法及其缺陷:
-
ffprobe(快速方式)
ffprobe -select_streams v:0 -show_entries stream=nb_frames -of default=noprint_wrappers=1 input.mp4
问题:经常返回 N/A,不可靠。
-
ffprobe(慢速)
ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mp4
问题:速度很慢,较长的视频可能需要一分钟。
-
ffmpeg(快速方式)
ffmpeg -i input.mp4 -map 0:v:0 -c copy -f null -
问题:需要一次性完全解码视频,速度较慢
我知道我正在寻找的东西是可能的,因为某些软件(如 Topaz Video Enhance)可以做到。但我不知道如何在我的 C# 项目或 ffmpeg 中实现这一点。
解决方法
命令
ffmpeg -i input.mp4 -map 0:v:0 -c copy -f null -
不解码帧,因此是最快的通用方式。
对于 MP4/MOV 系列文件,还有另一种可能更快的方法。
ffmpeg -i in.mp4 -v trace 2>&1 -hide_banner | grep -A 10 codec_type=0 | grep -oP "(?<=sample_count=)\d+"
FFmpeg 在输入时解析元数据。分路器通常会将一些消息与从标题中读取的一些关键参数一起发布到日志中。 MOV/MP4 解复用器在跟踪日志级别执行此操作,它包括所有轨道的“样本计数”。上述命令将其提取为视频轨道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。