如何用 Python 播放一个 MP4 格式的音频文件

我在用 python 写一个命令行下的豆瓣 FM,参考了命令行版的网易云音乐,同样准备用 linux 下的 mpg123 实现播放音乐功能,结果抓到豆瓣的音频数据是 mp4 格式的,不知如何是好。

ps:搜索竟然发现在 V2EX 有人在前几年提过类似的问题,不过也是没解决。


如何用 Python 播放一个 MP4 格式的音频文件
9 回复

ffmpeg -i a.mp4 a.mp3


用Python播放MP4音频,推荐用pydub配合simpleaudioplaysound。先装库:pip install pydub simpleaudio(Windows用pip install pydub playsound)。

from pydub import AudioSegment
from pydub.playback import play

# 加载MP4文件(本质是提取其中的音频流)
audio = AudioSegment.from_file("your_audio.mp4", format="mp4")

# 播放音频
play(audio)

原理pydub通过FFmpeg解码MP4容器中的音频流,转换为PCM数据后由播放后端输出。如果遇到编解码问题,请确保系统已安装FFmpeg(官网下载并添加至PATH)。

一句话总结:用pydub加载MP4并调用play()函数直接播放。

mediainfo 看看是什么编码 再重新封装 mp4 一般是 aac

除了封装,你能做什么呢?

windows 下之前是调用 windows media player 的 COM 接口
linux 没记错的话,是 gstreamer
mac 下可以用 2.X 自带的 Carbon 系列标准库去尝试调用 AVFoundation

mac 下亲测有效


import time
from Foundation import NSURL
from AVFoundation import AVAudioPlayer

f = NSURL.fileURLWithPath_(‘1.mp4’)
player = AVAudioPlayer.alloc().initWithContentsOfURL_error_(f, None)
player.setNumberOfLoops_(0)
player.play()
time.sleep(3)
player.stop()

记得用系统自带的 /usr/bin/python

系统自带的才有 carbon / pyobjc 库。

不要用 brew 或者 anaconda 安装的。

我记得以前用 lua,通过 c++编写 so 库接口给 lua 调用,我不清楚 python 加载机制是否和 lua 一样,可以尝试把这个功能转移给 c/c++

谢谢楼上几位,大概有思路了

回到顶部