개요
지피터스 AI캠프에서 멤버들의 사례발표를, 발표마다 컷편집하고자 함 → 추후 게시글에 영상을 삽입하거나, 베스트 발표만 영상 모아서 제공하거나 하기 위함
줌에서 화면공유하는 시점을 기준으로 타임라인 구간을 생성하고, 이를 기준으로 컷편집을 해볼 수 있지 않을까?
이전까지 시도했던 방법
서포터들에게 발표자 시간체크를 기록해달라고 부탁 + 해당 시간 기준으로 컷편집 시도 → 서포터 10명 중 1명이 해주셔서 실패
서포터들에게 발표 순서만이라도 기록해달라고 부탁 + 콘텐츠팀이 영상을 보고 화면공유되는 시점을 수동으로 타임라인 기재하여 컷편집 시도 → 발표 순서대로 기록하는 것은 서포 터 10명 중 4명이 해주셔서 실패
💡여기서 얻은 인사이트
이건 무조건 줌 기록이 저장되면 자동으로 타임라인이 생성되도록 해야한다. 서포터분들께 요청드리기에는 변수가 많다.
처음 시도
줌 API에서 제공하는 파일 중, ‘화면공유’ 이벤트의 시각을 제공하는 게 있지 않을까?
결론 : 줌 API에서 제공하는 기록 파일의 종류에는 없음. timeline 파일을 기대했으나.. 말을 한 사람(줌 화면에 초록색 뜨는 사람) 시각과 유저정보만 나옴.
{
"ts" : "00:14:29.400",
"users" :
[
{
"email_address" : "[email protected]",
"username" : "GPTers"
}
]
},
{
"ts" : "00:14:33.900",
"users" :
[
{
"email_address" : "[email protected]",
"username" : "GPTers"
}
]
},
...
새로운 시도
줌 기록 중 shared_screen.mp4 라는 파일을 받을 수 있음. 화면공유된 부분만 녹화되고, 화면공유가 꺼진 부분은 검정화면 처리가 되는 영상. → 검정 화면을 기준으로 화면 공유 시작/끝을 판단해볼 수 있지 않을까?
시도 과정..
시도 1
지피티에게 줌 기록 화면 전환을 기준삼아 타임라인을 만들고 컷편집해주는 코드를 짜달라고 한다
지피티가 알려준 방법 → 특정 임계값을 기준으로 화면을 쪼개서 이전화면과 비교하여 차이가 큰 것을 기준으로 삼기
결과 → 몹쓸 것을 만들었습니다.
아무래도 너무 많이 쪼개서 → 멤버가 화면공유 하는 동안에도 이런저런 화면을 보여주는데, 그 화면이 다 타임라인으로 생성된 것 같음.
시도2
임계값과 프레임 간격을 조정하여 다시 시도
결과 → 18000개의 영상이 생겼어요. 😂
정확하게 얼굴/화면공유 나누는 기준을 찾을 수가 있는지 모르겠어요. (그와중에 은철님 영상으로 했더닠ㅋㅋㅋㅋㅋㅋㅋ 내 컴퓨터에 은철님 얼굴 18000개)
여러 시도 끝에 시도 N..
결과 → 검은화면 포함해서 나옴
원본과 비교해보진 않았지만.. 거의 가까워진 것 같고..
드디어 성공과정입니다!
접근
shared_screen.mp4 영상은 화면만 보여지고, 공유 안할 때는 까만화면
까만 화면을 기준으로 [타임라인] 생성 (까만화면 끝 ~ 다음까만화면 시작 => 1번의 발표로 간주)
그러나 공유했다가 잠깐 껐다가 다시 공유하는 등- 같은 발화자가 반복해서 화면공유하는 경우 발생
timeline.json 파일을 넣고, 각 [타임라인] 구간별로 가장 발화를 많이 하는 사람을 추출
연속된 구간에서 같은 발화자면 -> [타임라인]을 합치기
새롭게 추출한 [타임라인] 을 넣고, 그 기준으로 컷편집하여 파일 저장
이때, 파일명은 발화자명으로 함
(참고) shared_screen.mp4 영상 → 중간중간 검정색 화면을 확인할 수 있음
1차 결과
shared_screen.mp4 파일과, timeline.json 파일만 다운받아서 파이썬 돌리면,
하위 폴더에 영상파일명과 동일한 폴더가 생기고
그 아래에 컷편집된 영상이, 발화자명이 파일명인 상태로 타임라인 순서대로 저장이 됨.
중간 수정
문제 - shared_screen.mp4 파일로 컷편집을 하니, 합쳐진 두 구간 중간에는 까만화면이 나오는 문제
해결 - shared_screen_with_gallery_view.mp4 파일로 최종 컷편집을 하도록 수정
최종 결과
shared_screen.mp4
shared_screen_with_gallery_view.mp4
timeline.json
위 파일들을 한 곳에 넣고 python 파일 실행!
## 콘솔 출력
검은 화면 감지 중...
초기 타임라인:
구간 1 | 00:02:36~00:15:40
구간 2 | 00:15:51~00:26:52
구간 3 | 00:27:09~00:36:37
구간 4 | 00:41:38~00:57:35
구간 5 | 00:57:38~01:04:49
구간 6 | 01:05:37~01:05:50
구간 7 | 01:08:00~01:13:21
구간 8 | 01:15:16~01:16:06
**초기 타임라인 중 발화량 많은 사람 찾기...**
초기 타임라인 및 발화자:
구간 1 | 00:02:36~00:15:40 | GPTers
구간 2 | 00:15:51~00:26:52 | 정정민 | 허깅페이스 | 파트너
구간 3 | 00:27:09~00:36:37 | DECK|미드저니|파트너
구간 4 | 00:41:38~00:57:35 | 지피터스 | 문과생도AI | 박정기 파트너
구간 5 | 00:57:38~01:04:49 | Byung Chan Choi
구간 6 | 01:05:37~01:05:50 | Byung Chan Choi
구간 7 | 01:08:00~01:13:21 | 샘호트만 | 1인개발 | 파트너
구간 8 | 01:15:16~01:16:06 | 샘호트만 | 1인개발 | 파트너
**연속된 구간에 같은 발화자인 경우, 두 구간을 합치기...**
최종 타임라인 및 발화자:
구간 1 | 00:02:36~00:15:40 | GPTers
구간 2 | 00:15:51~00:26:52 | 정정민 | 허깅페이스 | 파트너
구간 3 | 00:27:09~00:36:37 | DECK|미드저니|파트너
구간 4 | 00:41:38~00:57:35 | 지피터스 | 문과생도AI | 박정기 파트너
구간 5 | 00:57:38~01:05:50 | Byung Chan Choi
구간 6 | 01:08:00~01:16:06 | 샘호트만 | 1인개발 | 파트너
**나눠진 타임라인에 맞게 비디오 자르기...**
shared_screen_with_gallery_view/1번_GPTers.mp4
shared_screen_with_gallery_view/2번_정정민 _ 허깅페이스 _ 파트너.mp4
shared_screen_with_gallery_view/3번_DECK_미드저니_파트너.mp4
shared_screen_with_gallery_view/4번_지피터스 _ 문과생도AI _ 박정기 파트너.mp4
shared_screen_with_gallery_view/5번_Byung Chan Choi.mp4
shared_screen_with_gallery_view/6번_샘호트만 _ 1인개발 _ 파트너.mp4
중간에 마주한 문제 1 - 분명 7개 구간으로 잘라줬는데, 영상은 자꾸 6개만 나옴
원인
미또님 이름에 슬래시가 있어서, 파일로 저장할 때 파일명 오류가 남
파일명에 사용할 수 없는 문자를 _로 대체하는 함수를 지피티가 넣어주었고, 해결됨
중간에 마주한 문제 2 - A의 화면공유를 B가 강제 종료 후 공유하면 검은 화면이 생기지 않음
1주차 수요일 발표영상 → 잘 됐는데, 윤스케어님 뒤에 허세임님이 공유할 때 화면공유를 끄지않고 바로 공유를 시작해서(검은화면이 없었음) 둘이 붙어버림
이건 줌 설정에서 A공유화면을 B가 강제로 새로 공유할 수 없도록 설정을 할 수가 있어서, 해결이 가능
중간에 마주한 문제 3 - 타임라인 파일 주고, 발화량 많은 순으로 뱉어달라고 했는데 지피티가 멍청
그래서 다음과 같이 차근차근 요청했음 → 그랬더니 똑똑하게 뱉어줌
이거 구간으로 구분해서, 그 사이에 발화한 사람들을 리스트업해줘
구간 | 발화자(횟수), 발화자(횟수)...
---
각 구간의 발화량이 가장 많은 사람만 선택해줘
구간 | 발화량 가장 많은 사람 이름
---
자 차근차근 해보자
나는 각 구간에서 발화량이 가장 많은 사람들이 연속으로 붙어있으면, 1개의 구간으로 합치고 싶어
---
자 지금까지 한 작업을 파이썬코드로 줄래?
타임라인 json 파일과 구간을 입력받아서 최종 구간합치기까지
(6/19 추가1) 발표 다 하고 화면공유 껐다가, 피드백 받으려고 다시 화면 공유켰을 때 → 파트너 발화량이 가장 많아(피드백 하느라) 파트너 이름으로 구간이 설정되는 문제를 발견
구간 1 | 00:08:28~00:34:44 | DECK | 미드저니 | 파트너
구간 2 | 00:35:20~00:40:08 | 심준섭(심포도) | 변호사
구간 3 | 00:40:25~00:42:32 | DECK | 미드저니 | 파트너
구간 4 | 00:43:31~00:54:29 | 양귀비(포삐양)
구간 5 | 00:54:42~01:01:57 | 박승현 | 임팩트 | 청강
구간 6 | 01:10:58~01:13:42 | 윤혜영
구간 7 | 01:15:17~01:25:18 | 여행가J
구간 8 | 01:29:43~02:12:47 | DECK | 미드저니 | 파트너
여기서 구간 2와 3은 합쳐져야 함.
구간 3 : DECK님이 발표하는 게 아니라, 이런 상황입니다.
구간 2 | 심준섭님 발표 끝난 후 화면 끔
구간 3 | 파트너가 피드백 준다고 다시 켜라고 함. 그리고 파트너가 피드백 함. → 파트너 발화량이 가장 많음
이 상황 => 구간2와 구간3이 합쳐져야 함.
## 프롬프트
구간 7은 맨 마지막구간이니까 '파트너'가 들어가도 무시해
근데 구간 4는 첫구간도, 마지막 구간도 아닌데 중간에 '파트너' 가 들어간 구간이잖아?
이런 경우를 찾아서, 바로 직전(지금 상황에서는 구간 3)과 타임라인을 햡쳐줘야 해
(6/19 추가2) 화면공유가 진행되는 동안, 발표자의 발화보다 파트너의 피드백이 더 많은 경우 → 파트너 이름으로 구간이 설정되는 문제를 발견
성공 😂
중간에 지피티가 자꾸 멍청해져서… 잘 안해주길래, 새로 스레드를 열어서 다시 요청했습니다.
이 때 ‘코드 수정을 전체적으로 보고 해줘’ 라고 했습니다. 왠지 함수 부분부분만 수정해주는 것 같아서, 전체 코드에 반영되지 못하는 것 같더라고요. 이렇게 새로운 스레드에서 위와 같이 명령하니, 한 번에 해줬습니다!!
‘가장 첫번째 구간과 마지막구간을 제외한 나머지 구간에서,‘ → 이걸 빼먹어서 다시 요청 ㅎㅎㅎ
이걸 빼는 이유 : 첫번째나 마지막 구간은 파트너가 먼저 뭔가를 설명하거나, 특강을 추가로 하는 경우가 있으므로, 제외하면 안됨!!
가장 첫번째 구간과 마지막구간을 제외한 나머지 구간에서,
만약 가장 발화량이 많은 사람 이름에 '파트너'가 들어갔으면, 그 사람은 제외하고, 2번째 발화량이 많은 사람을 '최종 타임라인 및 발화자'에 넣어줘
이렇게 다시 코드를 수정해줄 수 있니?
찐찐 결과!
연속된 구간에 같은 발화자인 경우, 두 구간을 합치기...
이 때 다음 2가지 조건을 반영하기
1번째 구간과 마지막 구간을 제외한 나머지 구간에서,
1) 가장 많이 발화한 사람이 파트너인 경우, 2번째 발화량이 많은 사람을 선택하기
2) 파트너가 발화자인 경우 직전 구간과 합쳐주기(이전 발표자에게 파트너가 피드백 주는 구간이므로)
실제로 어제 진행된 발표 순서와 최종 결과 확인!! → 맞음!
마지막 파트너 특강이 7번에 포함됨!
(6/20 추가3) 발화량 많은 상위 2명을 갖고 판단하는데, 해당 구간 발화자 1명 또는 0명인 경우, 에러 발생
또 지피티에게 물어본다 ㅋㅋㅋㅋㅋㅋㅋ
여기서 발화량 많은 사람 찾기 할 때 상위 2명을 불러오게 하는데, 해당 구간에 발화자가 오직 1명 뿐이거나, 아예 없는 경우에 에러가 나
1) 발화자가 오직 1명 뿐인 경우 -> 그 발화자로 선택하기
2) 발화자가 0명인 경우 -> 해당 구간은 의미없는 구간이므로 구간 자체를 지우기
뱉어주면 또 그.대.로. 복붙~
(6/20 추가 4)
1번 이슈 - 공동파트너가 있는 경우, 한 구간에서 가장 많이 발화한 2명이 둘 다 ‘파트너’인 경우 누굴 선택해야 하는지 모르는 문제 → 이 경우 가장 많이 발화한 사람으로 택하도록 하기
2번 이슈 - 파트너가 중간 구간에서 발표를 하는 경우가 있었음.. → 5분 넘어가면 이전 발표자에게 주는 피드백이 아니라, 파트너의 사례발표로 간주하기
참,, 정말 여러 변수들이 생기네요…….. 으아아악!!!!!!!!!!!!!!!!! 😭
지피티에게 다시 요청합니다.