2012-12-20 2 views
2

ffmpeg 명령의 프론트 엔드 역할을하는 Java Swing 응용 프로그램을 작성 중입니다. 사용자로부터 폴더와 파일 이름을 입력하고 JTextField에 지속적으로 표시되는 더 많은 매개 변수를 추가합니다. 사용자는 호출하려는 텍스트 필드에서 최종 명령을 편집 할 수 있습니다. 이것은 윈도우와 리눅스 모두에서 작동Java, Windows/Linux에서 Runtime.getRunTime.exec()를 통해 경로 이름, 파일 이름

:

Process ffmpeg = Runtime.getRuntime().exec(command, null, new File(current_working_folder)); 

명령은 문자열입니다. OS에 따라 형식이 지정되므로 경로가 항상 전체 경로 (절대 경로)로 주어지고 슬래시가 지정된 OS에 적합하도록 지정됩니다.

Windows 및 Linux에서는 "...."에 폴더 및 파일 이름을 넣어 ffmpeg 명령을 실행할 수 있습니다. Windows에서이 형식은 궁극적으로 Runtime.getRunTime.exec()를 통해 작동합니다.

그러나 Linux에서는 Runtime.getRunTime.exec()를 통해 작동하지 않습니다. 따옴표는 아마도 "...."라고 오해 할 수 있습니다.

이것에 대한 조언이 필요하십니까?

+0

당신은 예외를 받고 있습니까? – Suranga

답변

2

Runtime.exec(String[] cmdarray, String[] envp, File dir) 문자열을 사용하지 말고 배열로 명령을 전달해보십시오.

Runtime.getRuntime().exec("ffmpeg -i video_origine.avi video_finale.mpg", null, new File(current_working_folder)); 

사용 : 대신 예를 들어

,

Runtime.getRuntime().exec(new String[]{"ffmpeg", "-i", "video_origine.avi", "video_finale.mpg"}, null, new File(current_working_folder)); 
+0

가장 일반적인 경우와 모든 운영 체제에서 기능을 수행하려고하기 때문에 문자열을 사용하고 싶습니다. – GianniTee

+0

다음은 테스트입니다. ffmpeg -f image2 -r 16 -i "/ home/neuron/IdeaProjects/Perceptron/animations/새 폴더 666 from HeLL 폴더/프레임 % d.tga"/ home/neuron/IdeaProjects/Perceptron/movies/jk 904. 0. 02.1lk .folder/my mkvmovie.mkv "경로/파일 이름에 공백을 포함하고 따옴표로 묶을 수있는 방법에 유의하십시오. 이것은 Windows 및 Linux 콘솔에서 작동하지만 Linux에서는 java Runtime.getRuntime(). exec()를 사용하지 않습니다. 문자열 배열을 만드는 것은 어려울 것이라고 생각합니다. 일반적인 경우 경로/파일 이름이 복잡 할 경우 복잡한 것입니다. – GianniTee

+0

[Stderr] [image2 @ 0xa2c99a0] 경로가 "/ home/neuron/IdeaProjects/Perceptron/animations/New"이고 인덱스가 0-4 [Stderr] "/ home/neuron/IdeaProjects 범위에있는 파일을 찾을 수 없습니다./Perceptron/animations/New : 해당 파일이나 디렉토리가 없습니다. – GianniTee