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)'--> 1초마다 1프레임씩 감소합니다.

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

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

관련 정보