본문 바로가기
기타 끄적,끄적

[펌]Video에서 Frame (image) 추출하기

by N2info 2019. 12. 5.

출처 : https://dev-jm.tistory.com/44

다량의 이미지 데이터를 얻기 위해 영상을 통해 frame단위로 이미지를 추출할 수 있다.

가령, 실제 video데이터를 사용하는 경우도 있을 것이고, 직접 데이터를 수집하는 과정에서 영상을 통해 다각도로 대상 객체를 녹화한 뒤 해당 영상에서 frame을 추출할 수 있을 것이다.

여러 툴이 있지만 커맨드라인을 통한 수행을 지원하는 VLC를 이용하겠다.


https://www.videolan.org/vlc/download-windows.html

 

Download official VLC media player for Windows - VideoLAN

VLC는 DVD, 오디오 CD, VCD 와 다양한 스트리밍 프로토콜뿐 아니라 대부분의 멀티미디어 파일을 재생할 수 있는 무료 오픈 소스 크로스 플랫폼 멀티미디어 재생기이자 프레임워크입니다. VLC는 대부분의 멀티미디어 파일과 다양한 스트리밍 프로토콜을 재생할 수 있는 무료 오픈 소스 크로스 플랫폼 멀티미디어 재생기이자 프레임워크입니다.

www.videolan.org

해당 사이트에서 사용하는 OS에 맞는 파일을 다운

 


크게 두 가지 방식이 있다. GUI환경에서 직접 영상을 재생시키는 방법과 커맨드 라인을 활용한방식이 있다.

GUI 환경

설치가 완료된후 VLC프로그램을 킨 상태에서 ctrl + p 를 눌러 환경설정을 들어가면 위와 같은 창이 뜬다.

설정보기를 전체로 변경

 

변경된 설정창에 왼쪽 사이드바에 비디오->필터-> 장면필터 클릭

이미지 형식 지정 (디폴트는 PNG로 되어있다.)

폴더 경로 접두사 : 저장할 경로 지정

이미지 너비, 높이 지정 : 리사이징 ( -1로 지정하면 원본 영상의 사이즈와 동일한 비율로 들어가게 된다.)

녹화비율 지정

여기서 녹화비율은 몇 Frame당 이미지를 추출할지를 의미한다.

가령, 30프레임의 영상에서 녹화 비율을 90으로 주게 되면, 영상에서 3초에 1frame씩 추출될 것이다.

frame 확인은 윈도우의 경우 속성창을 통해 확인할 수 있다.

 

혹은 VLC로 해당 영상을 실행한 후에 ctrl+j를 눌러 확인할 수도 있다.

 

 

 

기본 설정을 마친후에 상위 범주인인 필터로 이동후에 장면 비디오 필터를 체크하고 저장하면 모든 설정이 완료된다.

 

이후 임의의 영상을 실행하면 자동적으로 위에서 지정한 경로에 frame이 추출되어 저장된다.

실제 영상이 실행된 프레임을 카운팅하여 저장이 되기 때문에 속도를 최대로 올리고 수행하는 것이 편하다. ( ']'버튼 으로 속도 조절 가능) 

 


커맨드 라인 기반

vlc.exe 파일이 있는 위치로 cmd창에서 이동하여 아래의 명령어를 입력하면, 빠르게 수행할 수 있다.

vlc.exe "추출할 영상 경로" --rate=10.0 --video-filter=scene --start-time=500 --stop-time=600 --scene-ratio=10 --scene-path="저장할 경로" vlc://quit

rate 옵션은 재생 속도로 디폴트는 1.0인데, 여기서 10.0은 10배속을 의미한다. 에러가 나지 않는 범주한에서 속도를 빠르게 조절하는 것이 좋다. 실제 GUI창에서는 4.0속도가 최대지만, 명령어로 수행할때는 딱히 제한이 없어보인다.

뒤에 따라 나오는 명령어들은 영상 구간과 frame 비율을 지정한다.

이후에 vlc://quit는 자동적으로 영상 재생이 완료되었을때 종료하게 해준다.

위 명령어는 공식 documentation (아래 주소)을 참고하여 작성했다.

여러 필터(tilting, blur, mirror 등) 옵션을 지원하여 사전에 augmenting 작업을 별도의 라이브러리 없이 명령어를 주어 수행할 수 있을것 같다.

https://wiki.videolan.org/Documentation:Documentation