使用Python MoviePy转换MP4为MP3后音频出现重复问题求助
问题分析与解决方案
你的MP3转换后出现4秒后重复卡顿的问题,根源出在这两个核心点:
- 直接把Pytube下载的音频流(实际是m4a/webm格式)命名成
.mp3文件,MoviePy读取格式错误的文件时会出现解析异常。 - 用同一个文件路径同时执行读取和写入操作,导致文件内容被覆盖损坏,引发播放异常。
修复后的代码
import os from pytube import YouTube from moviepy.editor import AudioFileClip link = input("Coloque o link: ") yt = YouTube(link) def removespecialchars(string): allowed_chars = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-()[]{}\\:') cleaned_string = ''.join(char for char in string if char in allowed_chars) return cleaned_string print("Title: ", yt.title) print("Views: ", yt.views) while True: formatChoice = input("Você quer mp3 ou mp4? ").upper() if formatChoice == "MP4": youtubeDownloadMP4 = yt.streams.get_highest_resolution() youtubeDownloadMP4.download("D:\\Videos\\YoutubeVideo") print("Seu vídeo foi instalado") break elif formatChoice == "MP3": # 优先选择m4a格式的音频流,兼容性更好 youtubeDownloadMP3 = yt.streams.filter(only_audio=True, file_extension='m4a').first() caminho = "D:\\Music" clean_title = removespecialchars(yt.title) # 临时存储下载的原音频(保留m4a格式) temp_filename = f"{clean_title}.m4a" temp_path = os.path.join(caminho, temp_filename) # 最终MP3文件路径 mp3_path = os.path.join(caminho, f"{clean_title}.mp3") # 下载原音频到临时文件 youtubeDownloadMP3.download(caminho, filename=temp_filename) # 读取临时文件并转换为MP3 audio_clip = AudioFileClip(temp_path) audio_clip.write_audiofile(mp3_path, codec='libmp3lame') # 转换完成后删除临时文件 os.remove(temp_path) print("Seu mp3 foi instalado") break else: print("Escreva 'mp3' ou 'mp4' burro")
关键改动说明
- 规范格式处理:优先选择m4a格式的音频流,下载时保留原格式后缀,避免MoviePy解析出错。
- 分离读写路径:用临时文件存储原始音频,转换完成后写入新的MP3文件,彻底避免读写冲突导致的文件损坏。
- 清理冗余文件:转换完成后自动删除临时m4a文件,避免磁盘空间浪费。
内容的提问来源于stack exchange,提问作者Potalpha
相关产品推荐
相关产品推荐

