问题描述
使用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)运行命令前先切换工作目录.这么长时间你应该解决了吧.还有水印大小会根据视频分辨率不同.这个也可以程序控制.有需要问我.