2012-08-30 2 views
0

저는 .fi 파일을 .png 이미지 시퀀스로 변환하기 위해 ffmpeg를 사용하고 있습니다. 이 사람은 잘 작동합니다 :ffmpeg 비디오를 시퀀스 배치 파일

@ ECHO OFF 

FOR %%A IN (*.avi) DO CALL :avi2png "%%A" 

:avi2png 
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%%03d.png" 

ECHO. 
GOTO :EOF 

하지만 스크립트가 현재 처리중인 .AVI 파일의 확장자없이 이름을 추출 할. 이 이미지의 순서가 어떻게 보일지입니다 : currentavi001.png, currentavi002.png 등 내가 생각 해낸 스크립트가 작동하지 않습니다 :

@ ECHO OFF 

FOR %%A IN (*.avi) DO CALL :avi2png "%%A" 

:avi2png 
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%%~nA%%03d.png" 

ECHO. 
GOTO :EOF 

나 ' 모두 %~nA%%~nA을 시도했지만 아무 소용이 없습니다. 이 스크립트는 다음을 반환합니다.

Couldn't open file : 
av_interleaved_write_frame(): Input/output error. 

나는 완전한 평신도이므로 도움이 될 것입니다.

답변

0

%%A 변수는 avi2png에서 참조 할 수 없습니다. 이 시도 :

@ ECHO OFF 

set count=0 
FOR %%A IN (*.avi) DO CALL :avi2png "%%A" 
goto :eof 

:avi2png 
set /a count=count+1 
set Ncount=00%count% 
set Ncount=%Ncount:~-3% 
ffmpeg.exe -y -i %* -sameq -f image2 -c:v png "%~n1%Ncount%.png" 

ECHO. 
GOTO :EOF 

당신이 my_movie.aviffmpeg가 PNG my_movie001.png을 만듭니다라는 현재 디렉토리에서 하나 개의 파일이있는 경우.

당신은 callfor 루프에서 레이블, 당신은 더 이상 대신 :label는 별도의 배치 파일로 취급하고 모든 변수 라인에 후 (이 경우 %% (A)에) 원래 for 루프 변수를 사용할 수 없습니다 때 :label은 배치 파일로 전달되는 스위치로 처리됩니다.

그래서 ...

Call :label one two thee 

는 ... 같은 출력을 생성 ...

:label 
Echo %1, %2, %3. 

...이 작동 :

one, two, three. 

마찬가지로 독립 실행 형 배치 파일 인 경우

오, 또한 %%A 등은 결코 %%A%% (또는 %A%, 완전히 다른 변수)로 언급되지 않는다. 그렇게하면 (그리고 %%A==Hello) 결과는 Hello%이되며 코드의 어딘가에서 문자를 먹으면 기괴한 오류가 발생합니다.

+0

요청한 출력을 생성하는 고정 코드입니다. –

+0

철저한 답변 주셔서 감사합니다, 제임스. 나 같은 완벽한 멍청한 놈에게는 일괄 스크립팅이 지뢰밭을 조심스럽게 걷는 것과 같습니다. 나는 집에 돌아가서 내 전화기 대신 내 컴퓨터에 액세스 할 때 코드를 사용 해보겠습니다. –

+0

@DaleCooper 제 대답이 도움이된다면 대답으로 선택하십시오. :) –

0

위의 답변을 받아들이지 못했습니다. 각 배치 파일에서 1 줄의 코드로 2 파일 접근 방식을 사용하여 파일 이름이 ORIGINALFILENAME _ #####. png 인 이미지를 매초 만들었습니다. ffmpeg.exe 파일의 위치와 엄지 손가락을 만들기 위해 파일 이름을 적절하게 변경하십시오. 나는 창 7을 사용하고 있으며,이 작품은 나를 위해 일한다.

CreateThumbs를 호출하기 위해 비디오가있는 폴더의 파일 (원하는 이름)을 배치하십시오.박쥐 파일 : 대한

/R % 1 %% 전에서 (* .AVI) 할 "C : \ Program 파일 (x 86) \는 FFmpeg \의 CreateThumbs.bat"%% 내가

CreatThumbs.bat 는 FFmpeg 폴더에 엄지 손가락을 만들려면 다음

"C : \ Program 파일 (x 86) \는 FFmpeg \ 빈 \의 ffmpeg.exe"-i % ~ N1 _ %%

을 05d.png 1 -r 1 -f 이미지 2 %