Skip to main content

canCopyAudioTrack()

Part of the @remotion/webcodecs package.

warning

Unstable API: This package is experimental. We might change the API at any time, until we remove this notice.

Given an AudioTrack, determine if it can be copied to the output without re-encoding.

You can obtain an AudioTrack using parseMedia() or during the conversion process using the onAudioTrack callback of convertMedia().

Examples

Check if an audio track can be copied
tsx
import {parseMedia} from '@remotion/media-parser';
import {canCopyAudioTrack} from '@remotion/webcodecs';
 
const {audioTracks, container} = await parseMedia({
src: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
fields: {
tracks: true,
container: true,
},
});
 
for (const track of audioTracks) {
canCopyAudioTrack({
inputCodec: track.codecWithoutConfig,
outputContainer: 'webm',
inputContainer: container,
}); // bool
}
Check if an audio track can be copied
tsx
import {parseMedia} from '@remotion/media-parser';
import {canCopyAudioTrack} from '@remotion/webcodecs';
 
const {audioTracks, container} = await parseMedia({
src: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
fields: {
tracks: true,
container: true,
},
});
 
for (const track of audioTracks) {
canCopyAudioTrack({
inputCodec: track.codecWithoutConfig,
outputContainer: 'webm',
inputContainer: container,
}); // bool
}
Copy an audio track to Opus, otherwise drop it
tsx
import {convertMedia, canCopyAudioTrack} from '@remotion/webcodecs';
 
await convertMedia({
src: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
container: 'webm',
videoCodec: 'vp8',
audioCodec: 'opus',
onAudioTrack: async ({track, outputContainer, inputContainer}) => {
const canCopy = canCopyAudioTrack({
inputCodec: track.codecWithoutConfig,
outputContainer,
inputContainer,
});
 
if (canCopy) {
return {type: 'copy'};
}
 
// Just to keep the example brief, in reality, you would re-encode the track here
return {type: 'drop'};
},
});
Copy an audio track to Opus, otherwise drop it
tsx
import {convertMedia, canCopyAudioTrack} from '@remotion/webcodecs';
 
await convertMedia({
src: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
container: 'webm',
videoCodec: 'vp8',
audioCodec: 'opus',
onAudioTrack: async ({track, outputContainer, inputContainer}) => {
const canCopy = canCopyAudioTrack({
inputCodec: track.codecWithoutConfig,
outputContainer,
inputContainer,
});
 
if (canCopy) {
return {type: 'copy'};
}
 
// Just to keep the example brief, in reality, you would re-encode the track here
return {type: 'drop'};
},
});

API

inputCodec

string MediaParserAudioCodec

The codec of the input audio track.

inputContainer

string ParseMediaContainer

The container format of the input media.

outputContainer

string ConvertMediaContainer

The container format of the output media.

Return value

Returns a boolean.

See also