A/V drift when reencoding NTSC
|Reported by:||Timothy Pearson||Owned by:|
|Blocking:||Reproduced by developer:||no|
|Analyzed by developer:||no|
Summary of the bug:
I have been having significant difficulty with A/V sync drift in ffmpeg (live streaming applications), which unfortunately do not lend themselves well to debugging by most ffmpeg developers. In the process of debugging the live stream, I was able to reproduce the A/V sync problems with the attached input file, which was specifically built to find A/V desync issues.
The input file is very simple. It is a 24000/1001 (NTSC) MPEG2 sync check file, with every 24th frame showing a coinciding tone and white flash. This file was assembled by mencoder, and I have verified that the audio tones are sent exactly once every 1.001 seconds in the output file.
The ffmpeg command below simply overlays the audio waveform back over the video frames. If ffmpeg was processing this input file correctly, each white frame should have the audio tone starting at exactly the same position. Unfortunately, as you can see, the audio tone in fact drifts significantly (in fact it often ends up in the adjacent frame). In addition to this obvious desync with ~4.004s periodicity, there is a very slight continual desync of the audio even when only looking at the output every 4.004s. Interestingly, 4.004s is the normal self-sync period for audio and video frames in NTSC content, indicating something may be wrong with how the underlying A/V frames (not video frames!) are handled / decoded / encoded.
How to reproduce:
% ffmpeg -y -copyts -i sample.mpeg -filter_complex "[0:a] showwaves=s=720x240:colors=Red|Green|Blue|Yellow:split_channels=1:mode=cline [waveview]; [0:v][waveview] overlay=0:H/2" --acodec copy -f dvd output.mpeg ffmpeg built from GIT master
Note that the attached segment file was trivially reduced with dd, as the original file is far too large to attach. This should not affect the results given that this is a transport stream file.