가장 간단한 슬라이드쇼는 각각 동일한 시간 동안 표시되는 일련의 사진입니다.
또한 시퀀스를 만들고 싶지만 기간 측면에서 더 복잡합니다.
첫 번째 이미지의 지속 시간은 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)'
--> 1초마다 1프레임씩 감소합니다.
setpts=N/25/TB
--> 선택한 프레임의 타임스탬프를 연속적으로 만듭니다. 그렇지 않으면 ffmpeg는 간격을 메우고 목표를 달성하기 위해 프레임을 복사합니다.
초기 지속 시간인 3초부터 시작하려면 프레임 속도를 로 변경 1/3
하고 선택 항목을 로 변경하면 됩니다 lt(mod(t,3),3-floor(t/3)/25)
. 지속 시간이 감소하는 속도를 제어하려면 25를 변경해야 합니다. 값이 높을수록 지속 시간이 더 느린 속도로 줄어듭니다.