ffmpeg进行音频格式转换与切割

借助ffmpeg工具对音频格式进行转换,具体代码如下:

# _*_ coding:UTF-8 _*_
import os
def convert(input_dir, output_dir, au_format):
    """
    :param input_dir:输入视频的上级路径
            output_dir:保存文件的路径
            au_format:输出音频格式
            ffmpeg主要参数说明:主要参数: -i 设定输入流 -f 设定输出格式 -ss 开始时间
            视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的            宽与高 -aspect
            设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
            音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频
            比特率决定处理1s的编码流需要多少bits,设置用-b选项。区分音视频用-b:a和-b:v
    :return:
    """
    #遍历文件下的每一个以".flv"结尾的视频
    for file in os.listdir(input_dir):
        first_name = file.split('.')[0]
        if os.path.splitext(file)[1] == ".flv":
            # 获取视频文件的绝对路径
            file_name = input_dir + "/" + file
            print(file_name)
            #对输出的音频文件命名(原视频文件名+后缀)
            audio_name = first_name + '.' +au_format
            #判断该音频文件是否存在,若存在则跳过
            if audio_name in os.listdir(input_dir):
                continue
            output_path = output_dir + "/" + audio_name
            print(output_path)
            ffmpeg(file_name, output_path, au_format)
            # os.system("ffmpeg -i {convert_name} -ar 44100 -ac 2 -b 16k, -f mp3  {save_name} ".format(convert_name=file_name,
            #         save_name = os.path.join(dir_name, audio_name)))
    print("finished!")
    return(0)

def ffmpeg(input_path, output_path, au_format):
    """
       调用ffmpeg命令,执行转换过程(比特率一般为128kbps、196kbps;要求不高的话,可以使用32kbps,减小体积)
       注意:比特率的单位为bps
       :param src_path: 输入视频文件路径
              dst_path: 输出文件路径
       :return: none
       """
    os.system("ffmpeg -i {0} -vn -ar 16k -ac 1 -b:a 16k -f {1} {2}".format(input_path, au_format, output_path))

def main():
    input_dir = "E:/实习/data"
    output_dir = "E:/实习/data"
    au_format = "wav"
    convert(input_dir, output_dir, au_format)

if __name__ == "__main__":
    main()

借助ffmpeg对音频进行切割

具体代码如下:

 #_*_ coding:UTF-8 _*_
import os
def audio_cut(audio_in_path, audio_out_path, start_time, dur_time):
    """
    :param audio_in_path: 输入音频的绝对路径
    :param audio_out_path: 切分后输出音频的绝对路径
    :param start_time: 切分开始时间
    :param dur_time: 切分持续时间
    :return:
    """
    os.system("ffmpeg -i {in_path} -vn -acodec copy -ss {Start_time} -t {Dur_time}  {out_path}".format(in_path = audio_in_path,
                out_path = audio_out_path, Start_time = start_time, Dur_time = dur_time))

def main():
    audio_in_path = "E:/实习/data/双师东方-高一化学尖子-1.wav"
    audio_out_dir = "E:/实习/data/audio_cut"
    start_time = "00:20:00"
    dur_time = "00:01:00"
    audio_name = os.path.split(audio_in_path)[-1]
    print(audio_name)
    audio_out_path = audio_out_dir + "/" + audio_name
    print(audio_out_path)
    audio_cut(audio_in_path, audio_out_path, start_time, dur_time)

if __name__ == "__main__":
    main()

你可能感兴趣的:(音频处理)