我正在尝试创建一个视频幻灯片演示,仅通过ffmpeg cli命令在每个图像之间淡入/淡出。在研究了几个小时之后,我发现唯一可行的方法是使用-filter_complex
参数并传递所有图像,并指定一个复杂的滤镜,该滤镜定义了多次淡入和淡出,以便我可以在帧之间进行切换。到目前为止,我拥有的命令:
ffmpeg -y -framerate 1/5 \
-loop 1 -i img-1.jpg \
-loop 1 -i img-2.jpg \
-loop 1 -i img-3.jpg \
-filter_complex \
"[1:v]fade=out:4:d=1,fade=in:5:d=1[fad1]; \
[2:v]fade=out:9:d=1,fade=in:10:d=1[fad2]; \
[3:v]fade=out:14:d=1,fade=in:15:d=1[fad3];" \
-c:v libx264 -r 25 -pix_fmt yuv420p test.mp4
这是执行此命令的输出:
ffmpeg version 2.6.4 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 5.1.1 (GCC) 20150618 (Red Hat 5.1.1-4)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, image2, from img-1.jpg':
Duration: 00:00:05.00, start: 0.000000, bitrate: 141 kb/s
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 72:72 DAR 16:9], 0.20 fps, 0.20 tbr, 0.20 tbn, 0.20 tbc
Input #1, image2, from img-2.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 17789 kb/s
Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 67:67 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #2, image2, from 'img-3.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 17764 kb/s
Stream #2:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 62:62 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
[AVFilterGraph @ 0xbc2a00] No such filter: ''
Error configuring filters.
我要做的就是创建一个视频幻灯片,其中在图像之间具有淡入淡出/过渡效果。任何帮助是极大的赞赏!
我找到了最好的答案,因为似乎不可能用一个命令来完成。首先,您使用视频滤镜(-vf)将淡入淡出应用于mpeg,从而为每个图像创建一个mpeg:
ffmpeg -y -loop 1 -i image-1.jpg -vf“ fade = t = in:st = 0:d = 0.5,fade = t = out:st = 4.5:d = 0.5” -c:v mpeg2video- t 5 -q:v 1 -pix_fmt yuv420p temp-1.mpeg
如果要在一个命令中执行此操作,这不是最漂亮的解决方案,但可以将命令连接为“ command1 && command2 && ....”,前提是上面的命令是“ command1”。一旦创建了这些中间mpeg,就可以将它们很好地连接到视频中:
ffmpeg -i temp-1.mpeg -i temp-2.mpeg -filter_complex'[0:v] [1:v] concat = n = 2:v = 1 [v]'-map'[v]'-c :v libx264 -r 30 -s 1280x720-纵横比16:9 -q:v 1 -pix_fmt yuv420p output.mp4
在此合并命令的“ concat = n = 2”部分中,“ 2”表示您拥有的输入数量。这将为您提供图像的视频幻灯片显示,开始时淡入0.5秒,结束时淡出0.5秒,从而产生图像之间的淡入效果。
另外,在将图像转换为中间mpeg时,可以通过将“ zoompan”视频过滤器添加到第一个命令来为每个图像添加平移/缩放。例如,您的第一个命令将变为:
ffmpeg -y -loop 1 -i image-1.jpg -vf“ zoompan = z ='min(zoom + 0.0015,1.5)':d = 125,fade = t = in:st = 0:d = 0.5,fade = t = out:st = 4.5:d = 0.5“ -c:v mpeg2video -t 5 -q:v 1 -pix_fmt yuv420p temp-1.mpeg
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句