MCPcopy Create free account
hub / github.com/Vanilagy/webcodecs-polyfill / getDecentAudioBitrate

Function getDecentAudioBitrate

src/audio_encoder.ts:697–732  ·  view source on GitHub ↗
(codec: AVCodecID)

Source from the content-addressed store, hash-verified

695}
696
697export const getDecentAudioBitrate = (codec: AVCodecID) => {
698 const baseRates = {
699 [AV_CODEC_ID_AAC]: 128000, // 128kbps base for AAC
700 [AV_CODEC_ID_OPUS]: 64000, // 64kbps base for Opus
701 [AV_CODEC_ID_MP3]: 160000, // 160kbps base for MP3
702 [AV_CODEC_ID_VORBIS]: 64000, // 64kbps base for Vorbis
703 };
704
705 const baseBitrate = baseRates[codec as keyof typeof baseRates];
706 if (!baseBitrate) {
707 return 0; // PCM case or FLAC or whatever
708 }
709
710 const factor = 1;
711 let finalBitrate = baseBitrate * factor;
712
713 if (codec === AV_CODEC_ID_AAC) {
714 // AAC only works with specific bitrates, let's find the closest
715 const validRates = [96000, 128000, 160000, 192000];
716 finalBitrate = validRates.reduce((prev, curr) =>
717 Math.abs(curr - finalBitrate) < Math.abs(prev - finalBitrate) ? curr : prev,
718 );
719 } else if (codec === AV_CODEC_ID_OPUS || codec === AV_CODEC_ID_VORBIS) {
720 finalBitrate = Math.max(6000, finalBitrate);
721 } else if (codec === AV_CODEC_ID_MP3) {
722 const validRates = [
723 8000, 16000, 24000, 32000, 40000, 48000, 64000, 80000,
724 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000,
725 ];
726 finalBitrate = validRates.reduce((prev, curr) =>
727 Math.abs(curr - finalBitrate) < Math.abs(prev - finalBitrate) ? curr : prev,
728 );
729 }
730
731 return Math.round(finalBitrate / 1000) * 1000;
732};

Callers 1

createCodecContextMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected