File size: 2,737 Bytes
bc39353 5961a7a bc39353 4ddbe7a d596036 558b354 d596036 2815236 4f574fb 2815236 4f574fb cf0c38d 2815236 4f574fb cf0c38d 558b354 cf0c38d 99baa8d 9a13e4d 558b354 9a13e4d d596036 cf0c38d c0b7006 13158d2 cf0c38d 13158d2 bc39353 2e18f1a 99baa8d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import gradio as gr
import yt_dlp
def extract_info(youtube_url):
ydl_opts = {
'quiet': True,
'no_warnings': True,
'no_color': True,
'youtube_include_dash_manifest': False,
'youtube_include_hls_manifest': False,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(youtube_url, download=False)
metadata = {
"제목": info.get('title', 'N/A'),
"채널": info.get('channel', 'N/A'),
"업로드 날짜": info.get('upload_date', 'N/A'),
"조회수": info.get('view_count', 'N/A'),
"길이 (초)": info.get('duration', 'N/A'),
}
formats = info.get('formats', [])
best_video_only = next((f for f in formats if f['ext'] == 'mp4' and f.get('vcodec') != 'none' and f.get('acodec') == 'none'), None)
# 간단히 비디오와 오디오가 모두 있는 첫 번째 mp4 포맷을 선택
combined = next((f for f in formats if f['ext'] == 'mp4' and f.get('vcodec') != 'none' and f.get('acodec') != 'none'), None)
metadata_str = "\n".join([f"{k}: {v}" for k, v in metadata.items()])
video_only_link = f'<a href="{best_video_only["url"]}" target="_blank">비디오만 다운로드</a>' if best_video_only else ""
combined_link = f'<a href="{combined["url"]}" target="_blank">비디오+오디오 다운로드</a>' if combined else ""
download_links = f"{video_only_link}<br>{combined_link}" if video_only_link or combined_link else "다운로드 링크를 찾을 수 없습니다."
return metadata_str, download_links
except Exception as e:
return f"오류 발생: {str(e)}", "다운로드 링크를 찾을 수 없습니다."
with gr.Blocks() as demo:
gr.Markdown("## YouTube 메타데이터 및 다운로드 링크 추출기")
gr.Markdown("주의: 이 도구를 사용하여 저작권이 있는 콘텐츠를 무단으로 다운로드하는 것은 불법입니다.")
youtube_url_input = gr.Textbox(label="YouTube URL 입력")
extract_button = gr.Button("정보 추출")
output = gr.Textbox(label="추출된 정보", lines=10)
download_links = gr.HTML(label="다운로드 링크")
extract_button.click(
fn=extract_info,
inputs=youtube_url_input,
outputs=[output, download_links]
)
if __name__ == "__main__":
demo.launch() |