隰则有泮 发表于 2018-7-27 21:12

删删删删帖

[ 本帖最后由 隰则有泮 于 2019-4-13 19:45 编辑 ]\n\n........................

隰则有泮 发表于 2018-7-27 21:13

[ 本帖最后由 隰则有泮 于 2019-4-13 19:46 编辑 ]\n\n[ 本帖最后由 隰则有泮 于 2018-7-29 12:35 编辑 ]\n\n# 三、文件/音频处理 #
1.获取单词列表
~~~
def get_word_list(path):
    with open(path, 'r') as f:
      word_list =
    word_numbwes = len(word_list)
    if float(word_numbwes / 50) != float(word_numbwes // 50):
      part_numbers = word_numbwes // 50 + 1
      final_list = for i in range(0, part_numbers - 1)]
      final_list.append(word_list)
    else:
      part_numbers = word_numbwes // 50
      final_list = for i in range(0, part_numbers)]
    return final_list
~~~
(1)获取文本文件中每个单词,组成一个列表。
~~~
def get_word_list(path):
    with open(path, 'r', encoding='utf-8') as f:
      word_list =
~~~
(2)考虑到如果单词很多,这个列表就变得很大,制作出来的音频文件也会很大,所以,把所有的单词一五十个为一组分离,不足50个的按50个计算。以下的代码可以实现.
~~~
word_numbwes = len(word_list)
    if float(word_numbwes / 50) != float(word_numbwes // 50):
      part_numbers = word_numbwes // 50 + 1
      final_list = for i in range(0, part_numbers - 1)]
      final_list.append(word_list)
    else:
      part_numbers = word_numbwes // 50
      final_list = for i in range(0, part_numbers)]
~~~

2.进行音频处理。
(1)将准备过程中的ffmpeg包的bin文件夹下的ffmpeg.exe文件解压到和你py文件所在的同一目录下。(pydub MP3处理底层依赖ffmpeg)
(2)编写main函数.
~~~
import time
from pydub import AudioSegment
from io import BytesIO
~~~
第一个可以计算程序所需要的时间,第二个是音频处理库。第三个可以用BytesIO实现在内存中读写bytes。
~~~
def main(path, type=1):
    srart_time = time.time()
    all_parts_list = get_word_list(path)
    print('一共有{}个部分。'.format(len(all_parts_list)))

    for each_part_index, each_part in enumerate(all_parts_list):
      all_sounds = AudioSegment.empty()
~~~
创建空AudioSegment用来循环合成长音频。
~~~
      for each_word_index, each_word in enumerate(each_part):
            mp3_sound = download_mp3(get_page(each_word), type)
~~~
获得MP3数据
~~~
            if mp3_sound:
                all_sounds += AudioSegment.from_file(BytesIO(mp3_sound), format='mp3')+ AudioSegment.silent(duration=300)
                print('第{}部分:第{}个单词,{}的音频已下载!程序已用时{}秒'.format(each_part_index + 1, each_word_index, each_word,
                                                            time.time() - srart_time))
            else:
                all_sounds += AudioSegment.from_file('bi.wav', format='wav')+ AudioSegment.silent(duration=300)
                print('第{}部分:第{}个单词,{}的音频未找到!程序已用时{}秒'.format(each_part_index + 1, each_word_index, each_word,
                                                            time.time() - srart_time))
~~~
进行判断,如果有数据直接进行拼接,如果这个数据不存在,那么使用自定义的音频文件进行拼接。我这里使用了一个消音的‘bi’声。你自己可以任意替换。如果直接拼接,速度可能太快,因此我在两个音频之间加了零点三秒的静音。
`all_sounds.export('part_{}.mp3'.format(each_part_index + 1), format='mp3')`接着输出这部分的音频文件.

----------
这部分的完整代码如下
~~~
'''文件/音频处理模块'''
import time
from pydub import AudioSegment
from io import BytesIO

def get_word_list(path):
    with open(path, 'r', encoding='utf-8') as f:
      word_list =
    word_numbwes = len(word_list)
    if float(word_numbwes / 50) != float(word_numbwes // 50):
      part_numbers = word_numbwes // 50 + 1
      final_list = for i in range(0, part_numbers - 1)]
      final_list.append(word_list)
    else:
      part_numbers = word_numbwes // 50
      final_list = for i in range(0, part_numbers)]
    return final_list


def main(path, type=1):
    srart_time = time.time()
    all_parts_list = get_word_list(path)
    print('一共有{}个部分。'.format(len(all_parts_list)))

    for each_part_index, each_part in enumerate(all_parts_list):
      all_sounds = AudioSegment.empty()

      for each_word_index, each_word in enumerate(each_part):
            mp3_sound = download_mp3(get_page(each_word), type)
            if mp3_sound:
                all_sounds += AudioSegment.from_file(BytesIO(mp3_sound), format='mp3')+ AudioSegment.silent(duration=300)
                print('第{}部分:第{}个单词,{}的音频已下载!程序已用时{}秒'.format(each_part_index + 1, each_word_index, each_word,
                                                            time.time() - srart_time))
            else:
                all_sounds += AudioSegment.from_file('bi.wav', format='wav')+ AudioSegment.silent(duration=300)
                print('第{}部分:第{}个单词,{}的音频未找到!程序已用时{}秒'.format(each_part_index + 1, each_word_index, each_word,
                                                            time.time() - srart_time))
      all_sounds.export('part_{}.mp3'.format(each_part_index + 1), format='mp3')
      print('第{}部分的单词已制作好!已用时{}秒.'.format(each_part_index + 1, time.time() - srart_time))

    print('全部单词已制作好,程序共用{}秒!'.format(time.time() - srart_time))

~~~
# 四、最后的话 #
这个劣♂质的教程到这里差不多就结束了。实测一百个单词可以不用一分钟就解决。![](https://i.imgur.com/uR9VRvv.png)
源码我已经打包好了。(https://pan.baidu.com/s/12fl0Vaf6481fTZYbnwzTcQ "百度网盘")
密码: wd6j
其中ffmpeg.exe文件我是下载的64位版。如果你的系统是32位,那请自行到官网去下载。(详情上一篇)

隰则有泮 发表于 2018-7-27 21:14

本帖最后由 隰则有泮 于 2018-8-2 22:35 编辑

3楼备用
紫薯补

特种兵军品 发表于 2018-7-27 21:30

你都占完了

ydf1098542619 发表于 2018-7-27 21:43

python py os

yifeng 发表于 2018-7-27 21:44

感觉Python越来越像外国版的易语言,干啥用模块就行了{:301_978:}

moranyuyan 发表于 2018-7-27 22:07

谢谢分享

CJTRAND 发表于 2018-7-27 22:23

这个网址的生成很有规律

轻轻的我来了 发表于 2018-7-27 22:43

仰望一下大神

wangsm 发表于 2018-7-27 23:03

厉害哦,可以弄来学习一下。
页: [1] 2
查看完整版本: 删删删删帖