FFMpeg: 비디오 파일을 비디오의 여러 이미지가 포함된 gif로 변환

FFMpeg: 비디오 파일을 비디오의 여러 이미지가 포함된 gif로 변환

저는 사용자들이 비디오를 업로드할 수 있는 프로젝트를 진행하고 있습니다. FFmpeg를 사용하여 비디오에서 일부 이미지를 가져와서 GIF를 만들 수 있는 방법이 있습니까?

프로젝트가 Java로 작성되었기 때문에 비디오에서 이미지를 가져올 수 있는 방법이 있지만 GIF를 생성하려면 여러 이미지가 필요하고 비용이 많이 듭니다.

서버는 Debian X64 시스템을 실행하고 있으므로 FFMpeg가 적합하지 않은 경우 Linux의 다른 도구를 사용하여 이 작업을 효율적으로 수행할 의향이 있습니다.

답변1

저는 비디오에서 장면을 추출하기 위해 Linux를 사용하고 있습니다 vlc. 그렇지 않은 경우

apt-get install vlc

설치하세요. 설치한 후에는 다음 명령줄의 변형을 사용하여 비디오에서 프레임을 추출할 수 있습니다. 기본 이미지 형식은 png내 목적에 잘 맞는 입니다. 이미지 사용을 고집한다면 이미지 형식 변환 gif설치를 권장합니다 . imagemagick프레임을 추출하는 명령은 다음과 같습니다.

cvlc ${videofile} \
         --video-filter=scene \
         --vout=dummy \
         --start-time=${start-sec} --stop-time=${end-sec} \
         --scene-ratio=1 --scene-prefix=${prefix} \
         --scene-path=${MyStorePath} \
         vlc://quit

어디

videofilemp4 형식의 동영상입니다. 다른 형식도 가능할 수 있지만 테스트되지 않았습니다.

start-sec프레임 캡처를 시작하려는 위치(초)입니다.

end-sec시작 후 몇 초 이내에 프레임 캡처를 끝내려는 위치입니다. 보다 커야합니다start-sec

prefix는 캡처된 이미지 파일 이름의 접두어입니다.

MyStorePath캡처한 이미지를 저장하려는 경로입니다.

이 명령은 비디오 길이를 계산하는 데 도움이 될 수 있습니다.

ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//

출력이 HH:MM:SS.xx포맷되었습니다. 초 단위의 비디오 길이로 변환하려면 다음을 사용합니다.

l=$(ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//)
h=$(echo $l|cut -d: -f1)
m=$(echo $l|cut -d: -f2)
s=$(echo $l|cut -d: -f3|cut -d"." -f1)
(( hh=$h*3600 ))
(( mm=$m*60 ))
(( LengthSeconds=$hh+$mm+$s ))

이 시점에서 LengthSeconds변수를 조작하여 시작 및 종료 시간을 자동으로 결정할 수 있습니다. 불행히도 내 vlc명령이 작동 하려면~ 해야 하다프레임이 추출되는 시간 조각을 지정합니다.

관련 정보