FFMPEG 实现视频拼接,中间插入图片实现过渡

时间:2024-03-26 17:27:51

功能:这里实现视频开始有一段3s总体介绍,每段视频开始前显示一张介绍本段视频内容的图片,最后将四段视频进行拼接

文件:

    audio_handle.txt            用于音频合成

    exe.bat                          视频合成脚本

    ffmpeg                           合成工具

    get_audio.mp4              无声视频,用于获取过渡时音频

    src_part*.mp4                用于拼接的视频

    *.png                              过渡过程插入的图片

    video_handle.txt            用于视频拼接

FFMPEG 实现视频拼接,中间插入图片实现过渡

使用方法:

    按自己需求修改exe.bat、audio_handle.txt、video_handle.txt文件,双击 exe.bat 执行。最后生成的视频文件为output.mp4。

exe.bat :

ffmpeg -i src_part1.mp4 -b:v 11500k -s 1080*720 mid1.h264	% 生成h264视频数据 %
ffmpeg -i src_part2.mp4 -b:v 11500k -s 1080*720 mid2.h264
ffmpeg -i src_part3.mp4 -b:v 11500k -s 1080*720 mid3.h264
ffmpeg -i src_part4.mp4 -b:v 11500k -s 1080*720 mid4.h264
ffmpeg -i src_part1.mp4 mid1.mp3			        % 生成mp3音频数据 %
ffmpeg -i src_part2.mp4 mid2.mp3
ffmpeg -i src_part3.mp4 mid3.mp3
ffmpeg -i src_part4.mp4 mid4.mp3
ffmpeg -i get_audio.mp4 void.mp3					        % 无声音频数据 %
ffmpeg -i void.mp3 -t 3 a_3.mp3						        % 3s无声音频数据 %
ffmpeg -i void.mp3 -t 1.8 a_1_8.mp3					        % 1.8s无声音频数据 %
ffmpeg -loop 1 -f image2 -i head.png -vcodec libx264 -r 30 -t 4 head.mp4	% 插入视频 %
ffmpeg -loop 1 -f image2 -i tip1.png -vcodec libx264 -r 30 -t 3 insert1.mp4
ffmpeg -loop 1 -f image2 -i tip2.png -vcodec libx264 -r 30 -t 3 insert2.mp4
ffmpeg -loop 1 -f image2 -i tip3.png -vcodec libx264 -r 30 -t 3 insert3.mp4
ffmpeg -loop 1 -f image2 -i tip4.png -vcodec libx264 -r 30 -t 3 insert4.mp4
ffmpeg -loop 1 -f image2 -i tail.png -vcodec libx264 -r 30 -t 4 tail.mp4
ffmpeg -i mid1.h264 -b:v 11500k mid1.mpg				        % 转化为mpg格式 %
ffmpeg -i mid2.h264 -b:v 11500k mid2.mpg
ffmpeg -i mid3.h264 -b:v 11500k mid3.mpg
ffmpeg -i mid4.h264 -b:v 11500k mid4.mpg
ffmpeg -i head.mp4 -b:v 1000k -s 1080*720 -t 3 head.mpg
ffmpeg -i insert1.mp4 -b:v 1000k -s 1080*720 -t 2 insert1.mpg
ffmpeg -i insert2.mp4 -b:v 1000k -s 1080*720 -t 2 insert2.mpg
ffmpeg -i insert3.mp4 -b:v 1000k -s 1080*720 -t 2 insert3.mpg
ffmpeg -i insert4.mp4 -b:v 1000k -s 1080*720 -t 2 insert4.mpg
ffmpeg -i tail.mp4 -b:v 1000k -s 1080*720 -t 2 tail.mpg
ffmpeg -f concat -i audio_handle.txt -c copy dest.mp3		% 音频拼接 %
ffmpeg -f concat -i video_handle.txt -c copy dest.mp4		% 视频拼接 %
ffmpeg -i dest.mp3  -i dest.mp4 -b:v 11500k output.mp4	        % 音视频合成 %
del *.h264		                                        % 删除中间文件 %
del *.mp3
del *.mpg
del head.mp4
del insert1.mp4
del insert2.mp4
del insert3.mp4
del insert4.mp4
del tail.mp4
del dest.mp4

audio_handle.txt :

file 'a_3.mp3'            % 3s的开头 %
file 'a_1_8.mp3'          % 1.8s 第一段视频介绍时间 %
file 'mid1.mp3'           % 第一段音频 %
file 'a_1_8.mp3'          % 1.8s 第二段音频介绍时间 %
file 'mid2.mp3'           % ...... %
file 'a_1_8.mp3'
file 'mid3.mp3'
file 'a_1_8.mp3'
file 'mid4.mp3'
file 'a_1_8.mp3'

video_handle.txt:

file 'head.mpg'         % 3s 总体开头 %  
file 'insert1.mpg'      % 第一段视频介绍 %
file 'mid1.mpg'         % 第一段拼接视频 %
file 'insert2.mpg'      % 第二段视频介绍 %
file 'mid2.mpg'         % ...... % 
file 'insert3.mpg'
file 'mid3.mpg'
file 'insert4.mpg'
file 'mid4.mpg'
file 'tail.mpg'

-----------------------------------------------------------------------------------------------------------------------------------------

出现的问题及解决方法:

    问题:直接用 mp4 视频进行拼接,文件输出出错,生成的视频不能播放。

    解决:将 mp4 格式进行转换,生成 mpg 格式再进行拼接则能正常播放。

 

    问题:用图片生成的 mp4 视频文件与源视频进行拼接时出现错误,音频数据丢失。

    解决:将 mp4 音视频分成音频数据和视频数据,最后再进行拼接。

 

    问题:最后合成的音视频播放不同步。

    解决:用 ffprobe 查看音视频长度,将过渡的时间改为1.8s,调节音频码率。