ffmpeg를 사용하여 비디오 파일을 여러 세그먼트로 분할

ffmpeg를 사용하여 비디오 파일을 여러 세그먼트로 분할

동영상 파일의 2분부터 4분까지 2분을 추출하려면 다음 명령을 사용합니다.

ffmpeg -i input.mpg -sameq -ss 00:02:00 -t 00:02:00 output.mpg

영상을 2분 단위로 나누고 싶습니다. Bash 스크립트를 사용하는 아이디어가 있지만 몇 가지 오류가 있습니다.

for i in seq 50;
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

표현식을 사용하여 내 스크립트의 오류를 수정하는 방법을 알고 있습니까 $i? 아니면 더 나은 해결책이 있습니까?

답변1

호출 시 백틱을 사용하는 것을 잊었습니다. 또는 더 나은 방법은 $( )subshell 입니다 seq. 이것은 작동합니다:

for i in $( seq 50 );
do ffmpeg -i input.mpg -sameq -ss 00:`expr $i \* 2 - 2`:00 -t 00:02:00 output.mpg; done

output.mpg또 다른 점은 실행할 때마다 덮어쓰는 것을 원하지 않는다는 것입니다 . 그렇죠? :) $i파일 이름을 출력하는 데에도 사용할 수 있습니다.

$(( ))게다가: bash에서는 or $[ ]대신 사용할 수 있습니다 expr. (제 생각에는) 더 깔끔해 보입니다. 또한 필요하지 않습니다 seq. 중괄호 확장만 있으면 시퀀스를 얻을 수 있습니다. 예는 다음과 같습니다.

for i in {1..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

중괄호의 또 다른 이점은 이름 앞에 0을 포함할 수 있다는 것입니다(향후 파일 정렬에 매우 유용함).

for i in {01..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

또한 범위만 변경해야 하는 경우 다음 i*2 - 2과 같이 쉽게 단순화할 수 있습니다.i*2

for i in {00..49}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i*2 ]:00 -t 00:02:00 output_$i.mpg
done

관련 정보