0.FFmpeg 库及其作用
- libavcodec:提供了一系列编码器的实现。
- libavformat:实现了流协议、容器格式和基础的 IO 访问。
- libavutil:包括了哈希器、解码器和各种工具函数。
- libavfilter:提供了各种音视频过滤器。
- libavdevice:提供了访问捕获设备和回放设备的接口。
- libswresample:实现了混音和重采样。
- libswscale:实现了色彩转换和缩放功能。
1.改变采样率,音频格式转换
将.mp3转为采样率为16000,通道数为1,.wav形式音频
ffmpeg -i jjxrcj5_51591148xi.mp3 -ac 1 -ar 16000 -y my.wav
将.flv转为mp4
ffmpeg -i "input.flv" -c copy "output.mp4"
2.使用ffmpeg裁剪和合并视频
剪切视频
使用 -ss 和 -t 选项,从第0秒开始,向后截取31秒视频,并保存
ffmpeg -ss 00:00:00 -i video.mp4 -vcodec copy -acodec copy -t 00:00:31 output1.mp4
从第01:33:30 开始,向后截取 00:47:16 视频,并保存
ffmpeg -ss 01:33:30 -i video.mp4 -vcodec copy -acodec copy -t 00:47:16 output2.mp4
合并视频
使用 TS格式拼接视频
先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。
ffmpeg -i output1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output1.ts
ffmpeg -i output2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output2.ts
为了减少命令的输入,需要一个filelist.txt文件,里面内容如下
file 'output1.ts'
file 'output2.ts'
合并视频命令
ffmpeg -f concat -i filelist.txt -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
mp4转换为指定的wav文件ffmpeg
ffmpeg -i output1.mp4 -ar 16000 -vn /home/test.wav
3.使用ffmpeg剪切和合并音频
剪切:-segment_time 10 表示 10s一切,-c copy ch01%02d.wav表示保存为ch0100开头,
ffmpeg -i 第01集_火星的呼吸.wav -f segment -segment_time 10 -c copy ch01%02d.wav
音频拼接和视频拼接操作差不到,需要先把文件列表写入到文本中。
ffmpeg -f concat -i list.txt -c copy "test.wav"
其中list.txt文件格式为
4.将视频MP4转为16kHZ音频
class Mp4_to_Wav:
def mp4towav(self, filepath, outpath):
'''
:param filepath: 输入的mp4视频位置
:param outpath: 输出的wav文件位置
:return:
'''
command = "ffmpeg -i" + " " + filepath + " " + "-ar 16000 -vn" + " " + outpath + ".wav"
subprocess.call(command,shell=True)