[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 请问 BAT 如何获取mp4文件的帧数和帧率并赋值给变量?

如果 ffmpeg.exe 所在目录为 D:\ffmpeg,ffprobe.exe 也在相同目录下(如果有需要用到的话)
视频为 D:\Video\1.mp4,为短视频,一般在30s以内

我想用 bat 获取 1.mp4 文件的帧数(如654),并赋值给变量 a
获取放大千倍后的帧率并赋值给变量 b,如帧率为 23.976则赋值给 b=23976,如果帧率是 30 的话那 b=30000
请问如何实现?

回复 2# Batcher


    谢谢,帧率有了,但帧数没有,不过有个时长,理论上可以用 帧数=时长x帧率 算出,可是时长的精度不够,没精确到毫秒,算出来的帧数不大对,最好是能直接获取帧数

TOP

回复 4# Batcher

一、帧率
用 ffmpeg 出来的帧率也不准确,比如 fps=23.976,它只保留了小数点后2位

二、帧数
1、第一条命令可以输出帧数,但怎么赋值给变量 a 呢?
2、第2条命令,我去下了 https://mediaarea.net/en/MediaInfo,可是没执行成功。
3、第3条命令,我执行了之后输出了一整行信息,同样不知道如何赋值给 a
4、第4条命令,可以,也看到时赋值给变量 FrameCount 了,可是帧率呢?就像我上面第一点说的,不精确,咋办?

结论:是不是用 ffmpeg 出来的都不精确(帧率),用别的比如 ffmpeg 是不是会好一点,但不知道 ffprobe 得到的结果怎么赋值给变量 a、b,因为我还要这2个参与后续的批处理。得到的变量b(帧率)最好是放大千倍后的,比如 23976 这样子。

TOP

回复 6# Batcher


    谢谢,用这个可以将帧数赋值出来给变量。那帧率呢?

我参考了再网上找的一段代码:
  1. ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate file.mp4
复制代码
直接运行可得到帧率: 24000/1001

但是不知道怎么赋值出来,我参考上面你写的,然后我套进去,结果出错
  1. @echo off
  2. for /f %%i in ('ffprobe -v error -select_streams v:0 -count_packets -show_entries stream^=nb_read_packets -of csv^=p^=0 1.mp4') do (
  3.     set "FrameCount=%%i"
  4. )
  5. echo %FrameCount%
  6. for /f %%j in ('ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate 1.mp4') do (
  7.     set "b=%%j"
  8. )
  9. echo %b%
  10. pause
复制代码
不知道哪里出问题

TOP

算了,不获取帧率,我试了一下,对于一些非常规的帧率,获取得不是很正确
还是获取时长吧,要准确一点的 , ffmpeg 还是不够精确,ffprobe 就可以,下面是代码
  1. ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
复制代码
可是怎么赋值给变量 c 呢?

TOP

返回列表