Program/OPEN_CV

[Open CV] OpenCV-Python 기초 사용법 _ 실전코딩

사막여유 2022. 5. 5. 22:01
728x90

 

위 내용은 2개의 동영상을 재생하고 전환할때 애니메이션 효과를 넣는 이펙트에 관한 강의이다.

 

동영상 전환 이펙트에는 많은 기능들이 있는데

페이드 인 , 페이트 아웃 , 디졸브 , 밀기 , 확대 등의 기능들이 있다.

 

위 기능들을 구현하기 위해서 필요한 기능들은

두개의 영상을 동시에 열고

첫번째 동영상의 마지막 몇개의 프레임과 두번째 동영상의 처음 몇개의 프레임을 합성하는 기능

마지막으로 그 영상을 다시 저장하는등의 기능이 필요할 것이다.

 

아래 코드를 보면서 다시 설명하고자 한다.

 


일단 실행폴더에 저장되어있는 video1,2 .mp4 파일을 로드하여 cap1,2 의 변수에 저장시킨 뒤 

예외처리를 해주는 기본적인 코드로 작성되었다.

그리고 두영상의 크기와 FPS는 같다고 가정한다. ( 1280 * 720 / 24fps )

 

그리고 effect_frames 은 약 2초간 이펙트를 만들예정이기 때문에 기존 cap1,2의 프레임 x 2 를 해주었다.

그러면 앞 영상의 맨 뒷부분의 48프레임과 뒷 영상의 맨 앞부분의 48프레임을 합성해주면 되는데 

 

 

전에 배웠던 동영상 저장함수를 사용하여 출력 영상의 객체를 생성해줄 수 있다.

그리고 위에서 작성했다싶이 1번 영상의 마지막 48프레임을 빼준만큼의 for문을 돌려서 frame1이라는 영상을 생성해주고

 

 

그리고 합성을 시작해주는데 위 이미지에는 없지만 간단하게 설명을 하자면

dx 라는 변수에 w라는 현재 비디오 가로픽셀 개수에 아까만들어준 effect_frames라는 이펙트frame을 나눠준다.

그러면 전체 1280의 이미지를 48로 나눠주니까 약27개의 픽셀로 증가하면서 이미지가 보이는 effect가 나올수 있게된다.

 

그리고 컬러영상의 frame을 하나 만들어주고 

frame의 영상의 x 픽셀좌표 0에서 dx까지의 부분에 frame2의 0에서 dx까지의 부분을 합성하고

frame의 영상의 x 픽셀좌표 dx에서 w까지의 부분에 frame1의 dx에서 w까지의 부분을 합성하게 되면

전체화면의 앞부분은 frame2의 앞부분 화면을 합성하고 뒷부분을 frame1부분의 화면을 합성하게되면서

화면 넘김효과를 줄 수 있다.

 

 

이후 만들어진 frame의 영상의 총 영상을 output file로 저장할 수 있다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90