当前位置:   article > 正文

ffmpeg 视频拼接 淡入淡出

ffmpeg 视频拼接 淡入淡出

ffmpeg version 6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
  configuration: --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-libmp3lame --enable-gpl --disable-static --enable-shared --enable-version3 --enable-nonfree --enable-pthreads --enable-postproc --enable-ffplay --enable-libx264 --disable-x86asm --enable-filter=xfade
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100

源码安装,打开:--enable-filter=xfade windows上官方最新的已经打开此滤镜,如下的命令应该时没有使用xfade

/usr/local/ffmpeg/bin/ffmpeg -i only_1.mp4 -i only_3.mp4 -f lavfi -i color=black -filter_complex "[0:v]format=pix_fmts=yuva420p,fade=t=out:st=30:d=5:alpha=1,setpts=PTS-STARTPTS[va0];[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=5:alpha=1,setpts=PTS-STARTPTS+30/TB[va1];[2:v]scale=960x720,trim=duration=9[over];[over][va0]overlay[over1];[over1][va1]overlay=format=yuv420[outv]" -vcodec libx264 -map [outv] com_4.mp4

only_1.mp4 第一个视频 264 30秒时长,only_3.mp4 第二个视频264 44秒,合并之后,74秒!

这是一个复杂的 ffmpeg 命令,它包含了多个输入文件和复杂的视频处理过程。让我逐步解释这个命令的各个部分:

  1. -i only_1.mp4 -i only_3.mp4 -f lavfi -i color=black

    • -i only_1.mp4 和 -i only_3.mp4:指定两个输入视频文件。
    • -f lavfi -i color=black:引入一个黑色背景作为第三个输入流。
  2. -filter_complex "[0:v]format=pix_fmts=yuva420p,fade=t=out:st=30:d=5:alpha=1,setpts=PTS-STARTPTS[va0];[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=5:alpha=1,setpts=PTS-STARTPTS+30/TB[va1];[2:v]scale=960x720,trim=duration=9[over];[over][va0]overlay[over1];[over1][va1]overlay=format=yuv420[outv]"

    • -filter_complex 表示后面紧跟着复杂的滤镜图。
    • [0:v]format=pix_fmts=yuva420p,fade=t=out:st=30:d=5:alpha=1,setpts=PTS-STARTPTS[va0]:处理第一个输入视频,将其转换成 yuva420p 格式,并添加一个在第 30 秒开始持续 5 秒的淡出效果。
    • [1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=5:alpha=1,setpts=PTS-STARTPTS+30/TB[va1]:处理第二个输入视频,将其转换成 yuva420p 格式,并添加一个在视频开始时持续 5 秒的淡入效果。
    • [2:v]scale=960x720,trim=duration=9[over]:对第三个输入流进行缩放,然后仅保留 9 秒的视频内容。
    • [over][va0]overlay[over1] 和 [over1][va1]overlay=format=yuv420[outv]:将淡入淡出效果叠加到第三个输入流上,并且最终输出为格式为 yuv420 的视频流 [outv]
  3. -vcodec libx264 -map [outv] com_4.mp4

    • -vcodec libx264:使用 libx264 编码器进行视频编码。
    • -map [outv]:选择之前处理得到的视频流 [outv] 作为输出流。
    • com_4.mp4:指定输出文件名为 com_4.mp4

综合来看,这个命令的作用是将两个输入视频进行淡入淡出效果处理,并与一个黑色背景叠加后输出为一个新的视频文件 com_4.mp4。这个命令结合了视频滤镜、叠加和编码操作,实现了比较复杂的视频处理功能。

测试了很多,尤其是参数稍微调整,就会没有效果,或者第一个视频卡死,或者整个都是粉色条带,如上的命令是最后验证ok的命令

如下发现的一个可以合并不通视频格式:

https://gist.github.com/imcaspar/8778002

在windows上测试过官方提供的:更简单的滤镜

ffmpeg -i only_1.mp4 -i only_2.mp4 -filter_complex xfade=transition=fade:duration=1:offset=5 outputVideo_3.mp4

第一个视频时长:30秒,第二个视频也是30秒,同一路流的不通时间段的2段视频,视频参数完全一致,编码,帧率,分辨率,音频格式,完全一致的情况下!

让我逐步解释这个命令的各个部分:

  1. -i only_1.mp4 -i only_2.mp4

    • -i only_1.mp4 和 -i only_2.mp4:指定两个输入视频文件。
  2. -filter_complex xfade=transition=fade:duration=1:offset=5

    • -filter_complex 表示后面紧跟着复杂的滤镜图。
    • xfade=transition=fade:duration=1:offset=5:使用 xfade 滤镜来实现交叉淡入淡出效果。
      • transition=fade:指定过渡效果为淡入淡出。
      • duration=1:设置过渡效果持续时间为 1 秒。
      • offset=5:设置第二个视频的淡入效果在第 5 秒开始。
  3. outputVideo_1.mp4

    • outputVideo_1.mp4:指定输出文件名为 outputVideo_1.mp4

综合来看,这个命令的作用是将两个输入视频文件进行交叉淡入淡出效果处理,其中第二个视频在第 5 秒开始淡入,并且整个过渡效果持续 1 秒。处理完成后,生成一个新的视频文件 outputVideo_1.mp4 包含了淡入淡出过渡效果。

官方的一个xfade的说明:

CrossFade, Dissolve, and other Effects using FFmpeg's xfade Filter - OTTVerse

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/272054
推荐阅读
相关标签
  

闽ICP备14008679号