【问题标题】:ffmpeg watermark from java Runtime.exec cannot find output来自java Runtime.exec的ffmpeg水印找不到输出
【发布时间】:2013-12-28 11:39:54
【问题描述】:

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

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

【问题讨论】:

  • 标准输出有输出吗? ffmpeg 在您的路径中吗?尝试提供完整路径,例如rt.exec("/usr/bin/ffmpeg ...(当然,调整为安装时的真实 ffmpeg 路径)。
  • 对不起,我现在添加了输出,你可以看到 ffmpeg 被识别为命令
  • 它不需要与您的问题相关,但可能是输入流之一导致错误。在java world 上有一篇关于这类问题的精彩文章
  • 可能是 rt.exec 首先调用 shell 的问题,它解释你的命令行并摆弄引号。试试 rt.exec 的数组版本:rt.exec(new String[] { "ffmpeg", "-i", "/home/mydir/inputvideo.mp4", "-vf", "movie=/home/mydir/watermarklogo.png [wm]; [in][wm] overlay=10:10 [out]", "/home/mydir/outputvideo.mp4"});
  • +1。正是 Guntram Blohm 所说的。

标签: java ffmpeg runtime.exec watermark video-watermarking


【解决方案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()

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多