defaultOnVideoTrackHandler()
如果没有为 onVideoTrack 提供处理程序给 convertMedia(),这是默认函数。
如果你想自定义轨迹转换逻辑的某一部分,但其余部分仍使用默认行为,可以使用此函数。
🌐 This is the default function if no onVideoTrack 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 behaviorimport {convertMedia ,defaultOnAudioTrackHandler } from '@remotion/webcodecs'; awaitconvertMedia ({src : 'https://remotion.media/BigBuckBunny.mp4',container : 'webm',onAudioTrack : (params ) => { // Custom logic for handling video tracks // ... // Fall back to the default behavior returndefaultOnAudioTrackHandler (params ); }, });
算法
🌐 Algorithm
默认行为如下:
🌐 The default behavior is as follows:
- 检查该音轨是否可以在不重新编码的情况下复制,如果可以,则执行该操作。
- 确定要使用的视频编解码器——要么是传递给
convertMedia()的videoCodec,要么是容器的默认编解码器。 - 检查该音轨是否可以用所选视频编解码器重新编码,如果可以,则执行该操作。
- 如果该轨道既不能复制也不能重新编码,则渲染失败。你也可以选择返回
{type: 'drop'}来移除视频轨道,但仍然使其他轨道成功。
Source code for defaultOnVideoTrackHandlerimport {canReencodeVideoTrack ,getDefaultVideoCodec ,ConvertMediaOnVideoTrackHandler ,VideoOperation } from '@remotion/webcodecs'; export constdefaultOnVideoTrackHandler :ConvertMediaOnVideoTrackHandler = async ({track ,defaultVideoCodec ,logLevel ,outputContainer ,rotate ,inputContainer ,canCopyTrack ,resizeOperation }):Promise <VideoOperation > => { if (canCopyTrack ) { returnPromise .resolve ({type : 'copy'}); } // If for example exporting to audio, the default video codec will be null if (defaultVideoCodec === null) { returnPromise .resolve ({type : 'drop'}); } constcanReencode = awaitcanReencodeVideoTrack ({videoCodec :defaultVideoCodec ,track ,resizeOperation ,rotate , }); if (canReencode ) { returnPromise .resolve ({type : 'reencode',videoCodec :defaultVideoCodec ,rotation :rotate -track .rotation , }); } returnPromise .resolve ({type : 'fail'}); };
另请参阅
🌐 See also