mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Improve frame rate calculation by using media duration from mdhd
box
- Added logic to parse media duration from the `mdhd` box for accurate frame rate calculation. - Fallbacks to track duration from `tkhd` when `mdhd` contains invalid or missing data. - Avoids incorrect frame rate calculations in MP4 files with an edit list (`elst`) box. - Adds frame rate calculations for partially fragmented MP4 files. - Verified accuracy with tools like `mediainfo` and `ffprobe`. Issue: androidx/media#1531 **Note**: The slight difference in frame rate values in dump files that aren’t MP4s with an edit list or fragmented MP4s isn’t due to differences in `tkhd` and `mdhd` duration values (which should be identical for non-edited or non-fragmented files). Rather, it’s because they are calculated using different timescales. The `mvhd` box defines a global movie timescale, which is used for the track's `tkhd` duration. Meanwhile, each track’s `mdhd` box defines its own timescale specific to its content type, which we now use for more accurate frame rate calculation. PiperOrigin-RevId: 676046744
This commit is contained in:
parent
8799bf4bfe
commit
ecb0024a0b
@ -40,6 +40,9 @@
|
|||||||
* Fix preroll sample handling for non-keyframe media start positions when
|
* Fix preroll sample handling for non-keyframe media start positions when
|
||||||
processing edit lists in MP4 files
|
processing edit lists in MP4 files
|
||||||
([#1659](https://github.com/google/ExoPlayer/issues/1659)).
|
([#1659](https://github.com/google/ExoPlayer/issues/1659)).
|
||||||
|
* Improved frame rate calculation by using media duration from the `mdhd`
|
||||||
|
box in `Mp4Extractor` and `FragmentedMp4Extractor`
|
||||||
|
([#1531](https://github.com/androidx/media/issues/1531)).
|
||||||
* DataSource:
|
* DataSource:
|
||||||
* Audio:
|
* Audio:
|
||||||
* Video:
|
* Video:
|
||||||
|
@ -203,6 +203,7 @@ public class DefaultSsChunkSource implements SsChunkSource {
|
|||||||
streamElement.timescale,
|
streamElement.timescale,
|
||||||
C.TIME_UNSET,
|
C.TIME_UNSET,
|
||||||
manifest.durationUs,
|
manifest.durationUs,
|
||||||
|
/* mediaDurationUs= */ manifest.durationUs,
|
||||||
format,
|
format,
|
||||||
Track.TRANSFORMATION_NONE,
|
Track.TRANSFORMATION_NONE,
|
||||||
trackEncryptionBoxes,
|
trackEncryptionBoxes,
|
||||||
|
@ -351,8 +351,7 @@ public final class BoxParser {
|
|||||||
checkNotNull(mdia.getContainerBoxOfType(Mp4Box.TYPE_minf))
|
checkNotNull(mdia.getContainerBoxOfType(Mp4Box.TYPE_minf))
|
||||||
.getContainerBoxOfType(Mp4Box.TYPE_stbl));
|
.getContainerBoxOfType(Mp4Box.TYPE_stbl));
|
||||||
|
|
||||||
Pair<Long, String> mdhdData =
|
MdhdData mdhdData = parseMdhd(checkNotNull(mdia.getLeafBoxOfType(Mp4Box.TYPE_mdhd)).data);
|
||||||
parseMdhd(checkNotNull(mdia.getLeafBoxOfType(Mp4Box.TYPE_mdhd)).data);
|
|
||||||
LeafBox stsd = stbl.getLeafBoxOfType(Mp4Box.TYPE_stsd);
|
LeafBox stsd = stbl.getLeafBoxOfType(Mp4Box.TYPE_stsd);
|
||||||
if (stsd == null) {
|
if (stsd == null) {
|
||||||
throw ParserException.createForMalformedContainer(
|
throw ParserException.createForMalformedContainer(
|
||||||
@ -363,7 +362,7 @@ public final class BoxParser {
|
|||||||
stsd.data,
|
stsd.data,
|
||||||
tkhdData.id,
|
tkhdData.id,
|
||||||
tkhdData.rotationDegrees,
|
tkhdData.rotationDegrees,
|
||||||
mdhdData.second,
|
mdhdData.language,
|
||||||
drmInitData,
|
drmInitData,
|
||||||
isQuickTime);
|
isQuickTime);
|
||||||
@Nullable long[] editListDurations = null;
|
@Nullable long[] editListDurations = null;
|
||||||
@ -383,9 +382,10 @@ public final class BoxParser {
|
|||||||
: new Track(
|
: new Track(
|
||||||
tkhdData.id,
|
tkhdData.id,
|
||||||
trackType,
|
trackType,
|
||||||
mdhdData.first,
|
mdhdData.timescale,
|
||||||
movieTimescale,
|
movieTimescale,
|
||||||
durationUs,
|
durationUs,
|
||||||
|
mdhdData.mediaDurationUs,
|
||||||
stsdData.format,
|
stsdData.format,
|
||||||
stsdData.requiredSampleTransformation,
|
stsdData.requiredSampleTransformation,
|
||||||
stsdData.trackEncryptionBoxes,
|
stsdData.trackEncryptionBoxes,
|
||||||
@ -431,6 +431,12 @@ public final class BoxParser {
|
|||||||
/* durationUs= */ 0);
|
/* durationUs= */ 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (track.type == C.TRACK_TYPE_VIDEO && track.mediaDurationUs > 0) {
|
||||||
|
float frameRate = sampleCount / (track.mediaDurationUs / 1000000f);
|
||||||
|
Format format = track.format.buildUpon().setFrameRate(frameRate).build();
|
||||||
|
track = track.copyWithFormat(format);
|
||||||
|
}
|
||||||
|
|
||||||
// Entries are byte offsets of chunks.
|
// Entries are byte offsets of chunks.
|
||||||
boolean chunkOffsetsAreLongs = false;
|
boolean chunkOffsetsAreLongs = false;
|
||||||
@Nullable LeafBox chunkOffsetsAtom = stblBox.getLeafBoxOfType(Mp4Box.TYPE_stco);
|
@Nullable LeafBox chunkOffsetsAtom = stblBox.getLeafBoxOfType(Mp4Box.TYPE_stco);
|
||||||
@ -927,23 +933,30 @@ public final class BoxParser {
|
|||||||
* Parses an mdhd atom (defined in ISO/IEC 14496-12).
|
* Parses an mdhd atom (defined in ISO/IEC 14496-12).
|
||||||
*
|
*
|
||||||
* @param mdhd The mdhd atom to decode.
|
* @param mdhd The mdhd atom to decode.
|
||||||
* @return A pair consisting of the media timescale defined as the number of time units that pass
|
* @return An {@link MdhdData} object containing the parsed data.
|
||||||
* in one second, and the language code.
|
|
||||||
*/
|
*/
|
||||||
private static Pair<Long, String> parseMdhd(ParsableByteArray mdhd) {
|
private static MdhdData parseMdhd(ParsableByteArray mdhd) {
|
||||||
mdhd.setPosition(Mp4Box.HEADER_SIZE);
|
mdhd.setPosition(Mp4Box.HEADER_SIZE);
|
||||||
int fullAtom = mdhd.readInt();
|
int fullAtom = mdhd.readInt();
|
||||||
int version = parseFullBoxVersion(fullAtom);
|
int version = parseFullBoxVersion(fullAtom);
|
||||||
mdhd.skipBytes(version == 0 ? 8 : 16);
|
mdhd.skipBytes(version == 0 ? 8 : 16);
|
||||||
long timescale = mdhd.readUnsignedInt();
|
long timescale = mdhd.readUnsignedInt();
|
||||||
mdhd.skipBytes(version == 0 ? 4 : 8);
|
long mediaDuration = version == 0 ? mdhd.readUnsignedInt() : mdhd.readUnsignedLongToLong();
|
||||||
|
long mediaDurationUs;
|
||||||
|
if (mediaDuration == 0) {
|
||||||
|
// 0 duration normally indicates that the file is fully fragmented (i.e. all of the media
|
||||||
|
// samples are in fragments). Treat as unknown.
|
||||||
|
mediaDurationUs = C.TIME_UNSET;
|
||||||
|
} else {
|
||||||
|
mediaDurationUs = Util.scaleLargeTimestamp(mediaDuration, C.MICROS_PER_SECOND, timescale);
|
||||||
|
}
|
||||||
int languageCode = mdhd.readUnsignedShort();
|
int languageCode = mdhd.readUnsignedShort();
|
||||||
String language =
|
String language =
|
||||||
""
|
""
|
||||||
+ (char) (((languageCode >> 10) & 0x1F) + 0x60)
|
+ (char) (((languageCode >> 10) & 0x1F) + 0x60)
|
||||||
+ (char) (((languageCode >> 5) & 0x1F) + 0x60)
|
+ (char) (((languageCode >> 5) & 0x1F) + 0x60)
|
||||||
+ (char) ((languageCode & 0x1F) + 0x60);
|
+ (char) ((languageCode & 0x1F) + 0x60);
|
||||||
return Pair.create(timescale, language);
|
return new MdhdData(timescale, mediaDurationUs, language);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2408,6 +2421,19 @@ public final class BoxParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Data parsed from mdhd box. */
|
||||||
|
private static final class MdhdData {
|
||||||
|
private final long timescale;
|
||||||
|
private final long mediaDurationUs;
|
||||||
|
private final String language;
|
||||||
|
|
||||||
|
public MdhdData(long timescale, long mediaDurationUs, String language) {
|
||||||
|
this.timescale = timescale;
|
||||||
|
this.mediaDurationUs = mediaDurationUs;
|
||||||
|
this.language = language;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Data parsed from vexu box. */
|
/** Data parsed from vexu box. */
|
||||||
/* package */ static final class VexuData {
|
/* package */ static final class VexuData {
|
||||||
@Nullable private final EyesData eyesData;
|
@Nullable private final EyesData eyesData;
|
||||||
|
@ -738,7 +738,9 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
|||||||
roleFlags |=
|
roleFlags |=
|
||||||
firstVideoTrackIndex == C.INDEX_UNSET ? C.ROLE_FLAG_MAIN : C.ROLE_FLAG_ALTERNATE;
|
firstVideoTrackIndex == C.INDEX_UNSET ? C.ROLE_FLAG_MAIN : C.ROLE_FLAG_ALTERNATE;
|
||||||
}
|
}
|
||||||
if (trackDurationUs > 0 && trackSampleTable.sampleCount > 0) {
|
if (track.format.frameRate == Format.NO_VALUE
|
||||||
|
&& trackDurationUs > 0
|
||||||
|
&& trackSampleTable.sampleCount > 0) {
|
||||||
float frameRate = trackSampleTable.sampleCount / (trackDurationUs / 1000000f);
|
float frameRate = trackSampleTable.sampleCount / (trackDurationUs / 1000000f);
|
||||||
formatBuilder.setFrameRate(frameRate);
|
formatBuilder.setFrameRate(frameRate);
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,9 @@ public final class Track {
|
|||||||
/** The duration of the track in microseconds, or {@link C#TIME_UNSET} if unknown. */
|
/** The duration of the track in microseconds, or {@link C#TIME_UNSET} if unknown. */
|
||||||
public final long durationUs;
|
public final long durationUs;
|
||||||
|
|
||||||
|
/** The duration of the media in microseconds, or {@link C#TIME_UNSET} if unknown. */
|
||||||
|
public final long mediaDurationUs;
|
||||||
|
|
||||||
/** The format. */
|
/** The format. */
|
||||||
public final Format format;
|
public final Format format;
|
||||||
|
|
||||||
@ -93,6 +96,7 @@ public final class Track {
|
|||||||
long timescale,
|
long timescale,
|
||||||
long movieTimescale,
|
long movieTimescale,
|
||||||
long durationUs,
|
long durationUs,
|
||||||
|
long mediaDurationUs,
|
||||||
Format format,
|
Format format,
|
||||||
@Transformation int sampleTransformation,
|
@Transformation int sampleTransformation,
|
||||||
@Nullable TrackEncryptionBox[] sampleDescriptionEncryptionBoxes,
|
@Nullable TrackEncryptionBox[] sampleDescriptionEncryptionBoxes,
|
||||||
@ -104,6 +108,7 @@ public final class Track {
|
|||||||
this.timescale = timescale;
|
this.timescale = timescale;
|
||||||
this.movieTimescale = movieTimescale;
|
this.movieTimescale = movieTimescale;
|
||||||
this.durationUs = durationUs;
|
this.durationUs = durationUs;
|
||||||
|
this.mediaDurationUs = mediaDurationUs;
|
||||||
this.format = format;
|
this.format = format;
|
||||||
this.sampleTransformation = sampleTransformation;
|
this.sampleTransformation = sampleTransformation;
|
||||||
this.sampleDescriptionEncryptionBoxes = sampleDescriptionEncryptionBoxes;
|
this.sampleDescriptionEncryptionBoxes = sampleDescriptionEncryptionBoxes;
|
||||||
@ -133,6 +138,7 @@ public final class Track {
|
|||||||
timescale,
|
timescale,
|
||||||
movieTimescale,
|
movieTimescale,
|
||||||
durationUs,
|
durationUs,
|
||||||
|
mediaDurationUs,
|
||||||
format,
|
format,
|
||||||
sampleTransformation,
|
sampleTransformation,
|
||||||
sampleDescriptionEncryptionBoxes,
|
sampleDescriptionEncryptionBoxes,
|
||||||
@ -148,6 +154,7 @@ public final class Track {
|
|||||||
timescale,
|
timescale,
|
||||||
movieTimescale,
|
movieTimescale,
|
||||||
durationUs,
|
durationUs,
|
||||||
|
mediaDurationUs,
|
||||||
format,
|
format,
|
||||||
sampleTransformation,
|
sampleTransformation,
|
||||||
sampleDescriptionEncryptionBoxes,
|
sampleDescriptionEncryptionBoxes,
|
||||||
|
@ -45,6 +45,7 @@ public class FragmentedMp4ExtractorNoSniffingTest {
|
|||||||
/* timescale= */ 30_000,
|
/* timescale= */ 30_000,
|
||||||
/* movieTimescale= */ 1000,
|
/* movieTimescale= */ 1000,
|
||||||
/* durationUs= */ C.TIME_UNSET,
|
/* durationUs= */ C.TIME_UNSET,
|
||||||
|
/* mediaDurationUs= */ C.TIME_UNSET,
|
||||||
new Format.Builder().setSampleMimeType(MimeTypes.VIDEO_H264).build(),
|
new Format.Builder().setSampleMimeType(MimeTypes.VIDEO_H264).build(),
|
||||||
/* sampleTransformation= */ Track.TRANSFORMATION_NONE,
|
/* sampleTransformation= */ Track.TRANSFORMATION_NONE,
|
||||||
/* sampleDescriptionEncryptionBoxes= */ null,
|
/* sampleDescriptionEncryptionBoxes= */ null,
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1280
|
width = 1280
|
||||||
height = 720
|
height = 720
|
||||||
frameRate = 13.31
|
frameRate = 13.32
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 32.57
|
frameRate = 28.03
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -13,6 +13,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1080
|
width = 1080
|
||||||
height = 720
|
height = 720
|
||||||
|
frameRate = 29.97
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
@ -13,6 +13,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1080
|
width = 1080
|
||||||
height = 720
|
height = 720
|
||||||
|
frameRate = 29.97
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
@ -13,6 +13,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1080
|
width = 1080
|
||||||
height = 720
|
height = 720
|
||||||
|
frameRate = 29.97
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
@ -13,6 +13,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1080
|
width = 1080
|
||||||
height = 720
|
height = 720
|
||||||
|
frameRate = 29.97
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.17
|
frameRate = 30.00
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 6
|
colorSpace = 6
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1440
|
height = 1440
|
||||||
frameRate = 29.18
|
frameRate = 28.81
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -65,7 +65,7 @@ track 2:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.00
|
frameRate = 29.98
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
colorRange = 1
|
colorRange = 1
|
||||||
|
@ -17,7 +17,7 @@ track 0:
|
|||||||
maxNumReorderSamples = 0
|
maxNumReorderSamples = 0
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
frameRate = 30.00
|
frameRate = 29.98
|
||||||
rotationDegrees = 90
|
rotationDegrees = 90
|
||||||
colorInfo:
|
colorInfo:
|
||||||
colorSpace = 2
|
colorSpace = 2
|
||||||
|
@ -6,7 +6,7 @@ format video:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 704
|
width = 704
|
||||||
height = 576
|
height = 576
|
||||||
frameRate = 1.04
|
frameRate = 1.00
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
@ -6,7 +6,7 @@ format video:
|
|||||||
maxNumReorderSamples = 2
|
maxNumReorderSamples = 2
|
||||||
width = 320
|
width = 320
|
||||||
height = 240
|
height = 240
|
||||||
frameRate = 29.52
|
frameRate = 30.47
|
||||||
colorInfo:
|
colorInfo:
|
||||||
lumaBitdepth = 8
|
lumaBitdepth = 8
|
||||||
chromaBitdepth = 8
|
chromaBitdepth = 8
|
||||||
|
Loading…
x
Reference in New Issue
Block a user