繁体   English   中英

来自 java Runtime.exec 的 ffmpeg 水印找不到输出

[英]ffmpeg watermark from java Runtime.exec cannot find output

我在使用 Runtime.exec() 从 Java 发送 ffmpeg 命令以向我的视频添加水印时遇到问题。 奇怪的是,相同的命令在终端上运行良好......知道问题是什么吗? 这是命令

ffmpeg -i /home/mydir/inputvideo.mp4 -vf "movie=/home/mydir/watermarklogo.png [wm]; [in][wm] overlay=10:10 [out]" /home/mydir/outputvideo.mp4

这是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);

运行时退出代码始终为 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

我在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM