【AI游戏开发】我用Trae3分钟教你打飞机之下载游戏素材

在上一篇文章,我们写了一个小小的打飞机demo,感受到了Trae的牛逼的代码逻辑。 现在我们只做了飞机的画面。还有打飞机的声音呢,能不能从视频网站自动下载并生成mp3文件呢?ok,说干就干。

去B站逛了一下,发现有热心网友已经把我喜欢的"加纳战机"小游戏的视频文件传上去了。可惜是视频。

那么我们的需求就是这样了:

  1. 用Trae写个python脚本,自动从Bilibli网站下载"加纳战机"的影片,保存成mp4格式。
  2. 自动把mp4文件转换成mp3文件。

提示词给Trae: 帮我写个python脚本,从B站下载视频保存成mp4格式,并把这个mp4文件转换成mp3格式文件:

python 复制代码
import yt_dlp
import os
import sys
import moviepy as mp
import logging

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 配置选项
DEFAULT_FORMAT = 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

# 修改 download_and_convert 函数以使用配置选项
def download_and_convert(url, output_dir="."):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 配置yt-dlp下载选项
    ydl_opts = {
        'format': DEFAULT_FORMAT,  # 使用配置选项
        'outtmpl': os.path.join(output_dir, '%(title)s.%(ext)s'),
    }
    try:
        # 下载视频
        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                # 处理多个视频的情况
                for entry in info['entries']:
                    if entry is not None:
                        video_title = entry.get('title', 'unknown_title')
                        video_ext = entry.get('ext', 'mp4')
                        video_file = f"{video_title}.{video_ext}"
                        video_path = os.path.join(output_dir, video_file)
                        try:
                            ydl.download([entry['webpage_url']])
                            if os.path.exists(video_path) and os.access(video_path, os.R_OK):
                                video = mp.VideoFileClip(video_path)
                                audio = video.audio
                                audio_path = os.path.join(output_dir, f"{video_title}.mp3")
                                audio.write_audiofile(audio_path)
                                logging.info(f'已生成音频文件: {audio_path}')
                            else:
                                logging.error(f'无法访问视频文件: {video_path}')
                        except Exception as e:
                            logging.error(f'处理视频 {video_title} 时出错: {str(e)}')
            else:
                # 处理单个视频的情况
                video_title = info.get('title', 'unknown_title')
                video_ext = info.get('ext', 'mp4')
                video_file = f"{video_title}.{video_ext}"
                video_path = os.path.join(output_dir, video_file)
                ydl.download([url])
                if os.path.exists(video_path) and os.access(video_path, os.R_OK):
                    video = mp.VideoFileClip(video_path)
                    audio = video.audio
                    audio_path = os.path.join(output_dir, f"{video_title}.mp3")
                    audio.write_audiofile(audio_path)
                    logging.info(f'已生成音频文件: {audio_path}')
                else:
                    logging.error(f'无法访问视频文件: {video_path}')
    except Exception as e:
        logging.error(f'处理过程中出错: {str(e)}')

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("使用方法: python bilibili_downloader.py <B站视频URL> [输出目录]")
        sys.exit(1)
    
    url = sys.argv[1]
    output_dir = sys.argv[2] if len(sys.argv) > 2 else "downloads"
    
    download_and_convert(url, output_dir)

ok,下载的mp3,mp4文件如下:

其实中间也是报了不少错了的。比如提示:

python 复制代码
python .\bilibili_downloader.py https://www.bilibili.com/video/BV1cZ4y1x7k4 downloads

Traceback (most recent call last):

File "C:\Users\EDY\AppData\Local\Programs\Python\Python313\Lib\site-packages\pydub\utils.py", line 14, in <module>

import audioop

ModuleNotFoundError: No module named 'audioop'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "C:\Users\EDY\workspace\traeproject\fly\bilibili_downloader.py", line 2, in <module>

from pydub import AudioSegment

File "C:\Users\EDY\AppData\Local\Programs\Python\Python313\Lib\site-packages\pydub\__init__.py", line 1, in

<module>

from .audio_segment import AudioSegment

File "C:\Users\EDY\AppData\Local\Programs\Python\Python313\Lib\site-packages\pydub\audio_segment.py", line 11, in <module>

from .utils import mediainfo_json, fsdecode

File "C:\Users\EDY\AppData\Local\Programs\Python\Python313\Lib\site-packages\pydub\utils.py", line 16, in <module>

import pyaudioop as audioop

ModuleNotFoundError: No module named 'pyaudioop'

中间还是需要手动操作一些东西的: 比如这个错误后,让用mp.VideoFileClip(video_path) 方法。需要下载 'ffmpeg-2025-03-17-git-5b9356f18e-full_build'并配置环境变量。

比如他用 moviepy.editor 模块,没找到,我也问了腾讯元宝半天,发现,直接用moviepy就可以了。

比如他一开始用 yt_dlp.YoutubeDL()方法下载mp4,其实可以一次性把链接中的多个视频都下载下载。那就没办法一个个mp4文件转mp3了,因为默认就是一个mp4.我这么提示:

shell 复制代码
给的下载链接是一个包含多个mp4的链接,所以需要调整一下代码逻辑,所以调用yt_dlp.YoutubeDL方法下载了多个,处理一下这种情况。

他就帮我把代码改成上面的一个个处理mp4,然后转mp3了。

ok,下载的文件依然给大家分享链接。 上面的python代码,大家也可以跑一跑,改成别的什么音乐链接。

加纳战机bgm:pan.baidu.com/s/1wdTOuiUJ... 提取码: qtgx

相关推荐
楼田莉子14 分钟前
python学习:爬虫+项目测试
后端·爬虫·python·学习
MYZR120 分钟前
手持终端的技术演进:从移动计算到智能物联
人工智能·智能家居·核心板·ssd2351
桂花饼20 分钟前
Sora 2:当AI视频“以假乱真”,内容创作进入新纪元,体验AI创作能力
人工智能·aigc·多模态学习·ai视频生成·sora 2·视频生成api
x_lrong25 分钟前
个人AI环境快速搭建
人工智能·笔记
总有刁民想爱朕ha27 分钟前
Python自动化从入门到实战(17)python flask框架 +Html+Css开发一个实用的在线奖状生成器
python·flask·自动化·在线奖状生成器
陆业聪38 分钟前
AI智能体的未来:从语言泛化到交互革命
人工智能·交互
修炼室1 小时前
如何将Python脚本输出(含错误)全量保存到日志文件?实战指南
开发语言·python
siliconstorm.ai1 小时前
阿里下场造“机器人”:从通义千问到具身智能,中国AI正走向“实体化”阶段
人工智能·自然语言处理·chatgpt·机器人·云计算
@LetsTGBot搜索引擎机器人1 小时前
用 Python 打造一个 Telegram 二手交易商城机器人
开发语言·python·搜索引擎·机器人·.net·facebook·twitter
扫地的小何尚1 小时前
Isaac Lab 2.3深度解析:全身控制与增强遥操作如何重塑机器人学习
arm开发·人工智能·学习·自然语言处理·机器人·gpu·nvidia