FFMpeg : 비디오가 일시 정지된 동안 X초 동안 비디오 위에 이미지나 gif를 오버레이합니다.

FFMpeg : 비디오가 일시 정지된 동안 X초 동안 비디오 위에 이미지나 gif를 오버레이합니다.

내 요구 사항은 다음과 같습니다.

  1. 입력 비디오는 MP4입니다.
  2. 오버레이는 gif 또는 png일 수 있습니다.

오버레이는 타임스탬프에서 입력 비디오 위에 나타나야 합니다. 5초 동안 지속되어야 합니다. GIF인 경우 5초 동안 반복해서 재생되어야 합니다. 오버레이가 나타나는 이 5초 동안 배경 비디오는 일시 중지(오디오 및 비디오 모두)되어야 하며 오버레이가 사라지면 다시 시작되어야 합니다. 오버레이는 0번째 프레임부터 마지막 ​​프레임까지 어디에서나 발생할 수 있습니다.

타임스탬프에 이미지를 삽입하고 해당 타임스탬프에서 프레임을 계산한 다음 사용해 보았지만 loop오디오나 비디오에서 둘 중 하나의 문제가 발생했습니다. 또한 오버레이 시 비디오를 두 부분으로 분할하여 하나에 적용한 다음 병합해 보았습니다.

나는 지난 3일 동안 이 일을 하고 있으며 누군가가 이 명령을 내리는 데 도움을 주기를 바랍니다. 현재로서는 제가 할 수 없는 일이기 때문입니다.

답변1

Uff 이 문제를 해결하는 데 몇 시간이 걸렸습니다. @Баяр Гончикжапов의 의견과 이 주제의 답변이 도움이 되었습니다.https://stackoverflow.com/questions/43414641/repeat-last-frame-in-video-using-ffmpeg

오버레이 전에 부품에 tpad 필터를 사용해야 원하는 만큼 해당 부품의 마지막 프레임을 일시 중지할 수 있습니다. 다음으로 비디오가 일시 정지되고 패드 필터로 오버레이를 표시하는 동안 추가 시간을 보상하기 위해 파트 1의 오디오를 패딩합니다.

계속해서 비디오 부분 + 오디오 부분에 접촉하고 결과 비디오에 오버레이를 적용합니다.

예를 들어 30초짜리 파트 1을 사용한 다음 오버레이로 5초 동안 일시 중지하고 파트 2에서도 30초를 사용하겠습니다.

PNG 이미지의 경우:

ffmpeg -reinit_filter 0 -t 30 -i "input.mkv" -ss 30 -t 30 -i "input.mkv" -t 35 -i apple.png -map_metadata -1 -filter_complex "[0]tpad=stop_mode=clone:stop_duration=5,setpts=PTS-STARTPTS[Part1];[0]aselect='between(t,0,30)',apad=pad_dur=5[Audio1];[1]aselect='between(t,0,30)'[Audio2];[Part1][Audio1][1][Audio2]concat=n=2:v=1:a=1[vid];[vid][2]overlay=x=W-w:y=10:enable='between(t,30,35)'[vid]" -map [vid] -c:v libx264 -c:a aac "output_png.mp4"

GIF 이미지의 경우:

ffmpeg -reinit_filter 0 -t 30 -i "input.mkv" -ss 30 -t 30 -i "input.mkv" -t 35 -stream_loop -1 -i horse.gif -map_metadata -1 -filter_complex "[0]tpad=stop_mode=clone:stop_duration=5,setpts=PTS-STARTPTS[Part1];[0]aselect='between(t,0,30)',apad=pad_dur=5[Audio1];[1]aselect='between(t,0,30)'[Audio2];[Part1][Audio1][1][Audio2]concat=n=2:v=1:a=1[vid];[vid][2]overlay=x=W-w:y=10:enable='between(t,30,35)'[vid]" -map [vid] -c:v libx264 -c:a aac "output_gif.mp4"

관련 정보