[FFmpeg-trac] #8366(avformat:new): Audio ticks and video/audio out-of-sync when using MXF files with pre-charge
FFmpeg
trac at avcodec.org
Wed Nov 20 16:35:17 EET 2019
#8366: Audio ticks and video/audio out-of-sync when using MXF files with pre-
charge
------------------------------------+------------------------------------
Reporter: HenkDemper | Owner:
Type: defect | Status: new
Priority: normal | Component: avformat
Version: git-master | Resolution:
Keywords: MXF | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
------------------------------------+------------------------------------
Comment (by HenkDemper):
Based on your both replies I decided to make a perfect test sample to see
what is going on in more detail:
I constructed with QuickTime Player 7 Pro (always handy in these cases) an
Intra codec file that contains:
{{{
1. 13 frames of football match with horn sounds
2. 10 seconds bouncing ball A/V sync test with burned-in timecode starting
at 00:00:03:00
}}}
All samples in 1080i50 (so 25 fps) to keep things simple with 1920 audio
samples per frame without any NTSC audio 1601/1602 sequence misery.
I then rendered above file to XDCAM codec as QuickTime file, which then
has no pre-charge (fresh render).
This file was then rewrapped (with timecode matching the burned-in
version) to SyncTest.mxf, which I zipped and uploaded to
http://0x0.st/z66D.zip
I also uploaded in the same .zip an Excel file of the GOP structure of the
test source file.
Next I made a 5-second sub-clip out of this file on the second B-frame =
14th (display order) frame in the 2nd GOP (worst case for pre-charge, it
will need the last P-frame out of the 1st GOP as well), resulting in a
pre-charge aka File Package - Origin in MXF file of 13 frames.
I made the sub-clip both in Sony flavour and generic OP1a (OP3a if you
like ;-)) flavour, which turns out not to influence below results, just
some slight metadata differences and extra System Metadata Packs & Package
Metadata Sets in each Content Package (aka frame).
In an ideal MXF player, the video and audio for this MXF subclip should
start exactly at the 14th frame of the source file, start with the
bouncing ball at burned-in timecode 00:00:03:00, have no traces of either
football or blowing horns and last for exactly 5 seconds.
Note this happens OK in Mac QuickView, Switch Player, Premiere, FCPX, ...
etc.
These 2 resulting MXF sub-clips together with matching GOP Analysis Excels
have been uploaded as http://0x0.st/z66d.zip
Then I transcoded these 2 sub-clips using the earlier mentioned ffmpeg
command line
{{{
ffmpeg -i input.mxf -vcodec h264 -acodec copy -report output.mov
}}}
I uploaded the resulting output.mov files (with log and GOP analysis) to
http://0x0.st/z66n.zip
I then played these files back and guess what ?
I must admit that my earlier conclusion 'out of sync' was wrong, it was
based on bad example files in combination with me believing that the audio
started earlier (in the pre-charge, as I heard that) in combination with
the video looked fine...
Because what I see is that ffmpeg seems to completely ignore the Origin
(pre-charge), both for video and for audio:
The resulting .mov files start with the football match with horn (both in
pre-charge area), are perfectly in sync and play for 5 seconds and 13
frames.
Note the output.mov files itself have no pre-charge (as expected).
This is the same issue as you see in VLC playing back the MXF subclips
that where used as source for the ffmpeg command line:
VLC starts with the 1st pre-charge frame as well instead of skipping the
pre-charge.
Looking at libavformat/mxfdec.c I see:
{{{
if (material_track->sequence->origin) {
av_dict_set_int(&st->metadata, "material_track_origin",
material_track->sequence->origin, 0);
}
if (source_track->sequence->origin) {
av_dict_set_int(&st->metadata, "source_track_origin",
source_track->sequence->origin, 0);
}
}}}
For these files, material_track->sequence->origin is 0 and
source_track->sequence->origin is 13.
Apart from these lines, it appears sequence->origin is not used and I
doubt that the av_dict with the string-int mapping is used up-stream ?
So the revised request/issue is to add pre-charge support for video/audio
in MXF altogether.
Note that with no doubt there might be some option in ffmpeg command line,
but
a. the amount of 13 frames is unknown to the user
b. will differ for each subclip (depending where the cuts where made)
c. is not the proper fix
d. also still issue in VLC etc
--
Ticket URL: <https://trac.ffmpeg.org/ticket/8366#comment:11>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list