FFMPEG를 사용하여 지속 시간이 지속적으로 짧은 일련의 사진을 만들 수 있습니까?

FFMPEG를 사용하여 지속 시간이 지속적으로 짧은 일련의 사진을 만들 수 있습니까?

가장 간단한 슬라이드쇼는 동일한 시간 동안 각 사진이 표시되는 일련의 사진입니다.

또한 시퀀스를 만들고 싶지만 지속 시간과 관련하여 더 복잡합니다.

첫 번째 사진의 지속 시간은 1초이고, 다음 사진은 1초보다 약간 짧고, 다음 사진은 조금 더 짧아서 시퀀스가 ​​느리게 시작되어 끝으로 갈수록 빨라지길 원합니다.

어떻게 해야 할지 모르겠습니다. 제가 추측할 수 있는 유일한 것은 각 사진의 지속 시간이 다음과 같은 함수로 계산될 수 있다는 것입니다.

duration = 1/picture_number
duration = 1 - (picture_number/picture_total)

또는 스크립트에서:

duration=1
while [duration > 0]
do
duration=duration*0.99
done

답변1

이 작업은 단일 명령으로 수행할 수 있습니다. 기본 방법은 각 이미지의 지속 시간이 동일한 슬라이드쇼로 시작한 다음 선택 필터를 사용하여 각 연속 이미지의 표시 시간에서 더 많은 양을 잘라내는 것입니다.

ffmpeg -framerate 1 -i img%d.jpg \
       -vf fps=25,select='lt(mod(t,1),1-floor(t)/25)',setpts=N/25/TB \
       out.mp4

-framerate 1--> 이미지가 원래 회전하는 속도를 제어합니다.

fps=25--> 최종 프레임 속도를 설정합니다. 또한 작업할 프레임을 가지려면 이 작업을 수행해야 합니다.

select='lt(mod(t,1),1-floor(t/1)/25)'--> 매초마다 한 프레임씩 적게 유지합니다.

setpts=N/25/TB--> 선택한 프레임의 타임스탬프를 연속적으로 만듭니다. 그렇지 않으면 ffmpeg는 간격을 메우고 목표를 달성하기 위해 프레임을 복제합니다.

초기 지속 시간을 3초로 시작하려면 프레임 속도를 로 변경 1/3하고 선택을 로 변경합니다 lt(mod(t,3),3-floor(t/3)/25). 지속 시간이 감소되는 속도를 제어하려면 25를 변경해야 합니다. 값이 높을수록 느린 속도에서는 지속 시간이 줄어듭니다.

관련 정보