> 1. Does FFmpeg support variable frame rate, or not? If you can playback or re-encode an iPhone video, then yes. MOV/MP4 is _not_ a fixed frame rate format. In other words, there is no "FPS" field/atom in MOV. You set some arbitrary timebase, and the stts atom contains the durations for each of the frames/samples per this timebase. If the frames happen to be all the same timing, then congratulations! Your video has a "fixed" frame rate. However, since the iPhone's MOV writer for some reason uses a timebase of 600, it is impossible to get enough precision to represent "29.97" for each frame perfectly. The only thing to do in this case is to vary each frame's timing slightly to achieve a "nominal" rate of 29.97 (which is what QuickTime Player is always showing). This is why sometimes QuickTime player shows "30.01" or some stupid number for FPS because it's arrived at that figure after doing its math on the timing values in stts. For editing apps, usually there is only one entry in stts, so all frames play at the same rate (fixed). But, all apps reading the file are still showing a nominal frame rate, not a fixed one.
> 2. If I set the time_base.den on the video codec (let's say to 30 fps), can I > fire say 12fps at the encoder and compensate for that by setting pts/dts > such that the timing won't be incorrect? The timescale in MOV is just a timing reference, not a frame rate. Your individual frame timing values determine the playback rate, and the frame rate value shown in any reader. Again, the frame rate can't be read like a field in a header. It has to be calculated by averaging all the timing values in stts. I'm not sure what this means for someone writing with FFmpeg. I've only ever written files for editing purposes, so I don't use variable timing. Have you tried varying the "duration" parameter for each frame rather than only DTS/PTS? _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
