Python如何将仅包含音频内容的Mp4,提取并转换为Mp3

关于如何将Mp4转换为Mp3的文章很多,方案也都很有效。但是这其中的大部分方法,并不适用于该Mp4文件中仅包含音频内容的情况,比如:有人从YouTube,下载了仅包含音频内容的文件,这个文件其实还是Mp4格式的,只是没有视频内容,虽然可以通过直接将后缀名改为.mp3,将这个本质是Mp4的文件变为一个伪Mp3文件,也可以在一些播放器上进行播放,但终究不是真正的音频文件,我试过把这个文件放到foobar2000中播放,但是会被识别为无效的内容,而不能播放,如果将后缀改为mp4后,就可以正常的播放声音了。

那要如何把这个Mp4文件变成真正的mp3文件呢?

方法很简单,先要在Python中安装moviepy模块,可以通过 pip install moviepy 进行加载,之后就是几行代码可以解决的事情了,详见下面的代码及注释:

通过以下的python代码, 即可以将正常的Mp4文件转为Mp3, 也可以将只包含音频片断的Mp4文件转换为Mp3。

# pip install moviepy
# 安装 moviepy模块
import os
# 导入moviepy模块
import moviepy.editor as mp

# 选择MP4文件
mp4_file = r"Youtube_Audio_only_file.mp4"

# 通过替换文件名后缀,生成Mp3文件的新地址
mp3_file = mp4_file.replace('.mp4','.mp3')

# 由于在读取无画面的Mp4文件的时候,系统会报错,从而中断程序运行,所以用try语句,先尝试按正常方式读取MP4
try:
    # 正常情况下,应该使用VideoFileClip来读取Mp4文件,并重新生成Mp3文件,代码如下:
    mp.VideoFileClip(mp4_file).audio.write_audiofile(mp3_file)
    # 但是由于从Youtube下载的仅包含音频的文件,其实并不是MP4文件,会出现 self.fps = infos['video_fps'] 的关键错误,
    # 所以不能采用这种方式读取,应该考虑用音频的方式读取
except:
    # 如果用正常的方式读取MP4出现错误,则采用读取音频的方式获取文件中的内容,再作输出。
    # 用音频的方式读取从Youtube下载的Mp4文件,并输出为mp3 音频文件。
    mp.AudioFileClip(mp4_file).write_audiofile(mp3_file)

# 转换为MP3文件后,如果不再需要原Mp4文件可以直接删除该Mp4文件
os.remove(mp4_file)

如果需要批量处理的话,可以考虑每次将一个文件夹内的全部MP4文件进行转换,参考代码如下:

g_mp4_path = r"Mp4所在的文件夹路径"
for mp4_filename in os.listdir(g_mp4_path):
    if '.mp4' in mp4_filename:
    	# 调用上面的那部分转换代码
        # 如果当前目录下的文件是Mp4格式,则可以进行转换为Mp3

我用TKinter编译了一个用于转换Mp4的简易程序,界面如下:
在这里插入图片描述
在对py进行打包的时候,遇到了 动态加载 的问题,在这里感谢 Lambda 在【Python记 #3】记一次python打包为.exe的经历 中详见介绍了解决方案。另外还有一个问题,就是调用moviepy模块后,打包成的exe文件特别大,我这次生成的可执行文件,接近150M。

如需要完整的python源代码以及打包的exe文件,请点击下载。 以上内容,希望能对你有所启发,如有不足之处,请指出,谢谢!

猜你喜欢

转载自blog.csdn.net/lemiaokai/article/details/127328313