使用ffprobe或ffmpeg查找分辨率和fps

时间:2018-07-17 14:41:48

标签: batch-file

我的文件夹中有一堆mkv文件,想找到所有文件的分辨率和fps并将其写入文本文件。

我在下面找到了用于查找分辨率和fps的每个命令,但是如何结合使用它们并遍历目录并将结果写入文本文件?

ffprobe -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 filename.mkv



ffprobe -v 0 -of csv=p=0 -select_streams 0 -show_entries stream=r_frame_rate filename.mkv

2 个答案:

答案 0 :(得分:1)

要循环浏览目录中的文件,请使用For循环,在命令提示符处输入For /?以获取其用法信息

在下面的示例中,因为我仅在一次调用ffprobe中就要求了所有信息,并使用x作为分隔符,所以s=x)< / em>,我已通过For /F循环运行输出,以更好地分离所需的两条信息:

@Echo Off
If Exist "C:\MyFolder\*.mkv" ((For %%A In (
    "C:\MyFolder\*.mkv") Do For /F "Tokens=1-2* Delims=x" %%B In ('
    "ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,height,width -of csv=s=x:p=0 "%%A""
') Do Echo "%%~nxA", %%Bx%%C, %%D))>"stream_entries.log"
Pause
Exit /B

更改C:\MyFolder\(行23)的两个实例,以及输出文件的名称(stream_entries.log),它们将是根据需要保存到当前目录。

答案 1 :(得分:0)

非常感谢!我已经对该脚本进行了一些修改,但是仍然可以正常使用。有没有办法输出分辨率,例如。 2k或4k,fps为30或60,而不是3840x2160和30000/1001?

@Echo Off
If Exist "*.mkv" ((For %%A In (
    "*.mkv") Do For /F "Tokens=1-2* Delims=x" %%B In ('
    "ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,height,width -of csv=s=x:p=0 "%%A""
') Do Echo %%Bx%%C, %%D,    %%~nxA))> "%~n0.log"
Exit /B