
가장 간단한 슬라이드쇼는 동일한 시간 동안 각 사진이 표시되는 일련의 사진입니다.
또한 시퀀스를 만들고 싶지만 지속 시간과 관련하여 더 복잡합니다.
첫 번째 사진의 지속 시간은 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를 변경해야 합니다. 값이 높을수록 느린 속도에서는 지속 시간이 줄어듭니다.