동영상 파일의 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