diff --git a/src/test/resources/shortform/opal-output-sample.txt b/src/test/resources/shortform/opal-output-sample.txt new file mode 100644 index 0000000..47c6c4d --- /dev/null +++ b/src/test/resources/shortform/opal-output-sample.txt @@ -0,0 +1,448 @@ +1================================================ ```json +{ +"url": "https://www.youtube.com/watch?v=kYJ6gVbX680", +"title_top": "프나 신보 감상평", +"title_main": "극락 가는 앨범입니다", +"channel": "@MerryGoRound_Official", +"cuts": [ +{ +"start": "14:28.000", +"end": "14:33.000", +"bottom": "1번 트랙부터 10번 트랙까지 듣잖아요?\n극락 가세요", +"effect": "(자신감 뿜뿜)" +}, +{ +"start": "14:33.000", +"end": "14:35.500", +"bottom": "아 극락 갑니까?\n네!", +"effect": "(빵터짐)" +}, +{ +"start": "14:36.000", +"end": "14:39.000", +"bottom": "저도 극락행 티켓 한 장이요\n살게요 살게요", +"effect": "(나도 나도)" +}, +{ +"start": "14:44.000", +"end": "14:46.500", +"bottom": "내친김에 콘서트도..?\n그것도 꼭꼭 약속", +"effect": "(영업 성공)" +}, +{ +"start": "14:46.500", +"end": "14:51.000", +"bottom": "콘서트에 여자의 악마 왔대!", +"effect": "(폭소)" +}, +{ +"start": "15:39.000", +"end": "15:45.000", +"bottom": "저희가 너무 좋아도\n팬분들이 싫어할 것 같다 하면 빼고", +"effect": "(팬사랑 최고)" +}, +{ +"start": "15:48.000", +"end": "15:51.000", +"bottom": "프로미스나인 팬은 정말 좋겠다", +"effect": "(부러움 가득)" +}, +{ +"start": "15:51.000", +"end": "15:54.000", +"bottom": "잘해줄게", +"effect": "(심쿵 플러팅)" +}, +{ +"start": "15:56.000", +"end": "15:59.000", +"bottom": "이 분은 왜 진심으로 부러워하세요", +"effect": "(팩폭)" +}, +{ +"start": "16:00.000", +"end": "16:03.500", +"bottom": "근데 유닛으로 이렇게 나눴지만\n유닛 명이 따로 있나?", +"effect": "(궁금)" +}, +{ +"start": "16:04.000", +"end": "16:08.000", +"bottom": "그냥 없는데 저희끼리는 채나지", +"effect": "(채나지?)" +}, +{ +"start": "16:08.500", +"end": "16:11.500", +"bottom": "어 근데 다 너무 예쁘다\n채나지도 예쁘고 하지도 예쁘고", +"effect": "(오 정말?)" +}, +{ +"start": "16:11.500", +"end": "16:15.000", +"bottom": "안녕하세요 하지입니다~", +"effect": "(인사봇)" +} +] +} + +📌 타이틀 후보 5선 +1. 상단: 프나 신보 감상평 / 메인: 극락 가는 앨범입니다 — [어그로형] +2. 상단: 오직 팬 생각뿐 / 메인: 팬들이 싫어하면 빼요 — [감동형] +3. 상단: 유닛명 비하인드 / 메인: 안녕하세요 하지입니다 — [유머형] +4. 상단: 10년 차 아이돌 / 메인: 팬사랑 폼 미쳤다 — [바이럴형] +5. 상단: 프미스나인 컴백 / 메인: 노래 맛집의 플러팅 — [클릭유도형] + +⏱️ 컷 길이 검산표 +컷 1: 14:28.000 → 14:33.000 = 5.0초 +컷 2: 14:33.000 → 14:35.500 = 2.5초 +컷 3: 14:36.000 → 14:39.000 = 3.0초 +컷 4: 14:44.000 → 14:46.500 = 2.5초 +컷 5: 14:46.500 → 14:51.000 = 4.5초 +컷 6: 15:39.000 → 15:45.000 = 6.0초 +컷 7: 15:48.000 → 15:51.000 = 3.0초 +컷 8: 15:51.000 → 15:54.000 = 3.0초 +컷 9: 15:56.000 → 15:59.000 = 3.0초 +컷 10: 16:00.000 → 16:03.500 = 3.5초 +컷 11: 16:04.000 → 16:08.000 = 4.0초 +컷 12: 16:08.500 → 16:11.500 = 3.0초 +컷 13: 16:11.500 → 16:15.000 = 3.5초 +───────────────────── +총 13컷 / 총 길이: 46.5초 +2================================================ +```json +{ + "url": "https://www.youtube.com/watch?v=k-a2Wd7F7Q8", + "title_top": "과자 깠다고 칭찬?", + "title_main": "숨막히는 프나 칭찬 지옥", + "channel": "@MerryGoRound_official", + "cuts": [ + { + "start": "21:25.000", + "end": "21:32.000", + "bottom": "우와 너 멋있다\n그걸 깠어?", + "effect": "(무한 칭찬)" + }, + { + "start": "21:37.500", + "end": "21:42.500", + "bottom": "나 이거 혼자 깠어", + "effect": "(어깨 으쓱)" + }, + { + "start": "21:51.000", + "end": "21:57.000", + "bottom": "웃으면 안 돼요\n보아하니 제일 큰 벌칙이에요", + "effect": "(제일 힘듦)" + }, + { + "start": "22:07.500", + "end": "22:14.500", + "bottom": "나경아 너 오늘\n코에 점 되게 섹시하다", + "effect": "(느끼한 톤)" + }, + { + "start": "22:14.500", + "end": "22:19.500", + "bottom": "아 미치겠다 진짜", + "effect": "(빵 터짐)" + }, + { + "start": "22:24.000", + "end": "22:30.500", + "bottom": "칭찬받아서 웃긴 게 아니라\n톤이 웃기잖아요", + "effect": "(급발진)" + }, + { + "start": "22:37.500", + "end": "22:41.500", + "bottom": "챙아 아까부터 느꼈는데", + "effect": "(진지)" + }, + { + "start": "22:42.500", + "end": "22:49.500", + "bottom": "오늘 옷 너무 잘 어울린다\n섹시해", + "effect": "(결국 함박웃음)" + } + ] +} + +📌 타이틀 후보 5선 + +상단: 과자 깠다고 칭찬? / 메인: 숨막히는 프나 칭찬 지옥 — [바이럴형] +상단: 코에 점이 섹시해 / 메인: 웃음 참기 TMI 칭찬 — [어그로형] +상단: 유인나도 빵터진 / 메인: 프로미스나인 유치찬란 — [클릭유도형] +상단: 과자 까면 영웅 됨 / 메인: 프나의 이상한 칭찬법 — [바이럴형] +상단: 마의 구간 코 점 / 메인: 웃으면 안되는 칭찬 릴레이 — [어그로형] + +⏱️ 컷 길이 검산표 +컷 1: 21:25.000 → 21:32.000 = 7.0초 +컷 2: 21:37.500 → 21:42.500 = 5.0초 +컷 3: 21:51.000 → 21:57.000 = 6.0초 +컷 4: 22:07.500 → 22:14.500 = 7.0초 +컷 5: 22:14.500 → 22:19.500 = 5.0초 +컷 6: 22:24.000 → 22:30.500 = 6.5초 +컷 7: 22:37.500 → 22:41.500 = 4.0초 +컷 8: 22:42.500 → 22:49.500 = 7.0초 +───────────────────── +총 8컷 / 총 길이: 47.5초 +3================================================ +{ + "url": "", + "title_top": "프나 유치찬란 상황극", + "title_main": "35만 원인데 그거 짭이다", + "channel": "", + "cuts": [ + { + "start": "26:13.000", + "end": "26:18.500", + "bottom": "이거 35만 원인데 그거 짭이다\n저는 이 끈이랑 목걸이만 말한 거궁", + "effect": "(순살 멘트)" + }, + { + "start": "24:46.000", + "end": "24:51.200", + "bottom": "음~\n나경 씨가 찐 맛 평가단이네", + "effect": "(진지한 미식가)" + }, + { + "start": "24:51.200", + "end": "24:55.800", + "bottom": "저도 맛있는데 맛 표현을 못 해요\n표정만 보면 미슐랭 평가단인데!", + "effect": "(미슐랭 쓰리스타 급)" + }, + { + "start": "25:05.000", + "end": "25:11.800", + "bottom": "너 오늘 코에 점 되게 섹시하다\n칭찬 받아서 웃긴 게 아니라 톤이", + "effect": "(플러팅 공격)" + }, + { + "start": "25:13.200", + "end": "25:18.000", + "bottom": "오늘 옷 너무 잘 어울린다 섹시해\n이렇게 하는 거 맞아요?", + "effect": "(영혼 없는 칭찬)" + }, + { + "start": "25:56.500", + "end": "26:04.500", + "bottom": "오늘 렌즈 색깔 좀 톤그로다\n아니 그걸 왜 이제 얘기해줘 진짜로!", + "effect": "(매운맛 비난)" + }, + { + "start": "26:04.500", + "end": "26:08.500", + "bottom": "무슨 소리야 진짜 잘 맞아!!", + "effect": "(발끈)" + }, + { + "start": "26:09.500", + "end": "26:13.000", + "bottom": "아니 어디서 얼마에 샀냐구용\n나는 3만 9천 원에 샀다 왜요!", + "effect": "(티키타카)" + }, + { + "start": "26:18.500", + "end": "26:22.500", + "bottom": "제 생각엔 제가 짭인 것 같아요\n두 분 다 과소비가 심하네!", + "effect": "(빠른 패배 인정)" + }, + { + "start": "26:24.000", + "end": "26:30.500", + "bottom": "텐션 미쳤다 셋이서 오예~ 오예~\n오예! 오예!", + "effect": "(대환장 파티)" + } + ] +} + +📌 타이틀 후보 5선 + +상단: 프나 유치찬란 상황극 / 메인: 35만 원인데 그거 짭이다 — [어그로형] +상단: 웃음 참고 칭찬하기 / 메인: 코에 점 되게 섹시하다 — [바이럴형] +상단: 프로미스나인 매운맛 / 메인: 오늘 렌즈 색깔 톤그로다 — [바이럴형] +상단: 과몰입 장인 프로미스나인 / 메인: 제발 그만해 너무 유치해 — [클릭유도형] +상단: 미슐랭 미식가 나경 / 메인: 표정에서 드러나는 맛 평가 — [클릭유도형] + +⏱️ 컷 길이 검산표 +컷 1: 26:13.000 → 26:18.500 = 5.5초 +컷 2: 24:46.000 → 24:51.200 = 5.2초 +컷 3: 24:51.200 → 24:55.800 = 4.6초 +컷 4: 25:05.000 → 25:11.800 = 6.8초 +컷 5: 25:13.200 → 25:18.000 = 4.8초 +컷 6: 25:56.500 → 26:04.500 = 8.0초 +컷 7: 26:04.500 → 26:08.500 = 4.0초 +컷 8: 26:09.500 → 26:13.000 = 3.5초 +컷 9: 26:18.500 → 26:22.500 = 4.0초 +컷 10: 26:24.000 → 26:30.500 = 6.5초 +───────────────────── +총 10컷 / 총 길이: 52.9초 +4================================================ +{ + "url": "", + "title_top": "프미나 미식가", + "title_main": "손동작 킹받는 과자 리뷰", + "channel": "", + "cuts": [ + { + "start": "29:24.000", + "end": "29:32.500", + "bottom": "신중하게 좀 드시다가\n음~ 음 손동작 킹받아", + "effect": "(미식가 포스)" + }, + { + "start": "29:09.000", + "end": "29:17.500", + "bottom": "세 봉지 연속으로 먹을 수 있어\n무조건 음~ 음! 오오!", + "effect": "(폭풍 흡입)" + }, + { + "start": "29:40.000", + "end": "29:48.000", + "bottom": "글씨를 보고 좀 겁먹었거든요\n근데 그렇게 맵지 않아요", + "effect": "(맵찔이도 가능)" + }, + { + "start": "30:08.500", + "end": "30:15.500", + "bottom": "저희 팀 대표 맵찔이인데\n마지노선 정말 맛있는 매운맛", + "effect": "(맵찔이 인증)" + }, + { + "start": "30:29.500", + "end": "30:36.500", + "bottom": "신기한 게 치즈 그림이 있잖아요\n진짜 로제에 치즈 올린 맛이 나요", + "effect": "(완벽 재현)" + }, + { + "start": "30:43.500", + "end": "30:52.000", + "bottom": "성분표를 보고 있습니다\n나경 씨는 제가 봤을 때 미식가예요", + "effect": "(냉철한 분석)" + } + ] +} + +📌 타이틀 후보 5선 + +상단: 프미나 미식가 / 메인: 손동작 킹받는 과자 리뷰 — [바이럴형] +상단: 세 봉지 순삭 / 메인: 맵찔이도 반한 포테토칩 — [클릭유도형] +상단: 로제 치즈맛 완벽 / 메인: 엽떡 로제맛 과자의 정체 — [어그로형] +상단: 성분표 분석까지 / 메인: 과자 리뷰에 진심인 아이돌 — [바이럴형] +상단: 맵찔이 마지노선 / 메인: 맛있게 매운 신상 과자 먹방 — [클릭유도형] + +⏱️ 컷 길이 검산표 +컷 1: 29:24.000 → 29:32.500 = 8.5초 +컷 2: 29:09.000 → 29:17.500 = 8.5초 +컷 3: 29:40.000 → 29:48.000 = 8.0초 +컷 4: 30:08.500 → 30:15.500 = 7.0초 +컷 5: 30:29.500 → 30:36.500 = 7.0초 +컷 6: 30:43.500 → 30:52.000 = 8.5초 +───────────────────── +총 6컷 / 총 길이: 47.5초 +5================================================ +{ + "url": "https://www.youtube.com/watch?v=비공개_혹은_알수없는_ID", + "title_top": "맑은 눈의 광기", + "title_main": "차분하게 팩폭하는 나경", + "channel": "", + "cuts": [ + { + "start": "31:26.500", + "end": "31:30.000", + "bottom": "같이 점심을 먹으려는데\n각자 먹고 싶은 메뉴가 다르다", + "effect": "(상황극 시작)" + }, + { + "start": "31:56.500", + "end": "32:00.000", + "bottom": "저는 삼겹살", + "effect": "(최애 메뉴)" + }, + { + "start": "32:01.500", + "end": "32:06.000", + "bottom": "나는 어린이 돈가스\n이 집 어린이 돈가스가 진짜 맛있어", + "effect": "(뜬금포)" + }, + { + "start": "32:08.500", + "end": "32:14.500", + "bottom": "여긴 삼겹살 전문점인데?\n- 여기 간판 조만간 바뀔걸?", + "effect": "(아무말 우기기)" + }, + { + "start": "32:17.500", + "end": "32:20.500", + "bottom": "차라리 나중에\n돈가스 전문점 가서 먹는 거 어때?", + "effect": "(차분한 타격)" + }, + { + "start": "32:20.500", + "end": "32:25.500", + "bottom": "돈가스 전문점은 다 똑같아\n여기가 되게 특별해", + "effect": "(억지)" + }, + { + "start": "32:25.500", + "end": "32:32.000", + "bottom": "근데 여기 고기 먹어봤어?\n- 아니?\n너~무 맛있어! 굉장히 스페셜해", + "effect": "(홀리는 중)" + }, + { + "start": "32:32.000", + "end": "32:36.500", + "bottom": "돈가스랑 김치찌개 시키자!\n- 기름기랑 같이 들어가야 돼서", + "effect": "(철벽)" + }, + { + "start": "32:36.500", + "end": "32:41.000", + "bottom": "삼겹살을 또 먹어줘야 돼\n- 내가 쌈 싸줄게 그래!", + "effect": "(홀라당 넘어감)" + }, + { + "start": "32:41.000", + "end": "32:45.000", + "bottom": "저희 같은 성격이\n나경이 절대 못 이겨요", + "effect": "(감탄)" + }, + { + "start": "32:47.500", + "end": "32:53.000", + "bottom": "나경 씨 얼굴을 보고 있으면\n자체 클로즈업이 돼요 자꾸", + "effect": "(미인계)" + }, + { + "start": "33:01.500", + "end": "33:05.500", + "bottom": "저는 개입해서 한마디 하려고 했어\n진작 설득당했어 나는", + "effect": "(어이없음)" + } + ] +} + +📌 타이틀 후보 5선 + +상단: 삼겹살 전문점인데 / 메인: 돈가스 시키자는 유인나 — 어그로형 +상단: 맑은 눈의 광기 / 메인: 차분하게 팩폭하는 나경 — 바이럴형 +상단: 무논리 vs 차분함 / 메인: 결국 삼겹살에 굴복한 언니 — 바이럴형 +상단: 미모가 무기 / 메인: 자체 클로즈업 되는 나경 얼굴 — 어그로형 +상단: 절대 못 이기는 성격 / 메인: 프로미스나인 나경의 설득법 — 클릭유도형 + +⏱️ 컷 길이 검산표 +컷 1: 31:26.500 → 31:30.000 = 3.5초 +컷 2: 31:56.500 → 32:00.000 = 3.5초 +컷 3: 32:01.500 → 32:06.000 = 4.5초 +컷 4: 32:08.500 → 32:14.500 = 6.0초 +컷 5: 32:17.500 → 32:20.500 = 3.0초 +컷 6: 32:20.500 → 32:25.500 = 5.0초 +컷 7: 32:25.500 → 32:32.000 = 6.5초 +컷 8: 32:32.000 → 32:36.500 = 4.5초 +컷 9: 32:36.500 → 32:41.000 = 4.5초 +컷 10: 32:41.000 → 32:45.000 = 4.0초 +컷 11: 32:47.500 → 32:53.000 = 5.5초 +컷 12: 33:01.500 → 33:05.500 = 4.0초 +───────────────────── +총 12컷 / 총 길이: 54.5초