前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python——初识音频剪辑

Python——初识音频剪辑

作者头像
Ed_Frey
发布2019-09-03 17:39:14
1.4K0
发布2019-09-03 17:39:14
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠

1

曲折的音频剪辑历程

我就百度搜音频剪辑软件,首页随便下载一个就开始cut,按照夫人的要求cut掉几段可省略的。然后问题来了!!!

cut完要导出,提示要付费,心里千万只?奔袭而过,这么low的软件功能还要收费??想着十块八块就直接算了,耽误我时间,结果注册了一看要30元,而且有效期只有3个月???

我还是自己写个代码来cut吧,一劳永逸。

然后我就网上开始搜罗资料,写啊写,剪啊剪,本来中午要推送的按键精灵帖子,愣是拖到了晚上(当然coding不难,难的是用户需求频繁变更

索性,把python的一起发了吧……

代码实现了剪切片段、片段合并,感兴趣的小伙伴可以直接拿去试用。

最末一段的倍速播放函数,AudioSegment模块研究半天没找到有加速相关的函数,于是就用了一个视频相关的模块去处理??反正最后是倍速成功了,不过有报出一个异常,时间关系就先不求甚解吧,欢迎各路大神来指点一二。

2

coding

代码语言:javascript
复制
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# @Time    : 2019-09-01 10:25
# @Author  : Ed Frey
# @File    : clips.py
# @Software: PyCharm
代码语言:javascript
复制
from pydub import AudioSegment
from moviepy.editor import *

def slice(start,end,input_path,output_path):
    '''
    to cut a slice of audio needed, from start time to end time ,unit is millisecond.
    :param start:
    :param end:
    :param input_path:
    :param output_path:
    :return:
    '''
    input_music = AudioSegment.from_mp3(input_path)
    output_music = input_music[start:end]
    output_music.export(output_path, format="mp3")
    # print(len(output_music), output_music.channels)
    
    
def merge(output_path,input_path_list=[]):
    '''
    to merge different slices in path_list together by order
    :param output_path:
    :param path_list:
    :return:
    '''
    if input_path_list is None:
        return None
    playlist = AudioSegment.empty()
    for sound in input_path_list:
        input_music = AudioSegment.from_mp3(sound)
        playlist += input_music
    playlist.export(output_path, format="mp3")
    # print(len(playlist), playlist.channels)
    # 如果需要对音频做封面、填写专辑名称、作者信息,可以用下方的格式输出
    # output_music.export("/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/combine_3.mp3", format="mp3", bitrate="192k",
    # tags={"album": "专辑名称", "artist": "歌手"}, cover="/photo.jpeg")
    return True
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
def speedup(input_path,output_path,rate):
    '''
    to speedup video playing.
    :param input_path:
    :param output_path:
    :param rate:
    :return:
    '''
    mp3 = VideoFileClip(input_path)
    result = mp3.fl_time(lambda t:rate*t,apply_to=['mask','video','audio']).set_end(mp3.end/rate)
    result.write_videofile(output_path)
代码语言:javascript
复制
代码语言:javascript
复制
if __name__=="__main__":
代码语言:javascript
复制
    input_path = "/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/jingwei.mp3"
    output_path = "/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/output1.mp3"
    start = 183000
    end = 238600
代码语言:javascript
复制
    slice(start,end,input_path,output_path)
代码语言:javascript
复制
代码语言:javascript
复制
# merge(output_path,path_list=["/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/output1.mp3",
#                              "/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/output2.mp3",
#                              "/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/output3.mp3",
#                              "/Users/Ed_Frey/Desktop/mp3_cut/audio_clip/output4.mp3"])
#

PS: 因为这次剪辑的故事要拿去评选,所以昨天临时下架了,等后面再播放给大家听。

开头的故事也一样精彩吧~是前一阵刚去电台录播的一段故事

奔跑的键盘侠原创作品 | 尽情分享朋友圈 | 转载请联系授权

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档