ffmpeg로 동영상의 움직이는 GIF 썸네일을 추출하는 방법
ffmpeg로 동영상의 움직이는 썸네일 만들기
동영상에서 특징적인 정적 썸네일들 추출
ffmpeg -y -ss 3 -i <input_video_path> -vf 'select=gt(scene\\,0.1)' -frames:v 10 -vsync vfr -vf fps=fps=1/200 <output_images_path_with_format>
- ffmpeg : ffmpeg를 통해 추출합니다.
- -y : 출력 파일(
<output_images_path_with_format>
)이 이미 존재해도 묻지 않고 덮어씁니다. - -ss 3 : 동영상의 3초 위치로 이동하여 이후 부터 추출 작업을 진행합니다. (= 3초 이전을 무시합니다.)
- -i
<input_video_path>
: 입력 비디오로<input_video_path>
를 사용합니다. - -vf ‘select=gt(scene\,0.1)’ : 장면 감지 점수 (화면 변화)가 0.1 (=10%) 이상인 프레임을 선택하는 비디오 필터를 적용합니다.
- -frames:v 10 : 최대 10장의 프레임을 출력합니다.
- -vsync vfr : 가변 프레임 동영상에서 같은 시간에 중복되는 프레임이 없도록 비디오를 동기화합니다.
- fps=fps=1/200 : 200초마다 한 프레임씩 선별하여 추출을 시도합니다.
- <output_images_path_with_format> : 출력 이미지 파일의 경로. C언어 스타일의 포매팅 구문을 사용할 수 있습니다. 예를 들어
img%03d.jpg
의 경우img001.jpg
,img002.jpg
… 와 같이 출력됩니다.
추출한 썸네일을 gif로 인코딩
ffmpeg -y -f image2 -i <output_images_path_with_format> -framerate 1 -vf scale=480:-1:flags=lanczos,setpts=8*PTS <output_gif_path>
위와 중복되는 옵션은 생략합니다.
- -f image2 : image2 demuxer을 사용하여 여러 이미지를 입력받습니다.
- -i <output_images_path_with_format> : 입력 이미지들의 경로. 위의
<output_images_path_with_format>
와 동일합니다. - -framerate 1 : 출력 GIF 이미지의 프레임율로 1을 지정합니다.
- -vf scale=480:-1:flags=lanczos,setpts=8*PTS : 출력 이미지의 크기를 긴 변 480픽셀 크기로 조절하고 이때 lanccoz 필터를 통해 크기 조절을 수행합니다. 또한 PTS (Presentation Time Stamp)를 기존의 8배로 늘려 GIF의 속도를 적절히 느리게 설정합니다.