Java 使用FFProbe获取视频fps

Java 使用FFProbe获取视频fps,java,ffmpeg,ffprobe,Java,Ffmpeg,Ffprobe,我是ffprobe的新手,我的目标是获取视频fps并将其存储到java程序中。我的代码存储xml文件,但我希望直接像int fps=30那样存储 ffprobe -v quiet -print_format xml -show_format -show_streams "/video/small/small.avi" > "/video/small/test.xml" 这是我的代码。我在另一种方法中找到了计算fps,即 String query = "ffmpeg -i foo.avi

我是ffprobe的新手,我的目标是获取视频fps并将其存储到java程序中。我的代码存储xml文件,但我希望直接像int fps=30那样存储

ffprobe -v quiet -print_format xml -show_format -show_streams "/video/small/small.avi" > "/video/small/test.xml"

这是我的代码。

我在另一种方法中找到了计算fps,即

String query = "ffmpeg -i foo.avi 2>&1 | sed -n 's/.*, \\(.*\\) fp.*/\\1/p' > fps.txt";
    String[] command = {"gnome-terminal", "-x", "/bin/sh", "-c", query};
    Process process = Runtime.getRuntime().exec(command);
    process.waitFor();
    Thread.sleep(2000);
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("fps.txt")));
        output = br.readLine();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }

无论如何,谢谢朋友。

这将打印视频FPS:

ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate file.mp4

您也可以简单地运行它,以获得视频FPS,这将在linux机器上运行

ffprobe -v quiet -show_streams -select_streams v:0 INPUT |grep "r_frame_rate"

是的,它打印FPS,但仅作为精确分数。幸运的是,你可以把这个分数放进计算器,得到一个十进制值。例如,如果此命令的答案是
30000/1001
,您可以将其放入一个计算器,生成
29.97002997
,四舍五入到大约30 FPS。您可以将“-show_entries stream=r_frame_rate”替换为“-show_entries stream”以获得所有可用值的列表,并使用“-of json/flat/…”为了在需要时以更易于解析的格式获取数据,我注意到r_frame_rate会返回误导性的数字!avg_frame_rate更准确。要获得文件夹中所有视频的FPS统计信息,请使用
ls*.mp4 | xargs-n1--ffprobe-v error-select_streams v-of default=noprint_wrappers=1:nokey=1-show_entries stream=r_frame_rate | sort | uniq-c
无需
grep
。只需自行使用
ffprobe
,如接受的答案所示。