FFmpeg剪辑视频

 原视频:

  • 视频1,时长1分钟
  • 视频2,时长2分钟10秒
  • 片头
  • 片尾
  • 水印,.jpg
  • 封面,.jpg
  • 标题,.jpg



剪辑思路:
  1. 将视频1下半部分3/5区域模糊
  2. 将模糊后的视频尺寸缩放到和视频2一致
  3. 将视频2从中间裁剪出一半宽尺寸的视频
  4. 将裁剪的视频提取出关键帧图片
  5. 将第一张和最后一张关键帧图片转为5秒视频
  6. 将两个5秒视频拼接到裁剪视频的前后
  7. 将拼接的视频再与拼接的视频再次拼接,使时长与视频1一致
  8. 将模糊后的视频1与拼接后的视频2按左右并列的方式拼接,可同时播放
  9. 将左右拼接后的视频添加动态水印,水印随着播放时间移动
  10. 将添加水印后的视频与标题拼接
  11. 将添加标题后的视频再与片头片尾拼接
  12. 将添加片头片尾的视频再添加上封面

使用命令:
  • 模糊
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:2160
set input=%1
set output=%~dp1%~n1_%~n0%~x1 
ffmpeg -y -i %input% -vf scale=%scale% %output%
  • 中间裁剪


  • 关键帧
set iframe=%~dp1%~n1_%~n0
set input=%1
set output=%~dp1%~n1_%~n0\%~n1_%%03d.jpg
md %iframe%

ffmpeg -y -i %input% -vf "select='eq(pict_type\,I)'" -vsync vfr %output% 
  • 图片转视频
set duration=5
set input=%1
set 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=%1
set output=%~dp1%~n1_%~n0%~x1

ffprobe -v error -select_streams v:0 -show_entries stream=duration -of csv=p=0 %input%  > tmp.txt
set /p duration=<./tmp.txt
echo %duration%

ffprobe -v error -select_streams v:0 -show_entries stream=width -of csv=p=0 %input% > tmp.txt
set /p main_w=<./tmp.txt
echo %main_w%

ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 %input% > tmp.txt
set /p main_h=<./tmp.txt
echo %main_h%

ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 %watermark% > tmp.txt
set /p mark_h=<./tmp.txt
echo %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.txt
set open=open.mp4
set close=close.mp4

echo file '%open%' > %openclose%
echo file '%~nx1' >> %openclose%
echo file '%close%' >> %openclose%

set output=%~dp1%~n1_%~n0.mp4

ffmpeg -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%

评论

此博客中的热门博文

Twitter视频下载地址分析