【问题标题】:I m trying to use 'ffprobe' with Java or groovy我正在尝试将“ffprobe”与 Java 或 groovy 一起使用
【发布时间】:2015-07-23 13:35:05
【问题描述】:

据我了解,“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
    }
}

这是我的 groovy 代码

 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:使用类 java.lang.UNIXProcess 转换 Bean 时出错

【问题讨论】:

标签: json grails groovy ffprobe


【解决方案1】:

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

"mkdir foo".execute()

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

【讨论】:

  • 我不知道如何在 groovy 中捕获 JSON 的输出流,我所做的是将流程对象渲染为 JSON,但它返回此错误:“org.codehaus.groovy.grails。 web.converters.exceptions.ConverterException:使用类 java.lang.UNIXProcess 转换 Bean 时出错
【解决方案2】:

Groovy 提供了一种执行命令行进程的简单方法。简单地 将命令行写成字符串,调用execute()方法。

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

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

[Source]

【讨论】:

  • 现在我可以使用 ffprobe 现在我使用了这个命令“ ffprobe -show_format -loglevel quiet ”并且我在输出中得到响应,看起来像 [FORMAT] filename=HelloWorld.mpeg nb_streams=2 format_name=mpeg format_long_name=MPEG-PS format start_time=0.768300 duration=20.966667 size=706564.000000 [/FORMAT] 但我无法访问这些值,如果我需要使用它们,我希望它们为 json 格式,所以我使用了这个命令“ffprobe -v安静 -print_format json -show_format -show_streams HelloWorld.mpeg "
  • 但是这个命令“ffprobe -v quiet -print_format json -show_format -show_streams HelloWorld.mpeg”不起作用,我正在获取进程对象,但无法获取 json。
  • 如果媒体文件和 ffprobe 不在 PATH 中,则使用绝对路径
  • 没有改变这是我的代码:def process = "ffprobe -v quiet -print_format json -show_format -show_streams /home/karthikv/workspace/Mpeg/HelloWorld.mpeg".execute() println "Found ${process}" 将进程渲染为 JSON OUTPUT:org.codehaus.groovy.grails.web.converters.exceptions.ConverterException:使用类 java.lang.UNIXProcess 转换 Bean 时出错。无法获取 json
猜你喜欢
  • 2019-02-17
  • 1970-01-01
  • 2018-11-05
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2016-03-25
相关资源
最近更新 更多