在Python中将mp4转换为mp3,音频出现“重复”(moviepy)
我在尝试做一个程序,可以从YouTube下载mp4和mp3文件。mp4的部分还算顺利,但mp3的部分就有点麻烦了。自从昨天开始,我一直在尝试做一种转换机制(我对编程还很陌生),想把我下载的mp4文件转换成mp3。经过几个小时的努力,我终于找到了一种方法,可以让我听到音频(单纯把.mp4改成.mp3是行不通的)。
不过有个小问题,音频播放大约4秒后就开始重复,就像划伤的CD一样,我不知道该怎么解决这个问题。
import os
from pytube import YouTube
from moviepy.editor import *
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)
cleaned_string += ".mp3"
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":
youtubeDownloadMP3 = yt.streams.filter(only_audio=True).first()
caminho = ("D:\\Music")
mp3filename = removespecialchars(yt.title)
mp3path = os.path.join(caminho, mp3filename)
youtubeDownloadMP3.download(caminho, filename=mp3filename)
audioClip = AudioFileClip(mp3path)
audioClip.write_audiofile(mp3path, codec='libmp3lame')
print("Seu mp3 foi instalado")
break
else:
print("Escreva 'mp3' ou 'mp4' burro")
(有些内容是葡萄牙语,别担心这个)
我本来希望它能正常工作,但已经转换好的mp3文件在播放大约4秒后就开始重复了。
1 个回答
0
根据你提供的信息,不太清楚为什么音频在转换后会崩溃。(可能是编码或解码的问题?)
你可以试试用 ffmpeg
,而不是 moviepy
,因为 ffmpeg
可能更稳定,并且可以自动判断使用哪个编码格式。在这种情况下,只需要把你代码中的以下几行替换成:
audioClip = AudioFileClip(mp3path)
audioClip.write_audiofile(mp3path, codec='libmp3lame')
改成这样:
ffmpeg.input(mp3path).output(mp3path.replace('.mp3', '_convert.mp3')).run()
另外,要在 Python 中使用 ffmpeg
,你需要先用 pip install ffmpeg-python
安装它,然后在代码开头加上 import ffmpeg
。