如何在Python中将u-law 8000 Hz音频文件转换为OPUS

问题描述 投票:0回答:1

我正在开发一个 Python 项目,需要将音频文件从采样率为 8000 Hz 的 μ-law 格式转换为 OPUS 格式。挑战在于在转换过程中保持原始渠道的分离。尽管多次尝试不同的方法和库,但我还没有成功。我正在寻找可以有效处理此转换的建议或 Python 库。

我尝试过的:

1- 使用 pydub 加载和导出文件:尝试使用 pydub 加载 .au 文件并将其导出为 OPUS。这种方法导致 ffmpeg 相关错误,特别是“处理输入时发现无效数据”。

from pydub import AudioSegment
audio_1 = AudioSegment.from_file("path/to/file1.au", format="au", frame_rate=8000)
audio_2 = AudioSegment.from_file("path/to/file2.au", format="au", frame_rate=8000)
combined_audio = AudioSegment.from_mono_audiosegments(audio_1, audio_2)
combined_audio.export("output.opus", format="opus", bitrate="32k")

2- 使用 ffmpeg 直接转换:还尝试从命令行和 Python 中使用 ffmpeg 直接转换,指定编解码器,但不断遇到“处理输入时发现无效数据”。

ffmpeg -acodec pcm_mulaw -i input_file.au -ar 8000 -ac 1 output.wav

3- 使用 aplay 播放:有趣的是,使用指定采样率和格式的 aplay 可以很好地播放文件,确认文件没有损坏。

aplay -r 8000 -f MU_LAW input_file.au

如何在 Python 中将音频文件从 u-law 8000 Hz 格式转换为 OPUS 格式,最好保持原始音频通道分离?是否有特定的 Python 库或工具适合这种类型的音频转换?

任何有关如何解决此问题的帮助或指导将不胜感激。

python ffmpeg opus mu-law
1个回答
0
投票

我最终做了类似下面的事情,我只能通过命令行让它工作,而不是直接从Python。

 command = [
            "ffmpeg",
            "-y",
            "-f", "mulaw", "-ar", "8000", "-ac", "1", "-i", file_path_1,
            "-f", "mulaw", "-ar", "8000", "-ac", "1", "-i",  file_path_2,
            "-filter_complex", "[0:a][1:a]amerge=inputs=2",
            "-ac", "2", "-ar", "8000", "-c:a", "libopus", combined_audio_path
        ]
        subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

如果有人有更好的方法我可以将其标记为答案。

© www.soinside.com 2019 - 2024. All rights reserved.