title: Is it possible to make VFR MP4 from a raw h264 bitstream using ffmpeg?
body: <p>I have a raw h264 bitstream that I'd like to put into MP4 using ffmpeg but ffmpeg always produces it with a constant frame rate and I need it to be the variable frame rate.</p>
  <p>So lets say I have an MP4 with variable frame rate (output from MediaInfo):</p>
  <pre><code>Video
  ID                                       : 1
  Format                                   : AVC
  Format/Info                              : Advanced Video Codec
  Format profile                           : Baseline@L4.2
  Format settings                          : 1 Ref Frames
  Format settings, CABAC                   : No
  Format settings, Reference frames        : 1 frame
  Codec ID                                 : avc1
  Codec ID/Info                            : Advanced Video Coding
  Duration                                 : 17 min 38 s
  Bit rate                                 : 233 kb/s
  Width                                    : 1 920 pixels
  Height                                   : 1 080 pixels
  Display aspect ratio                     : 16:9
  Frame rate mode                          : Variable
  Frame rate                               : 27.879 FPS
  Minimum frame rate                       : 2.545 FPS
  Maximum frame rate                       : 43.478 FPS
  Color space                              : YUV
  Chroma subsampling                       : 4:2:0
  Bit depth                                : 8 bits
  Scan type                                : Progressive
  Bits/(Pixel*Frame)                       : 0.004
  Stream size                              : 29.4 MiB (99%)
  Codec configuration box                  : avcC
  </code></pre>
  <p>and I extract H264 out of it:</p>
  <pre><code>ffmpeg -i input.mp4 -vcodec copy -an -bsf:v h264_mp4toannexb input.h264
  ``
  
  Just to make it Mp4 once again:
  
  </code></pre>
  <p>ffmpeg -i input.h264 -c copy output.mp4
  ``</p>
  <p>output.mp4 is now a constant frame rate:</p>
  <pre><code>Video
  ID                                       : 1
  Format                                   : AVC
  Format/Info                              : Advanced Video Codec
  Format profile                           : Baseline@L4.2
  Format settings                          : 1 Ref Frames
  Format settings, CABAC                   : No
  Format settings, Reference frames        : 1 frame
  Codec ID                                 : avc1
  Codec ID/Info                            : Advanced Video Coding
  Duration                                 : 19 min 40 s
  Bit rate                                 : 209 kb/s
  Width                                    : 1 920 pixels
  Height                                   : 1 080 pixels
  Display aspect ratio                     : 16:9
  Frame rate mode                          : Constant
  Frame rate                               : 25.000 FPS
  Color space                              : YUV
  Chroma subsampling                       : 4:2:0
  Bit depth                                : 8 bits
  Scan type                                : Progressive
  Bits/(Pixel*Frame)                       : 0.004
  Stream size                              : 29.4 MiB (100%)
  Codec configuration box                  : avcC
  </code></pre>
  <p>My question is: <strong>Is it possible to force ffmpeg somehow to make it variable, the same way the source file was?</strong></p>
  <p>I was experimenting with ffmpeg's <code>vsync</code> options but with no luck.</p>
  <p>I think I know where the problem is in general - timing information should be handled outside of h264 bitstream (i.e. via RTP Timestamps) and lets say I do have these timestamp (my app uses RTP and this is how I get the h264 bitstream) - how I can use these timestamps in such a flow to pass them to ffmpeg when creating this mp4?</p>