我的文件夹中有一堆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
答案 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\
(行2
和3
)的两个实例,以及输出文件的名称(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