[英]ffmpeg watermark from java Runtime.exec cannot find output
I'm having a problem in sending a ffmpeg command to add a watermark to my video from Java using Runtime.exec().我在使用 Runtime.exec() 从 Java 发送 ffmpeg 命令以向我的视频添加水印时遇到问题。 The strange thing is that the same command is working perfectly from terminal.... Any idea what the issue could be?
奇怪的是,相同的命令在终端上运行良好......知道问题是什么吗? this is the command
这是命令
ffmpeg -i /home/mydir/inputvideo.mp4 -vf "movie=/home/mydir/watermarklogo.png [wm]; [in][wm] overlay=10:10 [out]" /home/mydir/outputvideo.mp4
and this is the Java code (same as above, just wrapped in the exec code, and escaped characters这是Java代码(与上面相同,只是包裹在exec代码中,并转义了字符
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("ffmpeg -i /home/mydir/inputvideo.mp4 -vf \"movie=/home/mydir/watermarklogo.png [wm]; [in][wm] overlay=10:10 [out]\" /home/mydir/outputvideo.mp4");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null)
System.out.println(line);
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
exit code is always 1 when running this.... this is the full output运行时退出代码始终为 1.... 这是完整的输出
ffmpeg version 0.10.9-7:0.10.9-1~saucy1 Copyright (c) 2000-2013 the FFmpeg developers
built on Oct 18 2013 17:40:10 with gcc 4.8.1
configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.9-1~saucy1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
libavutil 51. 35.100 / 51. 35.100
libavcodec 53. 61.100 / 53. 61.100
libavformat 53. 32.100 / 53. 32.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 61.100 / 2. 61.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 6.100 / 0. 6.100
libpostproc 52. 0.100 / 52. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/rohif/oshi.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf54.59.106
Duration: 00:00:48.13, start: 0.000000, bitrate: 2482 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 2362 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 117 kb/s
Metadata:
handler_name :
[NULL @ 0x18fb9a0] Unable to find a suitable output format for '[wm];'
[wm];: Invalid argument
Process exitValue: 1
I wrote below code in the Kotlin(You can convert it to java source):我在 Kotlin 中编写了以下代码(您可以将其转换为 java 源代码):
ffmpeg = FFmpeg(ffmpegConfig.ffmpegPath)
ffprobe = FFprobe(ffmpegConfig.ffProbePath)
val builder = FFmpegBuilder().setComplexFilter("overlay=x=(main_w-overlay_w)-2:y=(main_h-overlay_h)-2")
.addInput(videoPath)
.addInput(watermarkPath)
.overrideOutputFiles(true)
.setFormat("mp4")
.addOutput(tempWaterMarkMediaFile.absolutePath)
.done()
val executor = FFmpegExecutor(ffmpeg, ffprobe)
executor.createJob(builder).run()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.