2016-08-17 4 views
0

NodeJS에서 GO로 비디오 생성 라이브러리를 변환하는 것은 주로 모든 비디오 처리에 FFMPEG를 사용합니다. 나는 이미 내가 원하는 세대를 만들기 위해 작성된 모든 FFMPEG 명령을 가지고있다. 문제는 os/exec 패키지를 통해 명령을 실행하려고하면 실패합니다. 그러나 정확한 명령을 복사하여 터미널에서 직접 실행하면 제대로 작동하는지 파악할 수 없습니다. 명령을 실행하는 내 코드는 다음과 같습니다 :Golang 명령은 터미널에서 작동하지만 exec 패키지에서는 작동하지 않습니다.

command := "ffmpeg -y -loop 1 -i image.png -vf 'fade=in:0:15,fade=out:105:15' -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg" 

parts := strings.Fields(command) 
cmd := exec.Command(parts[0], parts[1:]...) 
cmd.Stderr = os.Stderr 
cmd.Stdout = os.Stdout 
err := cmd.Run() 
if err != nil { 
    panic(err) 
} 

이 코드를 실행하려고하면 내가 얻는는 FFmpeg 오류는 다음과 같습니다

[AVFilterGraph @ 0x22a9bc0] 이러한 필터 : '페이드 =에 : 0 : 15, 페이드 아웃 : 105 : 15 '

필터를 여는 중 오류가 발생했습니다.

2016년 8월 17일 17시 48분 53초 종료 상태 내가 앞서 언급처럼 1

, 나는 정확한 명령을 복사 할 경우 :

ffmpeg -y -loop 1 -i image.png -vf 'fade=in:0:15,fade=out:105:15' -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg 

및 터미널에서 직접 실행, 아무 문제 없어.

제발 도와주세요.

답변

1

strings.Fields(command)을 사용하는 경우 필드가 공백으로 분리됩니다. 결과적으로 parts 슬라이스의 값은 'fade=in:0:15,fade=out:105:15'이고 따옴표가 붙습니다. 이 완전한 값 (따옴표 포함)은 명령이 인식 할 수없는 ffmpeg 명령으로 전달됩니다.

쉘은 이러한 따옴표를 제거하고 Go가 수행하지 않는 문자열 fade=in:0:15,fade=out:105:15 만 전달합니다. 수정하려면 다음을 시도하십시오.

// remove the quotes around fade=in:0:15,fade=out:105:15 
command := "ffmpeg -y -loop 1 -i image.png -vf fade=in:0:15,fade=out:105:15 -c:v mpeg2video -t 5 -s 1280x720 -r 30 -q:v 1 -preset ultrafast image.mpg" 

parts := strings.Fields(command) 
+0

와우. 나는 그것이 그것을 고쳤다 고 믿을 수 없다. 너는 천재 야. 내 친구 야. –

관련 문제