@remotion/media-parser
Version:
A pure JavaScript library for parsing video files
36 lines (35 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAudioSampleFromCbr = void 0;
const webcodecs_timescale_1 = require("../../../webcodecs-timescale");
const get_frame_length_1 = require("../get-frame-length");
const getAudioSampleFromCbr = ({ bitrateInKbit, initialOffset, layer, sampleRate, samplesPerFrame, data, state, }) => {
const avgLength = (0, get_frame_length_1.getAverageMpegFrameLength)({
bitrateKbit: bitrateInKbit,
layer,
samplesPerFrame,
samplingFrequency: sampleRate,
});
const mp3Info = state.mp3.getMp3Info();
if (!mp3Info) {
throw new Error('No MP3 info');
}
const nthFrame = Math.round((initialOffset - state.mediaSection.getMediaSectionAssertOnlyOne().start) /
avgLength);
const durationInSeconds = samplesPerFrame / sampleRate;
const timeInSeconds = (nthFrame * samplesPerFrame) / sampleRate;
// Important that we round down, otherwise WebCodecs might stall, e.g.
// Last input = 30570667 Last output = 30570666 -> stuck
const timestamp = Math.floor(timeInSeconds * webcodecs_timescale_1.WEBCODECS_TIMESCALE);
const duration = Math.floor(durationInSeconds * webcodecs_timescale_1.WEBCODECS_TIMESCALE);
const audioSample = {
data,
decodingTimestamp: timestamp,
duration,
offset: initialOffset,
timestamp,
type: 'key',
};
return { audioSample, timeInSeconds, durationInSeconds };
};
exports.getAudioSampleFromCbr = getAudioSampleFromCbr;