【问题标题】:getruntime() exec() with double quotes in commandgetruntime() exec() 命令中带有双引号
【发布时间】:2012-12-14 06:24:43
【问题描述】:

我想执行一个ffmpeg 命令,我使用的方法适用于我列表中的每个命令,除了以下包含双引号以设置过滤器(-vf)参数的命令

ffmpeg -i 2012-12-27.mp4 -vf "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]" -vcodec libx264 -acodec copy out.mp4

我尝试将引号更改为单引号,但没有成功。该命令适用于带有单引号和双引号的 android 终端。

我正在开发的应用程序使用了大约 5 个ffmpeg 命令,除了这个之外都可以工作,这是什么错误吗?

我找不到这个问题的具体解决方案,将 args 分解为一个数组,然后按照其他地方的建议将其传递给 runtime().exec() 似乎不起作用,或者只是试图用 \" 转义引号 won不行。

上述命令中引用的两个文件都位于 sdcard 中,我删除了命令的串联,以免事情变得混乱,请放心,当引用完整路径时,这些命令在终端中工作文件。 我使用 stringbuilder 和`getexternalstorageDirectory().getabsolutepath() 将传递给 getRuntime().exec() 的字符串连接起来,以获取每个文件的路径,就像我在使用进程类时使用以前的命令所做的那样。

我正在使用 Jelly Bean 4.2 以防万一。

【问题讨论】:

    标签: java android ffmpeg


    【解决方案1】:

    试试

    getRuntime().exec( new String[] { "ffmpeg", "-i", "2012-12-27.mp4", "-vf", "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]", "-vcodec", "libx264", "-acodec", "copy", "out.mp4" } );
    

    属于一起的参数(如带引号的-vf过滤字符串)需要在同一个数组元素中。

    【讨论】:

      【解决方案2】:

      字符串数组不能正常工作?

      java.lang.Runtime.exec(String[])
      java.lang.Runtime.exec(String[], String[], File)
      
      Runtime.exec(new String[]{"ffmpeg","-i","2012-12-27.mp4","-vf",
          "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]",
          "-vcodec","libx264","-acodec","copy","out.mp4"});
      

      您应该将所有参数放入一个数组中。

      【讨论】:

      • 我认为你们俩都是对的,我在将阵列放在一起时已经将您竖起,我认为 323go 首先得到了答案,非常感谢您查看此 +1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2012-11-08
      • 1970-01-01
      • 2023-01-08
      相关资源
      最近更新 更多