quechua128 发表于 2020-8-31 15:34:54

多个mp3音频合并成一个MP3

本帖最后由 quechua128 于 2020-8-31 15:39 编辑

使用open函数打开多个mp3音频,然后再通过写方法合成到一个音频文件中,但出来的音频只有第一个mp3文件的音频,哪位大神知道怎么解决吗??
    with open('音频输出1.mp3','rb') as file1:
      file1_read = file1.read()
    with open('音频输出2.mp3','rb') as file2:
      file2_read = file2.read()
    with open('音频输出3.mp3','wb') as file3:
      file3.write(file1_read)
      file3.write(file2_read)

Json21 发表于 2020-8-31 15:54:31

只是将文件合并在一起了,如果要播放两个音频,可以使用pydub, 例如:

import pydub

song0 = pydub.AudioSegment.from_mp3('0.mp3')
song1 = pydub.AudioSegment.from_mp3('1.mp3')

song = song0 + song1
song.export('out.mp3', format('mp3'))

quechua128 发表于 2020-8-31 16:01:13

Json21 发表于 2020-8-31 15:54
只是将文件合并在一起了,如果要播放两个音频,可以使用pydub, 例如:

这个也用过,报错如下
Traceback (most recent call last):
File "C:/Users/Hasee/Desktop/语音功能/pymp3.py", line 43, in <module>
    song0 = pydub.AudioSegment.from_mp3('音频输出1.mp3')
File "E:\python\python38\lib\site-packages\pydub\audio_segment.py", line 738, in from_mp3
    return cls.from_file(file, 'mp3', parameters=parameters)
File "E:\python\python38\lib\site-packages\pydub\audio_segment.py", line 723, in from_file
    raise CouldntDecodeError(
pydub.exceptions.CouldntDecodeError: Decoding failed. ffmpeg returned error code: 1

Output from ffmpeg/avlib:

ffmpeg version git-2020-08-28-ccc7120 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil      56. 58.100 / 56. 58.100
libavcodec   58.101.100 / 58.101.100
libavformat    58. 51.101 / 58. 51.101
libavdevice    58. 11.101 / 58. 11.101
libavfilter   7. 87.100 /7. 87.100
libswscale      5.8.100 /5.8.100
libswresample   3.8.100 /3.8.100
libpostproc    55.8.100 / 55.8.100
Header missing
    Last message repeated 31 times
decoding for stream 0 failed
Could not find codec parameters for stream 0 (Audio: mp3 (mp3float), 0 channels, fltp): unspecified frame size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, mp3, from '音频输出1.mp3':
Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: mp3, 0 channels, fltp
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
Press to stop, [?] for help
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Header missing
Error while decoding stream #0:0: Invalid data found when processing input
Value inf for parameter 'time_base' out of range
    Last message repeated 3 times
Error setting option time_base to value 1/0.
Error applying options to the filter.
Error reinitializing filters!
Error while filtering: Result too large
Finishing stream 0:0 without any data written to it.
Value inf for parameter 'time_base' out of range
    Last message repeated 3 times
Error setting option time_base to value 1/0.
Error applying options to the filter.
Error configuring filter graph
Conversion failed

Json21 发表于 2020-8-31 16:12:32

quechua128 发表于 2020-8-31 16:01
这个也用过,报错如下
Traceback (most recent call last):
File "C:/Users/Hasee/Desktop/语音功能/ ...

Input #0, mp3, from '音频输出1.mp3':
Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: mp3, 0 channels, fltp

看上去似乎这个音频文件有问题呢

疾风怪盗 发表于 2020-8-31 16:54:39

运行了下你的代码,亲测可以将两个mp3合并为一个,代码没问题,你测试的音频有问题吧

quechua128 发表于 2020-9-1 08:15:14

Json21 发表于 2020-8-31 16:12
Input #0, mp3, from '音频输出1.mp3':
Duration: N/A, start: 0.000000, bitrate: N/A
    Stream # ...

使用pyttsx3库生成的音频

quechua128 发表于 2020-9-1 08:16:19

疾风怪盗 发表于 2020-8-31 16:54
运行了下你的代码,亲测可以将两个mp3合并为一个,代码没问题,你测试的音频有问题吧

pyttsx3生成的音频

疾风怪盗 发表于 2020-9-1 11:19:51

quechua128 发表于 2020-9-1 08:16
pyttsx3生成的音频

尝试了下,好像是不行
pyttsx3音频+pyttsx3音频,就出来一个pyttsx3音频
pyttsx3音频+歌曲mp3,就出来一个pyttsx3音频
歌曲mp3+pyttsx3音频,就出来歌曲+一段空白,后半段播放时会直接关闭
歌曲mp3+歌曲mp3,就能正常拼接

Json21 发表于 2020-9-1 11:30:29

quechua128 发表于 2020-9-1 08:15
使用pyttsx3库生成的音频

难怪了,pyttsx3生成并不是严格的mp3格式。可以使用pydub先将生成文件转换mp3格式:
pydub.AudioSegment.from_file('i.mp3').export('o.mp3', format='mp3')

然后再将2个文件进行合并

quechua128 发表于 2020-9-1 12:02:28

Json21 发表于 2020-9-1 11:30
难怪了,pyttsx3生成并不是严格的mp3格式。可以使用pydub先将生成文件转换mp3格式:




解决了。
另外还有个问题,为什么python3.6版本执行可以生成mp3文件,用3.8版本执行就没有生成mp3文件?

Json21 发表于 2020-9-1 18:40:14

quechua128 发表于 2020-9-1 12:02
解决了。
另外还有个问题,为什么python3.6版本执行可以生成mp3文件,用3.8版本执行就没有生成mp3文件?

哈哈,这个不清楚了,我这边是3.8的。
页: [1]
查看完整版本: 多个mp3音频合并成一个MP3