title: ffmpeg images to video with different start times and durations
body: <p>I've recently learned of FFMPEG's existence and I am trying to use it on my wordpress site.</p>
  
  <p>On the site I am working on a html/php/js form page that lets users upload pictures, and set when the image shows and for how long.</p>
  
  <p>Right now the code I have is only showing one image for the entire video.</p>
  
  <pre><code>&lt;?php if (isset($_POST['button'])) { 
  echo shell_exec('ffmpeg -t '.$cap_1.' -i /myurl/beach-1866431.jpg -t '.$cap_2.' -i /myurl/orlando-1104481-1.jpg -filter_complex "scale=1280:-2" -i /myurl/audio.mp3 -c:v libx264 -pix_fmt yuv420p -t 30 -y /myurl/'.$v_title.'.mp4 2&gt;&amp;1');
   } ?&gt;
  </code></pre>
  
  <p>I tried setting "-t" for the duration with my php variables but nothing changes and I cant figure out what to use for the start time of each image. </p>
  
  <p>Also, when writing shell_exec commands, instead of it all being on one line, is there a way to write working command code in php files with line breaks? For example - </p>
  
  <pre><code> &lt;?php if (isset($_POST['button'])) { 
      echo shell_exec('ffmpeg -t '.$cap_1.' -i /myurl/beach-1866431.jpg 
      -t '.$cap_2.' -i /myurl/orlando-1104481-1.jpg 
      -filter_complex "scale=1280:-2" 
      -i /myurl/audio.mp3 
      -c:v libx264 -pix_fmt yuv420p -t 30 -y /myurl/'.$v_title.'.mp4 2&gt;&amp;1');
           } ?&gt;
  </code></pre>
  
  <p><strong>EDIT</strong></p>
  
  <p>So far the concat text file seems to work, however I do not know how to set the start times for each image ---</p>
  
  <pre><code>ffconcat version 1.0
  file /path/beach-1866431.jpg
  duration 3
  file /path/orlando-1104481-1.jpg
  duration 5
  file /path/beach-1866431.jpg
  </code></pre>
  
  <p>And ffmpeg command -</p>
  
  <pre><code>shell_exec('ffmpeg -f concat -safe 0 -i /path/file.txt -filter_complex "scale=1280:-2" -i /path/audio.mp3 -c:v libx264 -pix_fmt yuv420p -t 30 -y /path/'.$v_title.'.mp4 2&gt;&amp;1');
  </code></pre>
  
  <p><strong>EDIT 2</strong></p>
  
  <p>Using the concat method suggested, my code now looks like this --</p>
  
  <pre><code>&lt;?php if (isset($_POST['button'])) { 
  echo shell_exec('ffmpeg \
  -loop 1 -framerate 24 -t 10 -i goldmetal.jpg \
  -i 3251.mp3 \
  -loop 1 -framerate 24 -t 10 -i cash-register-1885558.jpg \
  -loop 1 -framerate 24 -t 10 -i ice-1915849.jpg \
  -filter_complex "[0:v][1:a][2:v][3:v]concat=n=4:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 /path/'.$v_title.'.mp4 2&gt;&amp;1');
   } ?&gt;
  </code></pre>
  
  <p>But I'm getting this error -- </p>
  
  <pre><code>**Stream specifier ':v' in filtergraph description [0:v][1:a][2:v][3:v]concat=n=4:v=1:a=1[v][a] matches no streams.**
  </code></pre>
  
  <p><strong>EDIT 3</strong></p>
  
  <p>I almost got it working as needed, using 2 commands, one for the images and fade, the other to combine the audio. The only issue I'm having is changing the time each image shows up. --</p>
  
  <pre><code>echo shell_exec('ffmpeg \
  -loop 1 -t 5 -i '.$thepath .'/'.$v_pix1.' \
  -loop 1 -t 5 -i ' .$thepath . '/cash-register-1885558.jpg \
  -loop 1 -t 5 -i ' .$thepath . '/ice-1915849.jpg \
  -loop 1 -t 5 -i '.$thepath .'/'.$v_pix1.' \
  -loop 1 -t 5 -i ' .$thepath . '/ice-1915849.jpg \
  -filter_complex \
  "[0:v]setpts=PTS-STARTPTS,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v0]; \
   [1:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v1]; \
   [2:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v2]; \
   [3:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v3]; \
   [4:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v4]; \
   [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -y '.$thepath .'/fadeout.mp4 2&gt;&amp;1');
  
  
  echo shell_exec('ffmpeg \
  -i '.$thepath .'/fadeout.mp4 \
  -i '.$thepath .'/3251.mp3 \
  -filter_complex "[0:v:0][1:a:0] concat=n=1:v=1:a=1 [vout] [aout]" -map "[vout]" -map "[aout]" -c:v libx264 -r 1 -y '.$thepath .'/mergetest.mp4 2&gt;&amp;1');
  </code></pre>