逃脱角色“|”错误(Linux命令)

时间:2013-03-15 17:13:04

标签: java linux ffmpeg escaping character

我正在尝试用Java运行Linux命令。

这是命令:

  

“ffmpeg -i rtmp://192.168.1.112/garage/stream26g -f mpegts -acodec libmp3lame -ar 48000 -ab 64000 -s 480x320 -r 30 -vcodec libx264 -b 544k -flags + loop -cmp + chroma -partitions + parti4x4 + partp8x8 + partb8x8 -subq 5 -trellis 2 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 544k -bufsize 544k -rc_eq'brinkCplx ^(1-qComp )'-qcomp 0.6 -qmin 10 -qmax 30 -qdiff 4 -level 30 -sepect 480:320 -g 30 -async 2 - | vod - 10 stream / stream26g / sample stream / stream26g / stream.m3u8 http://www.tshizerbia.com//video/ 5" ;

但它给了我一个错误:

  

无法为|

找到合适的输出格式

我不知道是什么问题

我用它来运行命令

Process p = Runtime.getRuntime().exec(command);

如果我将\\|放入字符串中,则错误消息为:

  

无法为\ |

找到合适的输出格式

我怎样才能逃脱这个角色?有什么想法吗?

4 个答案:

答案 0 :(得分:1)

尝试引用竖线字符。我不认为它需要被Java转义;我认为它需要被shell引用。当然,你必须Java-escape双引号字符:

...-async 2 - \"|\" vod - 10 ...

答案 1 :(得分:1)

管道“|”是特定于shell的。尝试通过shell执行它,比如

String[] bashCommand = {"/bin/bash", "-c", command};

并执行此bashCommand。

答案 2 :(得分:0)

Process p = Runtime.getRuntime().exec("ffmpeg -i rtmp://192.168.1.112/garage/stream26g -f mpegts -acodec libmp3lame -ar 48000 -ab 64000 -s 480x320 -r 30 -vcodec libx264 -b 544k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 2 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 544k -bufsize 544k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 30 -qdiff 4 -level 30 -aspect 480:320 -g 30 -async 2 - \\| vod - 10 stream/stream26g/sample stream/stream26g/stream.m3u8 http://www.tshizerbia.com//video/ 5");

答案 3 :(得分:0)

尝试使用\\|转义它。适用于Java,但我不确定是否特别针对linux命令。