关于java调用fmpeg问题,求助!

问题描述

使用ffmpeg实现视频添加水印功能,在项目中使用时,输出文件每次都是0字节,相当于只产生了一个空文件,里面没有任何内容,但是在命令窗口使用相同的命令时,确能正常输出。下面是我在命令窗口的命令:ffmpeg-i/usr/share/tomcat/temp/wifi.flv-vf"movie=/usr/share/tomcat/temp/logo.png[logo];[in][logo]overlay=10:10[out]"-vcodeclibx264-fmp4/usr/share/tomcat/temp/out.mp4

产生的文件out.mp4java项目中的命令:privatestaticsynchronizedbooleanprocessMp4(Stringoldfilepath,Stringnewfilepath){if(!checkfile(oldfilepath)){System.out.println(oldfilepath+"isnotfile");returnfalse;}List<String>commend=newjava.util.ArrayList<String>();commend.add("/usr/local/ffmpeg/ffmpeg");//commend.add("E:/java_code/ffmpeg/ffmpe/bin/ffmpeg.exe");commend.add("-i");commend.add(oldfilepath);///usr/share/tomcat/temp/wifi.flvcommend.add("-s");commend.add("-vf");commend.add(""movie=/usr/share/tomcat/temp/logo.png[logo];[in][logo]overlay=10:10[out]"");commend.add("-vcodec");commend.add("libx264");commend.add("-f");commend.add("mp4");commend.add(newfilepath);///usr/share/tomcat/temp/out.mp4try{ProcessBuilderbuilder=newProcessBuilder();builder.command(commend);builder.start();returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}

求帮忙!

解决方案

本帖最后由 kylinshaw 于 2015-01-08 19:55:12 编辑
解决方案二:
网上查一下这些参数配置是不是配置正确了,之前做过一个上传视频转码的,具体的细节不太记得了,好像参数的配置比较重要,还有就是转码线程的管理,或者看一下是不是没有flush啊。
解决方案三:
引用1楼xiangnan129的回复:

网上查一下这些参数配置是不是配置正确了,之前做过一个上传视频转码的,具体的细节不太记得了,好像参数的配置比较重要,还有就是转码线程的管理,或者看一下是不是没有flush啊。

参数什么的应该是没有问题的,直接在命令行敲的和java里面是一模一样的命令,如果把水印部分去掉,只留下转码的话,在java里面能够成功,估计是水印这块的问题,但是直接在命令行敲却可以....
解决方案四:
打印下commend应该是commend拼接的命令有问题?
解决方案五:
List<String>commend=newjava.util.ArrayList<String>();commend.add("/usr/local/ffmpeg/ffmpeg");//commend.add("E:/java_code/ffmpeg/ffmpe/bin/ffmpeg.exe");commend.add("-i");commend.add(oldfilepath);///usr/share/tomcat/temp/wifi.flvcommend.add("-vf");commend.add(""movie=/usr/share/tomcat/temp/logo.png[logo];[in][logo]overlay=10:10[out]"");commend.add("-vcodec");commend.add("libx264");commend.add("-f");commend.add("mp4");commend.add(newfilepath);///usr/share/tomcat/temp/out.mp4

commend.add("-s");这个去掉再试
解决方案六:
processBuilder.directory(path)运行命令前先切换工作目录.这么长时间你应该解决了吧.还有水印大小会根据视频分辨率不同.这个也可以程序控制.有需要问我.

时间: 2024-08-30 19:35:08

关于java调用fmpeg问题,求助!的相关文章

求助!Java调用批处理文件后无法执行

问题描述 求助!Java调用批处理文件后无法执行 我想用Java调用批处理打开.exe安装包,但是安装包无法打开或者说直接跳过了打开 上面是我的Java代码 执行后没有打开.exe文件!但是我单独打开批处理文件就完全没问题 这是我的批处理文档! 哪位大神帮帮忙啊!!!! 解决方案 java 执行批处理文件window下java执行批处理文件 解决方案二: 既然是执行 cmd ,你的BAT里为什么还要pause? 然后,你的 command = "cmd /c zidong.bat";就

求助java调用.net开发的webservice问题

问题描述 今天接到任务,做一个java调用webservice实现短信的发送,基本不会.求助代码http://220.201.207.234/umswebservice/messageinterop.asmx连接到统一消息平台.连接成功建立后下面的其它方法才能有效.uid-UMS接入帐号,pwd-接入口令.通过平台分配的登录帐号和密码与平台连接.publicboolConnect(stringsUid,stringsPwd)断开与统一消息平台的连接.publicboolDisconnect()向

javaeye基础-java基础知识问题求助

问题描述 java基础知识问题求助 问 形如 X(父类) y=new Y(子类): 这样new出来的对象y是子类对象还是父类对象? 如果子类有重载的构造函数,那么在new的时候父类的默认构造函数还会被子类的构造函数调用么? 解决方案 你可以去了解下向上转型和向下转型的区别! 解决方案二: java的一些基础知识 .Java基础知识一Java_计算机基础知识 解决方案三: new 出来的当然是子类对象,但是是父类引用,即父类引用指向之类对象. 子类有重载的构造函数?构造函数是不能重载的 解决方案四

点击按钮-java后台响应问题求助help

问题描述 java后台响应问题求助help 问题是这样的:终端点击按钮出发调用后台,debug模式下,第一次调用进入后台方法了,第2次再点击按钮却没有进来 (是在第一次方法调用未执行完毕的情况下进行第2次点击的),请问这是什么问题.后台框架是struts1 解决方案 肯定是做约束了,未返回前,不能再次触发 解决方案二: 你是用ajax调用的吗?如果是需要注意缓存问题,可能第二次就直接从缓存中取了.可以在url后面加上一个时间戳 如new Date().getTime().如果是jquery需要加

线程-java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来

问题描述 java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来 1.用java调用sqlplus,将指定的存储过程下载到本地作为文本文件2.在java读取此本地文件做处理,处理后写1个新的文本文件在本地我将上面2个步骤用2个进程thread1,thread2因为步骤2必须等步骤1结束才能执行,所以我调用thread1.start()thread1.join()以及thread2.start().但是运行结果是每次都只执行出了步骤1,步骤2执行不出来.考虑是否在步

java调用swt.jar包dll文件的加载问题?

问题描述 java调用swt.jar包dll文件的加载问题? 调用swt.jar时,报错 Exception in thread "AWT-EventQueue-2" java.lang.UnsatisfiedLinkError: no swt-win32-3347 or swt-win32 in swt.library.path, java.library.path or the jar file at org.eclipse.swt.internal.Library.loadLib

Java 调用底层接口的几种方法

Java 调用底层接口 Java 调用底层接口要通过动态链接库进行,在windows下是dll文件,linux是so文件 Java调用动态库所需要关心的问题:     如何装载文件,以及如何定位所要使用的方法:      数据类型是如何对应的:     如何给使用的方法传递参数:     如何获取返回的值. 目前调用底层接口用的比较多的技术包括jni.jna.jnative.Nativecall等 JNI 封装本地接口 JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能.使用

java 调用wsdl接口 大神帮忙讲解一下

问题描述 java 调用wsdl接口 大神帮忙讲解一下 现有一接口是c++写的 java调用他如何调用这个接口?在浏览器上显示为 解决方案 参考下:http://yang-min.iteye.com/blog/600172

java调用matlab程序

在实际Java编程中,我们可能想要使用matlab编写一些复杂的数值计算算法,然后导入我们的java项目中调用.这首先需要我们matlab的jdk版本和java项目的jdk版本对应一致.想查看matlabjdk版本,可以在matlab命令行中输入version -java来查看,会看到类似下面的内容: Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode .下面我们来看看mat