如何提前估算从影片中提取帧生成的图片总大小?
如何提前估算从影片中提取帧生成的图片总大小?
嗨,这个问题问得超实用!毕竟要提取两小时影片的帧,要是没提前算好大小,很容易把硬盘给塞满😂。我给你分享几个靠谱的估算方法:
提取样本帧计算(最准确)
你可以先拿一小段视频提取帧,算出单帧的平均大小,再推导整体的总大小,这是最接近真实值的方法。
步骤大概是这样:- 先确认视频的帧率(可以用
ffmpeg -i <input>查看输出里的r_frame_rate参数,比如25fps) - 用ffmpeg提取一小段帧,比如10秒的内容:
ffmpeg -ss 00:00:00 -i <input> -t 00:00:10 sample%05d.png - 统计这些样本图片的总大小(Windows直接看资源管理器的选中文件大小,Linux用
du -c sample*.png | grep total) - 计算单帧平均大小:总样本大小 ÷ 样本帧数(比如10秒25fps就是250帧)
- 最后算总大小:单帧平均大小 × 总帧数(总时长秒数 × 帧率,比如2小时就是7200×25=180000帧)
- 先确认视频的帧率(可以用
根据视频参数粗略估算
要是不想提取样本,也可以根据分辨率和图片格式来大致推算:- 比如你用PNG无损格式,1080p(1920×1080)的单帧原始未压缩大小是1920×1080×3≈5.93MB,PNG压缩后大概是这个值的10%-50%(画面越简单,比如纯色、静态场景,压缩率越高;复杂的动态风景压缩率就低)
- 总帧数=总时长(秒)×帧率,比如2小时7200秒×25fps=180000帧,按单帧平均2MB算,总大小就是360GB
- 如果换成JPEG格式(可以用
-q:v调整质量),压缩率会高很多,单帧大小大概是PNG的1/5到1/10,估算时按这个比例调整就行
用ffprobe辅助计算
ffmpeg本身没有直接的估算命令,但可以用ffprobe先拿到视频的关键参数,再自己计算:
运行下面的命令获取帧率和分辨率:ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,width,height -of csv=p=0 <input>得到类似
25/1,1920,1080的结果,之后就可以结合上面的方法估算总大小啦。
备注:内容来源于stack exchange,提问作者Max Wayfield
相关产品推荐
相关产品推荐

