当前位置: 技术问答>linux和unix
Java程序调用shell脚本出线问题(急!!!)分全都在这了。
来源: 互联网 发布时间:2015-12-28
本文导语: 我的一个java程序,利用process的runtime的exec调用shell脚本,进行ffmpeg的视频转flv。 在命令行上直接操作该语句可以转码,并全部转换成功; 单独在exec里执行转码语句,也可以转换成功;(ffmpeg -i 01.avi -ar 22050 -ab ...
我的一个java程序,利用process的runtime的exec调用shell脚本,进行ffmpeg的视频转flv。
在命令行上直接操作该语句可以转码,并全部转换成功;
单独在exec里执行转码语句,也可以转换成功;(ffmpeg -i 01.avi -ar 22050 -ab 56 -f flv -y -s 320x240 01.flv在java的exec里可以成功转码)
但把语句写成shell脚本传入参数,放到java程序里的exec运行,就只能转前面一小部分的视频,并且提示有error,不知道是不是java程序对shell脚本的支持不好的原因?
大家多指点,急!!!
java程序如下:
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("sh do.sh");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
运行的是sh do.sh命令,先运行do.sh,do.sh里也是一个语句,运行flv.sh脚本。
do.sh:
sh flv.sh /opt/test/02.avi 01.flv
/opt/test/02.avi是视频输入文件
01.flv是视频输出文件
flv.sh脚本如下:
#!/bin/bash
name=$1
echo "$1"
outname=$2
echo "$outname"
ffmpeg -i $name -ar 22050 -ab 56 -f flv -y -s 320x240 $outname 2>&1 >/dev/null
在命令行上直接操作该语句可以转码,并全部转换成功;
单独在exec里执行转码语句,也可以转换成功;(ffmpeg -i 01.avi -ar 22050 -ab 56 -f flv -y -s 320x240 01.flv在java的exec里可以成功转码)
但把语句写成shell脚本传入参数,放到java程序里的exec运行,就只能转前面一小部分的视频,并且提示有error,不知道是不是java程序对shell脚本的支持不好的原因?
大家多指点,急!!!
java程序如下:
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("sh do.sh");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
运行的是sh do.sh命令,先运行do.sh,do.sh里也是一个语句,运行flv.sh脚本。
do.sh:
sh flv.sh /opt/test/02.avi 01.flv
/opt/test/02.avi是视频输入文件
01.flv是视频输出文件
flv.sh脚本如下:
#!/bin/bash
name=$1
echo "$1"
outname=$2
echo "$outname"
ffmpeg -i $name -ar 22050 -ab 56 -f flv -y -s 320x240 $outname 2>&1 >/dev/null