在Python中将mp4转换为mp3,音频出现“重复”(moviepy)

0 投票
1 回答
85 浏览
提问于 2025-04-12 16:08

我在尝试做一个程序,可以从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

撰写回答