youtube_segment_summary / youtube_processor.py
jonghhhh's picture
Upload youtube_processor.py with huggingface_hub
3892784 verified
"""
์œ ํŠœ๋ธŒ URL์„ ์ž…๋ ฅ๋ฐ›์•„ ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ ๋ฐ ์š”์•ฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ†ตํ•ฉ ํ”„๋กœ์„ธ์„œ
"""
import os
import sys
from pathlib import Path
# ๋กœ์ปฌ ๋ชจ๋“ˆ import
from youtube_segmenter import process_youtube_video
from youtube_summarizer import summarize_youtube_segments
def main():
"""
๋ฉ”์ธ ์‹คํ–‰ ํ•จ์ˆ˜
"""
print("=" * 80)
print("์œ ํŠœ๋ธŒ ์˜์ƒ ๋ถ„์„ ํ†ตํ•ฉ ๋„๊ตฌ")
print("=" * 80)
print()
# 1. ์œ ํŠœ๋ธŒ URL ์ž…๋ ฅ
youtube_url = input("์œ ํŠœ๋ธŒ URL์„ ์ž…๋ ฅํ•˜์„ธ์š” (ํ•„์ˆ˜): ").strip()
if not youtube_url:
print("์˜ค๋ฅ˜: URL์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")
return
# 2. ์ฒ˜๋ฆฌ ๋ชจ๋“œ ์„ ํƒ
print("\n์ฒ˜๋ฆฌ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•˜์„ธ์š”:")
print(" 1. ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ๋งŒ")
print(" 2. ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ + ์š”์•ฝ ์ƒ์„ฑ")
mode = input("์„ ํƒ (1 ๋˜๋Š” 2, ๊ธฐ๋ณธ๊ฐ’: 2): ").strip()
mode = mode if mode in ['1', '2'] else '2'
# 3. Penalty ๊ฐ’ ์ž…๋ ฅ
print("\n[์„ ํƒ์‚ฌํ•ญ] Penalty ๊ฐ’ ์„ค์ •")
print(" - ๋Œ€์ฃผ์ œ ๋ถ„๋ฆฌ ๋ฏผ๊ฐ๋„ (์ž‘์„์ˆ˜๋ก ๋” ๋งŽ์€ ์ฃผ์ œ๋กœ ๋ถ„๋ฆฌ)")
print(" - ๊ถŒ์žฅ: 3-7")
penalty_input = input("Penalty ๊ฐ’ (๊ธฐ๋ณธ๊ฐ’: 5.0, ์—”ํ„ฐ=๊ธฐ๋ณธ๊ฐ’): ").strip()
penalty = float(penalty_input) if penalty_input else 5.0
# 4. Threshold ๊ฐ’ ์ž…๋ ฅ
print("\n[์„ ํƒ์‚ฌํ•ญ] Threshold ๊ฐ’ ์„ค์ •")
print(" - ์†Œ์ฃผ์ œ ๋ถ„๋ฆฌ ๋ฏผ๊ฐ๋„")
print(" - 70-80: ์„ธ๋ฐ€ํ•œ ๋ถ„๋ฆฌ")
print(" - 85-92: ๊ท ํ˜•์žกํžŒ ๋ถ„๋ฆฌ (๊ถŒ์žฅ)")
print(" - 95-98: ํฐ ๋ฉ์–ด๋ฆฌ๋กœ ๋ถ„๋ฆฌ")
threshold_input = input("Threshold ๊ฐ’ (๊ธฐ๋ณธ๊ฐ’: 90, ์—”ํ„ฐ=๊ธฐ๋ณธ๊ฐ’): ").strip()
threshold = int(threshold_input) if threshold_input else 90
# 5. ์ถœ๋ ฅ ํด๋” ์„ค์ •
print("\n[์„ ํƒ์‚ฌํ•ญ] ๊ฒฐ๊ณผ ์ €์žฅ ํด๋”")
output_dir = input("์ €์žฅ ํด๋” ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: ํ˜„์žฌ ํด๋”, ์—”ํ„ฐ=๊ธฐ๋ณธ๊ฐ’): ").strip()
if not output_dir:
output_dir = "."
# ํด๋” ์ƒ์„ฑ
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
print("\n" + "=" * 80)
print("์ฒ˜๋ฆฌ ์‹œ์ž‘")
print("=" * 80)
print(f"URL: {youtube_url}")
print(f"๋ชจ๋“œ: {'์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ๋งŒ' if mode == '1' else '์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ + ์š”์•ฝ'}")
print(f"Penalty: {penalty}")
print(f"Threshold: {threshold}")
print(f"์ถœ๋ ฅ ํด๋”: {output_path.absolute()}")
print("=" * 80)
print()
try:
# ๋‹จ๊ณ„ 1: ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ
print("\n[๋‹จ๊ณ„ 1/2 ๋˜๋Š” 1/1] ์œ ํŠœ๋ธŒ ์˜์ƒ ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ ์ค‘...\n")
segment_file = process_youtube_video(
youtube_url,
penalty=penalty,
threshold=threshold,
output_dir=str(output_path)
)
print(f"\nโœ“ ์„ธ๊ทธ๋จผํŠธ ๋ถ„๋ฆฌ ์™„๋ฃŒ: {segment_file}")
# ๋‹จ๊ณ„ 2: ์š”์•ฝ (๋ชจ๋“œ 2์ธ ๊ฒฝ์šฐ)
if mode == '2':
print("\n[๋‹จ๊ณ„ 2/2] ์„ธ๊ทธ๋จผํŠธ ์š”์•ฝ ์ƒ์„ฑ ์ค‘...\n")
# ์ถœ๋ ฅ ํŒŒ์ผ๋ช… ์„ค์ •
segment_path = Path(segment_file)
summary_file = segment_path.parent / f"summary_{segment_path.name}"
summary_file = summarize_youtube_segments(
segment_file,
output_json_path=str(summary_file)
)
print(f"\nโœ“ ์š”์•ฝ ์ƒ์„ฑ ์™„๋ฃŒ: {summary_file}")
# ์ตœ์ข… ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print("\n" + "=" * 80)
print("์ฒ˜๋ฆฌ ์™„๋ฃŒ!")
print("=" * 80)
print(f"\n์ƒ์„ฑ๋œ ํŒŒ์ผ:")
print(f" 1. ์„ธ๊ทธ๋จผํŠธ ํŒŒ์ผ: {segment_file}")
if mode == '2':
print(f" 2. ์š”์•ฝ ํŒŒ์ผ: {summary_file}")
print()
except Exception as e:
print(f"\n์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()