专栏名称: Dance with GenAI
关于生成式人工智能AIGC的一切
目录
相关文章推荐
Quora文选英语  ·  老外说𝒎𝒖𝒎'𝒔 𝒕𝒉𝒆 ... ·  昨天  
Quora文选英语  ·  Quora_你最近最快乐的时刻是什么时候?【 ... ·  2 天前  
知乎日报  ·  世界上第一个养猫的人是谁? ·  2 天前  
刀法研究所  ·  被小红书女孩买断货,大疆Pocket3用这个 ... ·  2 天前  
51好读  ›  专栏  ›  Dance with GenAI

ChatGPT批量下载YouTube视频为mp3音频

Dance with GenAI  · 公众号  ·  · 2024-10-16 18:56

正文

ChatGPT中输入提示:

你是一个Python编程专家,写一个脚本,具体任务步骤如下:

循环接受用户输入的YouTube视频地址;

获取用户输入的YouTube视频地址(用户一次可能输入一个URL,也可能一次输入多个,确保能自动识别出多个不同的http地址);

如果这是单个视频,那么用yt-dlp库下载视频中的音频流,保存到文件夹:"F:\aivideo",格式为MP3;

如果这是一个列表,那么用yt-dlp库下载列表中所有视频的音频流(格式为MP3),保存到文件夹:"F:\aivideo"的子文件夹,子文件夹名称为列表名;

注意:

每一步都要输出信息到屏幕上;

Mp3的文件名在保存前要进行处理,去掉和Windows系统中符合命名规范的特殊字符;

ChatGPT给出的源代码:

import os

import re

import yt_dlp

# 定义保存目录

SAVE_DIR = "F:\\aivideo"

# 处理文件名中不允许的特殊字符

def sanitize_filename(filename):

return re.sub(r'[\\/*?:"<>|]', "", filename)

# 下载单个视频音频

def download_single_video(url):

try:

ydl_opts = {

'format': 'bestaudio/best',

'outtmpl': os.path.join(SAVE_DIR, '%(title)s.%(ext)s'),

'postprocessors': [{

'key': 'FFmpegExtractAudio',

'preferredcodec': 'mp3',

'preferredquality': '192',

}],

'noplaylist': True

}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:

info_dict = ydl.extract_info(url, download=False)

video_title = sanitize_filename(info_dict.get('title', 'unknown'))

ydl_opts['outtmpl'] = os.path.join(SAVE_DIR, f'{video_title}.mp3')

with yt_dlp.YoutubeDL(ydl_opts) as ydl:

print(f"正在下载单个视频音频: {video_title}")

ydl.download([url])

print(f"下载完成: {video_title}.mp3")

except Exception as e:

print(f"下载失败: {str(e)}")

# 下载播放列表中的音频

def download_playlist(url):

try:

ydl_opts = {

'format': 'bestaudio/best',

'postprocessors': [{

'key': 'FFmpegExtractAudio',

'preferredcodec': 'mp3',

'preferredquality': '192',

}]

}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:

info_dict = ydl.extract_info(url, download=False)

playlist_title = sanitize_filename(info_dict.get('title', 'unknown_playlist'))

playlist_dir = os.path.join(SAVE_DIR, playlist_title)

if not os.path.exists(playlist_dir):

os.makedirs(playlist_dir)

ydl_opts['outtmpl'] = os.path.join(playlist_dir, '%(title)s.%(ext)s')

with yt_dlp.YoutubeDL(ydl_opts) as ydl:

print(f"正在下载播放列表: {playlist_title}")

ydl.download([url])

print(f"下载完成,音频保存在: {playlist_dir}")

except Exception as e:

print(f"下载失败: {str(e)}")

# 检测输入中的多个URL

def extract_urls(input_string):

# 正则表达式匹配URL

url_pattern = re.compile(r'https?://[^\s]+')

return url_pattern.findall(input_string)

# 循环接受用户输入

while True:

input_urls = input("请输入YouTube视频或播放列表地址(输入 'q' 退出):")

if input_urls.lower() == 'q':

break

urls = extract_urls(input_urls)







请到「今天看啥」查看全文