FFmpeg剪辑视频
原视频:
- 视频1,时长1分钟
- 视频2,时长2分钟10秒
- 片头
- 片尾
- 水印,.jpg
- 封面,.jpg
- 标题,.jpg
剪辑思路:
- 将视频1下半部分3/5区域模糊
- 将模糊后的视频尺寸缩放到和视频2一致
- 将视频2从中间裁剪出一半宽尺寸的视频
- 将裁剪的视频提取出关键帧图片
- 将第一张和最后一张关键帧图片转为5秒视频
- 将两个5秒视频拼接到裁剪视频的前后
- 将拼接的视频再与拼接的视频再次拼接,使时长与视频1一致
- 将模糊后的视频1与拼接后的视频2按左右并列的方式拼接,可同时播放
- 将左右拼接后的视频添加动态水印,水印随着播放时间移动
- 将添加水印后的视频与标题拼接
- 将添加标题后的视频再与片头片尾拼接
- 将添加片头片尾的视频再添加上封面
使用命令:
- 模糊
ffmpeg -y -i %input% -filter_complex "[0:v]crop=iw:ih*2/5:0:0[top];[0:v]crop=iw:ih*3/5:0:ih*2/5,boxblur=30[bottom];[top][bottom]vstack" -c:a copy %output%
- 尺寸
set scale=1920:2160set input=%1set output=%~dp1%~n1_%~n0%~x1
ffmpeg -y -i %input% -vf scale=%scale% %output%
- 中间裁剪
- 关键帧
set iframe=%~dp1%~n1_%~n0set input=%1set output=%~dp1%~n1_%~n0\%~n1_%%03d.jpgmd %iframe%ffmpeg -y -i %input% -vf "select='eq(pict_type\,I)'" -vsync vfr %output%
- 图片转视频
set duration=5set input=%1set output=%~dp1%~n1_%~n0.mp4:-loop 1 :因为只有一张图片所以必须加入这个参数(循环这张图片):-pix_fmt:指定图片输入格式(有yuv420,yuv444等各种格式):-t :图片转换成视频的持续时长,单位是秒(S),必须指定该值,否则会无限制生成视频:-vcodec libx264:生成视频的编码格式,这里指定的是x264
ffmpeg -y -r 30 -f image2 -loop 1 -i %input% -pix_fmt yuvj420p -t %duration% -vcodec libx264 %output%
- 视频左右拼接
ffmpeg -y -i %input1% -i %input2% -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" %output%
- 动态水印
set watermark=%watermark%set input=%1set output=%~dp1%~n1_%~n0%~x1ffprobe -v error -select_streams v:0 -show_entries stream=duration -of csv=p=0 %input% > tmp.txtset /p duration=<./tmp.txtecho %duration%ffprobe -v error -select_streams v:0 -show_entries stream=width -of csv=p=0 %input% > tmp.txtset /p main_w=<./tmp.txtecho %main_w%ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 %input% > tmp.txtset /p main_h=<./tmp.txtecho %main_h%ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 %watermark% > tmp.txtset /p mark_h=<./tmp.txtecho %mark_h%rem /a表示进行数值运算set /a v=%main_w%/%duration%echo %v%ffmpeg -y -i %input% -i %watermark% -lavfi "overlay=x=t*%v%:y=%main_h%-%mark_h%-30" -shortest %output%del tmp.txt
- 连接片头片尾
set openclose=openclose.txtset open=open.mp4set close=close.mp4echo file '%open%' > %openclose%echo file '%~nx1' >> %openclose%echo file '%close%' >> %openclose%set output=%~dp1%~n1_%~n0.mp4ffmpeg -y -f concat -i %openclose% -c copy %output%del %openclose%
- 封面
ffmpeg -y -i %input% -i %cover.jpg% -map 1 -map 0 -c copy -disposition:0 attached_pic %output%
评论
发表评论