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