最近要想办法把录制的音视频进行拼接.
比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264
直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案还在探索中)
1.将分段的文件各自提取音频及视频,音频提取为wave流,视频提取为ts.
视频转为标准格式 音频转为wav
这里音频参数需要查看下原始视频文件中的音频信息
查看文件信息命令:
ffmpeg -i 1.mp4
转换命令:
ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1.ts
ffmpeg -i 1.mp4 -vn -ar 8000 -ac 1 -ab 64k -acodec pcm_alaw -f wav 1.wav
2.将wave流转为mp3格式,进行合并,将ts视频直接进行合并
ffmpeg -i 1.wav -f mp3 -acodec libmp3lame -y 1.mp3
ffmpeg -i "concat:1.mp3|2.mp3|3.mp3" -acodec copy output.mp3
ffmpeg -i "concat:1.ts|2.ts|3.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
3.将mp3格式音频与合并后的ts视频再次进行音视频合并
录像中音频和视频相差500毫秒, 这里重新调整,让音视频对齐
ffmpeg -i output.mp3 -i output.mp4 -filter_complex "adelay=500|500" output_all.mp4
4.得到最终的音视频文件
output_all.mp4
其他
其中提取音频为wave流在转为mp3格式有种脱裤子放屁感觉
因为对ffmpeg命令不熟悉,准备系统查看下,看是否可以直接提取mp3音频
看来可以啊,把俩命令合并一下就行了
ffmpeg -i 1.mp4 -c copy -ar 8000 -ac 2 -ab 64k -f mp3 -acodec libmp3lame -y 1.mp3
准备将这套方案写为脚本,进行自动化拼接.