title: How to encode jpeg images to H264 very fast (transform images to video)
body: <p>I have 30 JPEG images (.jpg) at a resolution of 480 x 640.
  Each image takes aboout 20KB (all of them takes about 600KB).</p>
  
  <p>I am using <strong>FFmpeg</strong> command to encode these images into a video in <strong>H264</strong> format.</p>
  
  <p>I need this to be done very fast - about 1 second.</p>
  
  <p>Using the classic command:</p>
  
  <pre><code>ffmpeg -y  -f  image2   -r 1/5   -i image_%d.jpg   -c:v libx264   -r 30   video.mp4
  </code></pre>
  
  <p>takes about <strong>90 seconds</strong>.</p>
  
  <p>After adding  <code>-preset ultrafast</code>:</p>
  
  <pre><code>ffmpeg -y  -f  image2   -r 1/5   -i image_%d.jpg   -c:v libx264   -preset ultrafast    -r 30   video.mp4
  </code></pre>
  
  <p>the encoding takes about <strong>15 seconds</strong> which is much better, but still not enough</p>
  
  <p>I've tried others parameters also, like:</p>
  
  <pre><code>-profile:v baseline
  
  -qscale:v
  
  -b:v 1000k
  
  -crf 24
  </code></pre>
  
  <p>but the encoding time does not fall below 10 seconds.</p>
  
  <p>I'm not familiar with FFmpeg commands nor with the parameters I need to use, and this is the reason I post here this question.</p>
  
  <p>The video quality needs to be ok, doesn't need to be perfect.</p>
  
  <p>As a note: I am running these commands in an Android application where I have the ffmpeg executable, using an ProcessBuilder.</p>
  
  <p>Reply1 (to Robert Rowntree):</p>
  
  <pre><code>ArrayList&lt;String&gt; l2 = new ArrayList&lt;String&gt;();
  
          //l2.add("ffmpeg");
          l2.add("/data/data/" + packageName + "/ffmpeg");
          l2.add("-y");
          l2.add("-loop");
          l2.add("1");
  
          l2.add("-i");
          l2.add("frame_%d.jpg");
  
  //            l2.add("-t");
  //            l2.add(strngs[3]);
  
          l2.add("-r");
          l2.add("1/2");
          l2.add("-preset");
          l2.add("superfast");
          l2.add("-tune");
          l2.add("zerolatency");
  
  //            l2.add("-pass");
  //            l2.add(Integer.valueOf(pass).toString());
  
          l2.add("-vcodec");
          l2.add("libx264");
          l2.add("-b:v");
          l2.add("200k");
          l2.add("-bt");
          l2.add("50k");
          l2.add("-threads");
          l2.add("0");
          l2.add("-b_strategy");
          l2.add("1");
  
  //            if(pass ==1){
  //                l2.add("-an");
  //            } else {
  //                l2.add("-acodec");
  //                l2.add("copy");
  //            }
  
          l2.add("-f");
          l2.add("mp4");
          l2.add("-strict");
          l2.add("-2");
  //            l2.add("-passlogfile");
  //            l2.add(strngs[4]);
  
  //            if(pass ==1){
  //                l2.add("/dev/null");
  //            } else {
  //                l2.add(strngs[5]);
  //            }
  
          l2.add("video.mp4");
          //return l2;
  </code></pre>