ffmpeg是视频和音频处理的利器,各种转格式,提取视频中的图片,合并或者分隔音频,录制屏幕,加字幕啊…都是可以的。

因为有需求需要获取音频的长度然后来分割。

虽然ffmpeg -i xxx file也可以获取到音频的长度,但是可能需要正则去匹配,然后发现他们家族的ffprobe就可以直接返回json格式的音频信息。ffprobe是一个多媒体流分析工具。

大概命令如下:

ffprobe -v quiet -print_format json -show_format -show_streams 1.wav

python中可以这样子调用:

import subprocess as sp

try:
    command = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format','-show_streams', item["file_path"]]
    wav_info = sp.check_output(command, stderr=sp.STDOUT)
    print(wav_info)
except sp.CalledProcessError as e:
    print('get audio info by ffprobe error %s' % e.output)

分割音频就需要用到ffmpeg了,大概命令如下:

ffmpeg -i 1.wav -ss 00:00:03 -t 00:00:12 -acodec copy tmp.wav
源音频:source_mp3
开始位置:-ss
结束位置:-t
原始编码:-acodec

需要注意的是:input的音频格式必须和output的音频格式一致,不然要报格式错误!

python中可以这样子调用:

try:
    cut_command = ['ffmpeg', '-y', '-i', origin_wav, '-ss', start_time, '-t',end_time, '-acodec', 'copy', cut_wav]
    wav_cut_result = sp.check_call(cut_command)
    if wav_cut_result == 0:
        #todo success
except sp.CalledProcessError as e:
    print('cut audio info error %s' % e.output)

音频格式转换:

单声道&采样率16000
ffmpeg -f s16le -ar 16000 -ac 1 -i xx.pcm xx.wav

-f:强制格式
s16le:无压缩
-ar:采样率
-ac:声道
-i:输入文件

更多命令相关参数:ffmpeg --help