1

I'm trying to create a video from a set of images, adding texts to each image that slide from one side to the center ( one left to right, another right to left ), with fading between each videos ( not between text but between video ).

Actually I have this code that generare a simple video, with text sliding and fade:

ffmpeg -y \ -loop 1 -t 10 -i img001.jpg \ -loop 1 -t 10 -i img002.jpg \ -filter_complex \ "\ [0:v]\ drawtext=fontfile='IndieFlower.ttf':enable='between(t,0,5)':\ text='Caption 1 Scena 1':\ fontsize=60:fontcolor=white:\ x=t*300*lte(t*300\,(w-text_w)/2)+(w-text_w)/2*gt(t*300\,(w-text_w)/2):y=h-line_h-10:\ shadowx=3:shadowy=3:shadowcolor=black:\ boxborderw=10:box=1:[email protected],\ drawtext=fontfile='IndieFlower.ttf':enable='between(t,5,10)':\ text='Caption 2 Scena 1':\ fontsize=60:fontcolor=white:\ x=(w-(t-5)*500)*gt(w-(t-5)*500\,(w-text_w)/2)+(w-text_w)/2*lte(w-(t-5)*500\,(w-text_w)/2):y=h-line_h-10:\ shadowx=3:shadowy=3:shadowcolor=black:\ boxborderw=10:box=1:[email protected]\ [final1];\ [1:v]\ fade=t=in:st=0:d=1,\ drawtext=fontfile='IndieFlower.ttf':enable='between(t,0,5)':\ text='Caption 1 Scena 2':\ fontsize=60:fontcolor=red:\ x=t*300*lte(t*300\,(w-text_w)/2)+(w-text_w)/2*gt(t*300\,(w-text_w)/2):y=h-line_h-10:\ shadowx=3:shadowy=3:shadowcolor=white:\ boxborderw=10:box=1:[email protected],\ drawtext=fontfile='IndieFlower.ttf':enable='between(t,5,10)':\ text='Caption 2 Scena 2':\ fontsize=60:fontcolor=red:\ x=(w-(t-5)*500)*gt(w-(t-5)*500\,(w-text_w)/2)+(w-text_w)/2*lte(w-(t-5)*500\,(w-text_w)/2):y=h-line_h-10:\ shadowx=3:shadowy=3:shadowcolor=white:\ boxborderw=10:box=1:[email protected]\ [final2];\ [final1][final2]concat[final] " \ -pix_fmt yuvj422p -t 20 -map '[final]' o.mp4 

It works well, but now, I'd like to add a zoompan effect to both of the images; so I change the code as follow:

[0:v]\ format=yuvj422p, scale=iw*10:ih*10,\ zoompan=z='min(zoom+0.0015,1.5)':d=500:x='iw/2-(iw/zoom/2)':y='ih/2 (ih/zoom/2)':s=640x480,\ drawtext=fontfile='IndieFlower.ttf':enable='between(t,0,5)':\ ... [1:v]\ format=yuvj422p, scale=iw*10:ih*10, \ zoompan=z='min(zoom+0.0015,1.5)':d=500:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480,\ fade=t=in:st=0:d=1,\ ... 

but this does not work; in the final video there is only the first "video", with the zoompan, the second video does not appear at all!

What I'm doing wrong? I'd like to create a simple zoompan between two video.

1 Answer 1

3

zoompan is a weirdly designed filter. It operates on individual frames, whereas most filters operate on a sequence of pictures, whether they are fed from a video file or an image sequence. pzoom should be used for a looped image, and frame sequence generation should be stopped by making d=1.

Change to

zoompan=z='min(pzoom+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2 (ih/zoom/2)':s=640x480 

This will fix the zoompan.

4
  • Thanks! It works! Really Thanks! I just have these messages: [swscaler @ 0x7f3d60016880] deprecated pixel format used, make sure you did set range correctly, I'm using -pix_fmt yuvj422p, is not correct? Commented Feb 9, 2018 at 15:49
  • 1
    For final output, yuv420p is standard. Commented Feb 9, 2018 at 15:58
  • Thanks, it works. To finish my job, I need to add an mp3 to the process. Should I open a new Ask Question, or you can suggest me how to add this new input to the command above? I tryed adding [final1][final2][2:0]concat=n=2:v=1:a=1[finalVideo][finalAudio] but it does not work ( mp3 is the third input ) Commented Feb 9, 2018 at 17:36
  • You don't need to add the audio to the concat. Remove the -map [final] Commented Feb 9, 2018 at 18:14

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.