개요

동영상 파일로 부터 AI 학습에 사용할 데이터셋을 구축하기 위해 임의의 주기를 주고 프레임 이미지를 추출하고 싶었다. 파이썬 언어등을 사용하여 동영상 파일을 읽고 원하는 주기마다 네이밍 규칙을 정해 이미지 파일을 저장해도 된다. 하지만 ffmpeg를 사용하여 보다 편하게 이를 구현할 수 있다. 활용법을 정리한다.

환경

  • Ubuntu 20.04
  • ffmpeg version 4.2.7

프레임 추출

프레임 이미지 추출은 원하는 구간을 특정 주기로 추출할 수도 있고 전체 구간을 추출할 수도 있다.

영상 전체 추출

아래의 예제는 영상 전체구간에 대하여 1분마다 1장의 이미지를 추출한다.

# ffmpeg -i {input_video} -vf fps={framerate} {file_name}
$ ffmpeg -i input.avi -vf fps=1/60 img_%03d.jpg

결과물의 이미지 파일들은 image_001.jpg, image_002.jpg, image_003.jpg와 같이 세자리의 정수, 채워지지 않은자리는 0으로 채우는 네이밍 규칙을 가지며 이미지 파일을 추출한다.

다음의 예제는 1초에 5장의 이미지를 추출한다.

# ffmpeg -i {input_video} -vf fps={framerate} {file_name}
$ ffmpeg -i input.avi -vf fps=5 img_%05d.jpg

추출 된 이미지는 image_00001.jpg 와 같이 5자리의 정수 순서로 생성된다.

영상 부분 추출

아래의 예제는 영상의 20초 부터 마지막 까지의 이미지를 추출한다.

# ffmpeg -i {input_video} --ss {start_time} -vf fps={framerate} {file_name}
$ ffmpeg -i input.avi -ss 00:00:20 -vf fps=1 img_%03d.jpg

동영상의 20초 구간부터 마지막 구간까지 1초마다 1장의 이미지를 추출한다.

다음의 예제는 영상의 30초부터 1분까지 30초 구간을 추출한다.

# ffmpeg -i {input_video} --ss {start_time} -t {duration} -vf fps={framerate} {file_name}
$ ffmpeg -i input.avi -ss 00:00:30 -t 30 -vf fps=1 img_%03d.jpg

결과물은 동영상의 30초 부터 1분까지의 구간을 1초당 1프레임씩 저장하여 30장의 이미지를 추출한다.

참고링크: ffmpeg - trac wiki: Create a thumbnail image every X seconds of the video

댓글남기기