使用ffmpeg在2个视频之间进行淡入淡出


27

我一直在尝试使用ffmpeg在2个视频剪辑之间实现淡入淡出过渡,但到目前为止失败了。我是ffmpeg的新手,并且主要依靠调整文档和现有在线示例中的内容。从到目前为止的内容来看,使用blendoverlay过滤器应有助于实现我的目标,但是我无法弄清楚命令行的详细信息以使其正常工作。

褪色和CONCAT过滤器是伟大的淡出视频1,淡入到视频2和CONCAT 2到1个夹子型的转变,但我会在得到一个命令,从过渡视频1视频2没有任何感激的帮助中间会变黑。我在任何地方都找不到确切解决此问题的示例,也许我在寻找错误的关键字...?

更具体地说,我的视频是mp4(h264视频,如果有问题的话,没有声音),每个都是5秒长,并且我已经从大约过渡了。视频1的4.5秒到视频2的0.5秒

与本教程使用MLT和帧进行的操作类似(有关淡入淡出的示例,请参见2:25),尽管我正在寻找一种仅在ffmpeg中执行此操作而不调用任何其他编的方法。 http://www.youtube.com/watch?v=3PRZ9L_KLdI

非常感谢任何指针或可能是命令行这样的淡入淡出,非常感谢!


Answers:


23

我建议这样做:

  • 创建与输出视频具有相同持续时间和分辨率的黑色背景
  • 向每个视频添加Alpha频道
  • 为每个视频添加淡入淡出效果
  • 在黑色背景的每个视频上使用叠加

因此,将交叉淡入淡出添加到2个视频(5秒)的命令应为:

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

这将在1秒(d = 1)的第4秒(st = 4)处将第一段视频淡出为alpha,在1秒(d = 1)的0秒(st = 0)处将第二段淡出并移动显示时间前进到4秒(+ 4 / TB)。然后,我们只剪切了9秒钟的黑色,将其缩放以输出视频大小并覆盖内容。

希望能帮助到你。


@ptQa,您好,非常感谢,淡入淡出效果就像一种魅力。尽管在输出视频中发生的是,它仅显示原始视频的左上部分,而其余帧丢失了。我查看了分辨率,输入为960 x 720,输出为320 x 240,但它不会按比例缩小整个视频,而是在左上方切出一个320 x 240的部分,并在输出视频中显示其余部分输入的视频丢失。您的命令行中是否有防止这种情况的附加功能?
Mugba 2014年

哦,我明白了,您还应该将黑色缩放为想要获得的分辨率。查看最新答案。我添加了比例来过滤图形。
ptQa 2014年

解决了,谢谢。我上传了一个示例视频,展示了交叉淡入淡出的情况,以防万一有人想看到它在运行中,youtu.be
JqorgXAjjTo

同样的问题; 我在自己的一些视频中使用了此方法的变体-谢谢。问题:如何将其修改为以与视频淡入淡出相同的方式交叉淡入淡出视频的音轨?
Jim Miller

1
顺便说一句,我认为答案的示例命令中有一个错误-应该是-i 1.mp4 -i 2.mp4...,对吧?
Jim Miller

7

这是我做的:

  • ffmpeg版本N-77197-gdf2ce13
  • 2个视频,每个4秒。
  • 需要加入它们之间的淡入淡出。
  • 视频为25 fps。

1)在第一行的末尾添加淡出(从浅到深),并在第二行开始时渐入(从暗到亮):

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24表示淡出将从帧76开始,并在24帧后结束= 1s淡出。

0:25表示淡入将在第0帧开始,并在25帧后结束。

2)合并2个视频

全部转换为TS

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

合并

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

谢谢:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php


6
这不是交叉淡入淡出。
Gyan

4
@Mulvya说了什么。交叉淡入淡出一个剪辑的同时将其淡入淡出。第一个剪辑的透明度在交叉淡入淡出的过程中稳定地增加;第二是透明度不断下降。
直觉

7

ffmpeg-concat是完成所需内容的最简单方法,它允许您使用大量性感的OpenGL过渡,默认情况下为crossfade。

ffmpeg-gl-transition是一个自定义ffmpeg过滤器,可让您使用GLSL在两个视频流之间平滑过渡。与此处列出的替代方法相比,此过滤器明显更易于使用和自定义。

该过滤器支持大名单的过渡类型,缺省设置为交叉淡入淡出。

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4

4
您是否考虑过向FFmpeg提交补丁?
llogan

1
我一定会的,我只需要解决一些小问题并进行更多测试。好决定!
fisch2

这是在官方FFmpeg中吗?我似乎找不到它
kraftydevil
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.