0

据我了解,“ffprobe”将以 JSON 格式提供文件相关数据。所以,我已经在我的 Ubuntu 机器上安装了 ffprobe,但我不知道如何使用 Java/Grails 访问 ffprobe JSON 响应。

预期响应格式:

{
    "format": {
        "filename": "/Users/karthick/Documents/videos/TestVideos/sample.ts",
        "nb_streams": 2,
        "nb_programs": 1,
        "format_name": "mpegts",
        "format_long_name": "MPEG-TS (MPEG-2 Transport Stream)",
        "start_time": "1.430800",
        "duration": "170.097489",
        "size": "80425836",
        "bit_rate": "3782576",
        "probe_score": 100
    }
}

这是我的常规代码

 def process = "ffprobe -v quiet -print_format json -show_format -show_streams HelloWorld.mpeg ".execute()             
        println "Found ${process.text}"
        render  process  as JSON

我能够获得进程对象,但我无法获得 json 响应

我应该将进程对象转换为 json 对象吗?

输出:

发现 java.lang.UNIXProcess@75566697 org.codehaus.groovy.grails.web.converters.exceptions.ConverterException: Error conversion Bean with class java.lang.UNIXProcess

4

2 回答 2

0

Grails 与此无关。Groovy 可以以非常简单的方式执行任意 shell 命令:

"mkdir foo".execute()

或者对于更高级的功能,您可能会考虑使用ProcessBuilder。归根结底,您需要执行 ffprobe,然后捕获 JSON 的输出流以在您的应用程序中使用。

于 2015-05-12T15:50:56.430 回答
0

Groovy 提供了一种执行命令行进程的简单方法。只需将命令行编写为字符串并调用该execute()方法。

execute() 方法返回一个java.lang.Process实例。

println "ffprobe <options>".execute().text

[资源]

于 2015-05-12T15:55:16.067 回答