【问题标题】:ffmpeg returned non-zero exit status. Check stdout Coldfusionffmpeg 返回非零退出状态。检查标准输出 Coldfusion
【发布时间】:2017-08-24 03:05:41
【问题描述】:

我有一个冷融合应用程序。我正在通过ffmpeg和coldfusion从手机转换录制的视频。这是我正在运行的 ffmpeg 命令。

ffmpegPath -i "inputfile" -vcodec libx264 -acodec aac "OutputFile"

输出文件类型为 mp4。我想将我的所有视频转换为带有 h​​.264 和 ACC 声音的 mp4。这样它就可以在所有平台上运行。

我收到以下错误:

java.io.IOException: ffmpeg returned non-zero exit status. Check stdout.

这是我正在运行的 CF 代码。

<cfset resultLog        = "path\to\directory\testOuput_result.log">
<cfset errorLog         = "path\to\directory\testOuput_error.log">
<cfset results  = structNew()> 
        <cfscript>
            try {  
                runtime = createObject("java", "java.lang.Runtime").getRuntime();
                command = 'ffmpegPath -i "inputfile" -vcodec libx264 -acodec aac "OutputFile"';
                process = runtime.exec(#command#);
                results.errorLogSuccess = processStream(process.getErrorStream(), errorLog);  
                results.resultLogSuccess = processStream(process.getInputStream(), resultLog);  
                results.exitCode = process.waitFor();  
            }  
            catch(exception e) {  
                results.status = e;      
            }  
        </cfscript>
<cffunction name="processStream" access="public" output="false" returntype="boolean" hint="Returns true if stream was successfully processed">  
    <cfargument name="in" type="any" required="true" hint="java.io.InputStream object">  
    <cfargument name="logPath" type="string" required="false" default="" hint="Full path to LogFile">  
    <cfset var out = "">  
    <cfset var writer = "">  
    <cfset var reader = "">  
    <cfset var buffered = "">  
    <cfset var line = "">  
    <cfset var sendToFile = false>  
    <cfset var errorFound = false>  

    <cfscript>  
        if ( len(trim(arguments.logPath)) ) {  
            out = createObject("java", "java.io.FileOutputStream").init(arguments.logPath);  
            writer = createObject("java", "java.io.PrintWriter").init(out);  
            sendToFile = true;  
        }  

        reader = createObject("java", "java.io.InputStreamReader").init(arguments.in);  
        buffered = createObject("java", "java.io.BufferedReader").init(reader);  
        line = buffered.readLine();  
        while ( IsDefined("line") ) {  
            if (sendToFile) {  
                writer.println(line);  
            }  
            line = buffered.readLine();  
        }      
           if (sendToFile) {  
           errorFound = writer.checkError();  
           writer.flush();  
           writer.close();  
        }  
    </cfscript>  
    <!--- return true if no errors found. --->  
    <cfreturn (NOT errorFound)>  
</cffunction> 

我也使用了不同的 ffmpeg.exe,但得到了同样的错误。我还在冷融合中使用了ffmpeg-cli-wrapper java 包装器。我仍然遇到同样的错误。谁能帮我解决这个问题。

【问题讨论】:

  • 检查标准输出 - 那么标准输出是怎么说的呢?你看到这些类似的问题了吗? reference 1 - reference 2 - reference 3
  • @Miguel-F。感谢您的答复。是的,我看到了他们。我能够解决它。我没有将输入文件的绝对路径传递给导致问题的 ffmpeg。
  • 好的,很好。很高兴你解决了。请在此问题的答案中添加详细信息,以便其他人看到解决方案。
  • @Miguel-F。好的。谢谢

标签: video ffmpeg coldfusion


【解决方案1】:

与错误无关,但你确定你真的需要Runtime.exec()吗?它通常是矫枉过正的。大多数应用程序都可以用&lt;cfexecute&gt; 调用,它基本上是Runtime.exec() 的包装器,它做同样的事情,只是代码更少。

早在 CF8 中就有 an issue with cfexecute and ffmpeg.exe,原因是早期版本的 cfexecute 没有捕获 StdErr。但是,这在 CF8 更新之一中得到了解决。假设您使用的是最新版本的 CF,它应该可以直接使用。未经测试,但大致如下:

注意:所有文件使用绝对路径

<!--- change to the appropriate timeout --->
<cfexecute name="c:\path\to\ffmpeg.exe" 
    arguments=' -i "c:\path\to\in.file" -vcodec libx264 -acodec aac "c:\path\to\out.file"'
    timeout="120" 
    variable="result"
    errorVariable="errorMessage"
    /> 

<!--- Display results --->
<cfoutput>
   result = #result#
   errorVariable = #errorVariable #
</cfoutput>

有关参数和语法的更多详细信息,请参阅cfexecute documentation

【讨论】:

  • 谢谢。我会检查文档并根据它进行更改。
【解决方案2】:

我能够解决这个问题。问题出在输入文件路径中。我已经通过将输入文件的绝对路径传递给 ffmpeg 来解决这个问题

【讨论】:

  • 与错误无关,但你确定你真的需要 Runtime.exec() 吗?在旧版本中,您可以使用/c2&gt;&amp;1 调用带有&lt;cfexecute&gt; 的ffmpeg。你试过了吗?
  • @Leigh。没试过。我会试一试。你能给我一些示例代码吗?另外使用 cfexecute 而不是 Runtime.exec() 有什么好处?
  • 该示例对于 cmets 来说太长了,请参阅my answer below
猜你喜欢
  • 2017-05-18
  • 2013-12-23
  • 2022-11-01
  • 2014-01-13
  • 2016-08-09
  • 2019-10-02
  • 2019-02-06
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多