Skip to main content

defaultOnAudioTrackHandler()

如果没有为 onAudioTrack 提供处理程序给 convertMedia(),这是默认函数。
如果你想自定义轨迹转换逻辑的某一部分,但其余部分仍使用默认行为,可以使用此函数。

🌐 This is the default function if no onAudioTrack handler is provided to convertMedia().
You may use this function if you want to customize part of the track transformation logic, but fall back to the default behavior for the rest.

Falling back to the default behavior
import {convertMedia, defaultOnVideoTrackHandler} from '@remotion/webcodecs'; await convertMedia({ src: 'https://remotion.media/BigBuckBunny.mp4', container: 'webm', onVideoTrack: (params) => { // Custom logic for handling video tracks // ... // Fall back to the default behavior return defaultOnVideoTrackHandler(params); }, });

算法

🌐 Algorithm

默认行为如下:

🌐 The default behavior is as follows:

  • 检查该音轨是否可以在不重新编码的情况下复制,如果可以,则执行该操作。
  • 确定要使用的音频编解码器——可以是传递给 convertMedia()audioCodec,或者是容器的默认编解码器。
  • 检查轨道是否可以使用所选的音频编解码器和比特率重新编码,如果可以,则执行该操作。
  • 如果该音轨既不能复制也不能重新编码,则渲染失败。你也可以选择返回 {type: 'drop'} 来移除音频轨道,但仍然让其他轨道成功。

这是默认函数的源代码。你可以将其作为参考来创建你自己的自定义处理程序。

🌐 This is the source code for the default function. You may use this as a reference to create your own custom handler.

Source code for defaultOnAudioTrackHandler
import {canReencodeAudioTrack, AudioOperation, ConvertMediaOnAudioTrackHandler, getDefaultAudioCodec} from '@remotion/webcodecs'; const DEFAULT_BITRATE = 128_000; export const defaultOnAudioTrackHandler: ConvertMediaOnAudioTrackHandler = async ({track, defaultAudioCodec, logLevel, inputContainer, outputContainer, canCopyTrack}): Promise<AudioOperation> => { const bitrate = DEFAULT_BITRATE; if (canCopyTrack) { return Promise.resolve({type: 'copy'}); } // In the future, we might support containers that don't support audio // (like GIF, animated WebP, etc.) - in that case, we should drop the audio if (defaultAudioCodec === null) { return Promise.resolve({type: 'drop'}); } const canReencode = await canReencodeAudioTrack({ audioCodec: defaultAudioCodec, track, bitrate, sampleRate: null, }); if (canReencode) { return Promise.resolve({ type: 'reencode', bitrate, audioCodec: defaultAudioCodec, sampleRate: null, }); } return Promise.resolve({type: 'fail'}); };

另请参阅

🌐 See also