@remotion/webcodecs 4.0.306 → 4.0.308

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -432,70 +432,10 @@ var setRemotionImported = () => {
432
432
  }
433
433
  };
434
434
 
435
- // src/get-wave-audio-decoder.ts
436
- var getBytesPerSample = (sampleFormat) => {
437
- if (sampleFormat === "s16") {
438
- return 2;
439
- }
440
- if (sampleFormat === "s32") {
441
- return 4;
442
- }
443
- if (sampleFormat === "f32") {
444
- return 4;
445
- }
446
- if (sampleFormat === "u8") {
447
- return 1;
448
- }
449
- if (sampleFormat === "f32-planar") {
450
- return 4;
451
- }
452
- if (sampleFormat === "s16-planar") {
453
- return 2;
454
- }
455
- if (sampleFormat === "s32-planar") {
456
- return 4;
457
- }
458
- if (sampleFormat === "u8-planar") {
459
- return 1;
460
- }
461
- throw new Error(`Unsupported sample format: ${sampleFormat}`);
462
- };
463
- var getWaveAudioDecoder = ({
464
- onFrame,
465
- config,
466
- sampleFormat,
467
- ioSynchronizer,
468
- onError
469
- }) => {
470
- const processSample = async (audioSample) => {
471
- const bytesPerSample = getBytesPerSample(sampleFormat);
472
- const audioData = new AudioData({
473
- data: audioSample.data,
474
- format: sampleFormat,
475
- numberOfChannels: config.numberOfChannels,
476
- numberOfFrames: audioSample.data.byteLength / bytesPerSample / config.numberOfChannels,
477
- sampleRate: config.sampleRate,
478
- timestamp: audioSample.timestamp
479
- });
480
- try {
481
- await onFrame(audioData);
482
- } catch (err) {
483
- audioData.close();
484
- onError(err);
485
- }
486
- };
487
- return {
488
- close() {
489
- return Promise.resolve();
490
- },
491
- decode(audioSample) {
492
- processSample(audioSample);
493
- },
494
- flush: () => Promise.resolve(),
495
- waitForFinish: () => Promise.resolve(),
496
- waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize
497
- };
498
- };
435
+ // src/audio-encoder.ts
436
+ import {
437
+ MediaParserAbortError
438
+ } from "@remotion/media-parser";
499
439
 
500
440
  // src/create/event-emitter.ts
501
441
  class IoEventEmitter {
@@ -669,120 +609,13 @@ var makeIoSynchronizer = ({
669
609
  controller._internals._mediaParserController._internals.signal.removeEventListener("abort", clear);
670
610
  }
671
611
  };
672
- const waitForFinish = async () => {
673
- await waitForQueueSize(0);
674
- };
675
612
  return {
676
613
  inputItem,
677
614
  onOutput,
678
- waitForFinish,
679
615
  waitForQueueSize
680
616
  };
681
617
  };
682
618
 
683
- // src/audio-decoder.ts
684
- var internalCreateAudioDecoder = ({
685
- onFrame,
686
- onError,
687
- controller,
688
- config,
689
- logLevel
690
- }) => {
691
- if (controller && controller._internals._mediaParserController._internals.signal.aborted) {
692
- throw new Error("Not creating audio decoder, already aborted");
693
- }
694
- const ioSynchronizer = makeIoSynchronizer({
695
- logLevel,
696
- label: "Audio decoder",
697
- controller
698
- });
699
- if (config.codec === "pcm-s16") {
700
- return getWaveAudioDecoder({
701
- onFrame,
702
- config,
703
- sampleFormat: "s16",
704
- logLevel,
705
- ioSynchronizer,
706
- onError
707
- });
708
- }
709
- const audioDecoder = new AudioDecoder({
710
- async output(frame) {
711
- try {
712
- await onFrame(frame);
713
- } catch (err) {
714
- frame.close();
715
- onError(err);
716
- }
717
- ioSynchronizer.onOutput(frame.timestamp + (frame.duration ?? 0));
718
- },
719
- error(error) {
720
- onError(error);
721
- }
722
- });
723
- const close = () => {
724
- if (controller) {
725
- controller._internals._mediaParserController._internals.signal.removeEventListener("abort", onAbort);
726
- }
727
- if (audioDecoder.state === "closed") {
728
- return;
729
- }
730
- audioDecoder.close();
731
- };
732
- const onAbort = () => {
733
- close();
734
- };
735
- if (controller) {
736
- controller._internals._mediaParserController._internals.signal.addEventListener("abort", onAbort);
737
- }
738
- audioDecoder.configure(config);
739
- const processSample = (audioSample) => {
740
- if (audioDecoder.state === "closed") {
741
- return;
742
- }
743
- const chunk = audioSample instanceof EncodedAudioChunk ? audioSample : new EncodedAudioChunk(audioSample);
744
- audioDecoder.decode(chunk);
745
- if (chunk.byteLength > 16) {
746
- ioSynchronizer.inputItem(chunk.timestamp);
747
- }
748
- };
749
- return {
750
- decode: (sample) => {
751
- processSample(sample);
752
- },
753
- waitForFinish: async () => {
754
- try {
755
- await audioDecoder.flush();
756
- } catch {}
757
- await ioSynchronizer.waitForFinish();
758
- },
759
- close,
760
- flush: async () => {
761
- await audioDecoder.flush();
762
- },
763
- waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize
764
- };
765
- };
766
- var createAudioDecoder = ({
767
- onFrame,
768
- onError,
769
- controller,
770
- track,
771
- logLevel
772
- }) => {
773
- return internalCreateAudioDecoder({
774
- onFrame,
775
- onError,
776
- controller: controller ?? null,
777
- config: track,
778
- logLevel: logLevel ?? "error"
779
- });
780
- };
781
- // src/audio-encoder.ts
782
- import {
783
- MediaParserAbortError
784
- } from "@remotion/media-parser";
785
-
786
619
  // src/audio-data/data-types.ts
787
620
  var getDataTypeForAudioFormat = (format) => {
788
621
  switch (format) {
@@ -1007,7 +840,7 @@ var createAudioEncoder = ({
1007
840
  },
1008
841
  waitForFinish: async () => {
1009
842
  await encoder.flush();
1010
- await ioSynchronizer.waitForFinish();
843
+ await ioSynchronizer.waitForQueueSize(0);
1011
844
  },
1012
845
  close,
1013
846
  flush: async () => {
@@ -1016,12 +849,56 @@ var createAudioEncoder = ({
1016
849
  ioSynchronizer
1017
850
  };
1018
851
  };
852
+ // src/is-different-video-codec.ts
853
+ var isSameVideoCodec = ({
854
+ inputVideoCodec,
855
+ outputCodec
856
+ }) => {
857
+ if (outputCodec === "h264") {
858
+ return inputVideoCodec === "h264";
859
+ }
860
+ if (outputCodec === "h265") {
861
+ return inputVideoCodec === "h265";
862
+ }
863
+ if (outputCodec === "vp8") {
864
+ return inputVideoCodec === "vp8";
865
+ }
866
+ if (outputCodec === "vp9") {
867
+ return inputVideoCodec === "vp9";
868
+ }
869
+ throw new Error(`Unsupported output codec: ${outputCodec}`);
870
+ };
871
+ var isSameAudioCodec = ({
872
+ inputAudioCodec,
873
+ outputCodec
874
+ }) => {
875
+ if (outputCodec === "aac") {
876
+ return inputAudioCodec === "aac";
877
+ }
878
+ if (outputCodec === "opus") {
879
+ return inputAudioCodec === "opus";
880
+ }
881
+ if (outputCodec === "wav") {
882
+ return inputAudioCodec === "pcm-f32" || inputAudioCodec === "pcm-s16" || inputAudioCodec === "pcm-s24" || inputAudioCodec === "pcm-s32" || inputAudioCodec === "pcm-u8";
883
+ }
884
+ throw new Error(`Unsupported output codec: ${outputCodec}`);
885
+ };
886
+
1019
887
  // src/can-copy-audio-track.ts
1020
888
  var canCopyAudioTrack = ({
1021
889
  inputCodec,
1022
890
  outputContainer,
1023
- inputContainer
891
+ inputContainer,
892
+ outputAudioCodec
1024
893
  }) => {
894
+ if (outputAudioCodec) {
895
+ if (!isSameAudioCodec({
896
+ inputAudioCodec: inputCodec,
897
+ outputCodec: outputAudioCodec
898
+ })) {
899
+ return false;
900
+ }
901
+ }
1025
902
  if (outputContainer === "webm") {
1026
903
  return inputCodec === "opus";
1027
904
  }
@@ -1039,11 +916,20 @@ var canCopyVideoTrack = ({
1039
916
  rotationToApply,
1040
917
  inputContainer,
1041
918
  resizeOperation,
1042
- inputTrack
919
+ inputTrack,
920
+ outputVideoCodec
1043
921
  }) => {
1044
922
  if (normalizeVideoRotation(inputTrack.rotation) !== normalizeVideoRotation(rotationToApply)) {
1045
923
  return false;
1046
924
  }
925
+ if (outputVideoCodec) {
926
+ if (!isSameVideoCodec({
927
+ inputVideoCodec: inputTrack.codecEnum,
928
+ outputCodec: outputVideoCodec
929
+ })) {
930
+ return false;
931
+ }
932
+ }
1047
933
  const newDimensions = calculateNewDimensionsFromRotateAndScale({
1048
934
  height: inputTrack.height,
1049
935
  resizeOperation,
@@ -4249,6 +4135,184 @@ var convertEncodedChunk = (chunk) => {
4249
4135
  };
4250
4136
  };
4251
4137
 
4138
+ // src/get-wave-audio-decoder.ts
4139
+ var getBytesPerSample = (sampleFormat) => {
4140
+ if (sampleFormat === "s16") {
4141
+ return 2;
4142
+ }
4143
+ if (sampleFormat === "s32") {
4144
+ return 4;
4145
+ }
4146
+ if (sampleFormat === "f32") {
4147
+ return 4;
4148
+ }
4149
+ if (sampleFormat === "u8") {
4150
+ return 1;
4151
+ }
4152
+ if (sampleFormat === "f32-planar") {
4153
+ return 4;
4154
+ }
4155
+ if (sampleFormat === "s16-planar") {
4156
+ return 2;
4157
+ }
4158
+ if (sampleFormat === "s32-planar") {
4159
+ return 4;
4160
+ }
4161
+ if (sampleFormat === "u8-planar") {
4162
+ return 1;
4163
+ }
4164
+ throw new Error(`Unsupported sample format: ${sampleFormat}`);
4165
+ };
4166
+ var getAudioData = (audioSample) => {
4167
+ if (audioSample instanceof EncodedAudioChunk) {
4168
+ const data = new Uint8Array(audioSample.byteLength);
4169
+ audioSample.copyTo(data);
4170
+ return data;
4171
+ }
4172
+ return audioSample.data;
4173
+ };
4174
+ var getWaveAudioDecoder = ({
4175
+ onFrame,
4176
+ config,
4177
+ sampleFormat,
4178
+ ioSynchronizer,
4179
+ onError
4180
+ }) => {
4181
+ const processSample = async (audioSample) => {
4182
+ const bytesPerSample = getBytesPerSample(sampleFormat);
4183
+ const data = getAudioData(audioSample);
4184
+ const audioData = new AudioData({
4185
+ data,
4186
+ format: sampleFormat,
4187
+ numberOfChannels: config.numberOfChannels,
4188
+ numberOfFrames: data.byteLength / bytesPerSample / config.numberOfChannels,
4189
+ sampleRate: config.sampleRate,
4190
+ timestamp: audioSample.timestamp
4191
+ });
4192
+ try {
4193
+ await onFrame(audioData);
4194
+ } catch (err) {
4195
+ audioData.close();
4196
+ onError(err);
4197
+ }
4198
+ };
4199
+ return {
4200
+ close() {
4201
+ return Promise.resolve();
4202
+ },
4203
+ decode(audioSample) {
4204
+ return processSample(audioSample);
4205
+ },
4206
+ flush: () => Promise.resolve(),
4207
+ waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize,
4208
+ reset: () => {}
4209
+ };
4210
+ };
4211
+
4212
+ // src/create-audio-decoder.ts
4213
+ var internalCreateAudioDecoder = ({
4214
+ onFrame,
4215
+ onError,
4216
+ controller,
4217
+ config,
4218
+ logLevel
4219
+ }) => {
4220
+ if (controller && controller._internals._mediaParserController._internals.signal.aborted) {
4221
+ throw new Error("Not creating audio decoder, already aborted");
4222
+ }
4223
+ const ioSynchronizer = makeIoSynchronizer({
4224
+ logLevel,
4225
+ label: "Audio decoder",
4226
+ controller
4227
+ });
4228
+ if (config.codec === "pcm-s16") {
4229
+ return getWaveAudioDecoder({
4230
+ onFrame,
4231
+ config,
4232
+ sampleFormat: "s16",
4233
+ logLevel,
4234
+ ioSynchronizer,
4235
+ onError
4236
+ });
4237
+ }
4238
+ const audioDecoder = new AudioDecoder({
4239
+ async output(frame) {
4240
+ try {
4241
+ await onFrame(frame);
4242
+ } catch (err) {
4243
+ frame.close();
4244
+ onError(err);
4245
+ }
4246
+ ioSynchronizer.onOutput(frame.timestamp + (frame.duration ?? 0));
4247
+ },
4248
+ error(error) {
4249
+ onError(error);
4250
+ }
4251
+ });
4252
+ const close = () => {
4253
+ if (controller) {
4254
+ controller._internals._mediaParserController._internals.signal.removeEventListener("abort", onAbort);
4255
+ }
4256
+ if (audioDecoder.state === "closed") {
4257
+ return;
4258
+ }
4259
+ audioDecoder.close();
4260
+ };
4261
+ const onAbort = () => {
4262
+ close();
4263
+ };
4264
+ if (controller) {
4265
+ controller._internals._mediaParserController._internals.signal.addEventListener("abort", onAbort);
4266
+ }
4267
+ audioDecoder.configure(config);
4268
+ const decode = async (audioSample) => {
4269
+ if (audioDecoder.state === "closed") {
4270
+ return;
4271
+ }
4272
+ try {
4273
+ await controller?._internals._mediaParserController._internals.checkForAbortAndPause();
4274
+ } catch (err) {
4275
+ onError(err);
4276
+ return;
4277
+ }
4278
+ const chunk = audioSample instanceof EncodedAudioChunk ? audioSample : new EncodedAudioChunk(audioSample);
4279
+ audioDecoder.decode(chunk);
4280
+ if (chunk.byteLength > 16) {
4281
+ ioSynchronizer.inputItem(chunk.timestamp);
4282
+ }
4283
+ };
4284
+ return {
4285
+ decode,
4286
+ close,
4287
+ flush: async () => {
4288
+ try {
4289
+ await audioDecoder.flush();
4290
+ } catch {}
4291
+ await ioSynchronizer.waitForQueueSize(0);
4292
+ },
4293
+ waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize,
4294
+ reset: () => {
4295
+ audioDecoder.reset();
4296
+ audioDecoder.configure(config);
4297
+ }
4298
+ };
4299
+ };
4300
+ var createAudioDecoder = ({
4301
+ track,
4302
+ onFrame,
4303
+ onError,
4304
+ controller,
4305
+ logLevel
4306
+ }) => {
4307
+ return internalCreateAudioDecoder({
4308
+ onFrame,
4309
+ onError,
4310
+ controller: controller ?? null,
4311
+ config: track,
4312
+ logLevel: logLevel ?? "error"
4313
+ });
4314
+ };
4315
+
4252
4316
  // src/processing-queue.ts
4253
4317
  function processingQueue({
4254
4318
  onOutput,
@@ -4434,10 +4498,10 @@ var reencodeAudioTrack = async ({
4434
4498
  logLevel
4435
4499
  });
4436
4500
  state.addWaitForFinishPromise(async () => {
4437
- await audioDecoder.waitForFinish();
4501
+ await audioDecoder.waitForQueueToBeLessThan(0);
4438
4502
  Log.verbose(logLevel, "Audio decoder finished");
4439
4503
  audioDecoder.close();
4440
- await audioProcessingQueue.ioSynchronizer.waitForFinish();
4504
+ await audioProcessingQueue.ioSynchronizer.waitForQueueSize(0);
4441
4505
  Log.verbose(logLevel, "Audio processing queue finished");
4442
4506
  await audioEncoder.waitForFinish();
4443
4507
  Log.verbose(logLevel, "Audio encoder finished");
@@ -4467,7 +4531,8 @@ var makeAudioTrackHandler = ({
4467
4531
  const canCopyTrack = canCopyAudioTrack({
4468
4532
  inputCodec: track.codecEnum,
4469
4533
  outputContainer,
4470
- inputContainer
4534
+ inputContainer,
4535
+ outputAudioCodec: audioCodec
4471
4536
  });
4472
4537
  const audioOperation = await (onAudioTrack ?? defaultOnAudioTrackHandler)({
4473
4538
  defaultAudioCodec: audioCodec ?? getDefaultAudioCodec({ container: outputContainer }),
@@ -4598,6 +4663,95 @@ var arrayBufferToUint8Array = (buffer) => {
4598
4663
  return buffer ? new Uint8Array(buffer) : null;
4599
4664
  };
4600
4665
 
4666
+ // src/create-video-decoder.ts
4667
+ var internalCreateVideoDecoder = ({
4668
+ onFrame,
4669
+ onError,
4670
+ controller,
4671
+ config,
4672
+ logLevel
4673
+ }) => {
4674
+ const ioSynchronizer = makeIoSynchronizer({
4675
+ logLevel,
4676
+ label: "Video decoder",
4677
+ controller
4678
+ });
4679
+ const videoDecoder = new VideoDecoder({
4680
+ async output(frame) {
4681
+ try {
4682
+ await onFrame(frame);
4683
+ } catch (err) {
4684
+ onError(err);
4685
+ frame.close();
4686
+ }
4687
+ ioSynchronizer.onOutput(frame.timestamp);
4688
+ },
4689
+ error(error) {
4690
+ onError(error);
4691
+ }
4692
+ });
4693
+ const close = () => {
4694
+ if (controller) {
4695
+ controller._internals._mediaParserController._internals.signal.removeEventListener("abort", onAbort);
4696
+ }
4697
+ if (videoDecoder.state === "closed") {
4698
+ return;
4699
+ }
4700
+ videoDecoder.close();
4701
+ };
4702
+ const onAbort = () => {
4703
+ close();
4704
+ };
4705
+ if (controller) {
4706
+ controller._internals._mediaParserController._internals.signal.addEventListener("abort", onAbort);
4707
+ }
4708
+ videoDecoder.configure(config);
4709
+ const decode = async (sample) => {
4710
+ if (videoDecoder.state === "closed") {
4711
+ return;
4712
+ }
4713
+ try {
4714
+ await controller?._internals._mediaParserController._internals.checkForAbortAndPause();
4715
+ } catch (err) {
4716
+ onError(err);
4717
+ return;
4718
+ }
4719
+ const encodedChunk = sample instanceof EncodedVideoChunk ? sample : new EncodedVideoChunk(sample);
4720
+ videoDecoder.decode(encodedChunk);
4721
+ ioSynchronizer.inputItem(sample.timestamp);
4722
+ };
4723
+ return {
4724
+ decode,
4725
+ close,
4726
+ flush: async () => {
4727
+ try {
4728
+ await videoDecoder.flush();
4729
+ } catch {}
4730
+ await ioSynchronizer.waitForQueueSize(0);
4731
+ },
4732
+ waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize,
4733
+ reset: () => {
4734
+ videoDecoder.reset();
4735
+ videoDecoder.configure(config);
4736
+ }
4737
+ };
4738
+ };
4739
+ var createVideoDecoder = ({
4740
+ onFrame,
4741
+ onError,
4742
+ controller,
4743
+ track,
4744
+ logLevel
4745
+ }) => {
4746
+ return internalCreateVideoDecoder({
4747
+ onFrame,
4748
+ onError,
4749
+ controller: controller ?? null,
4750
+ config: track,
4751
+ logLevel: logLevel ?? "info"
4752
+ });
4753
+ };
4754
+
4601
4755
  // src/convert-to-correct-videoframe.ts
4602
4756
  var needsToCorrectVideoFrame = ({
4603
4757
  videoFrame,
@@ -4735,88 +4889,6 @@ var videoFrameSorter = ({
4735
4889
  };
4736
4890
  };
4737
4891
 
4738
- // src/video-decoder.ts
4739
- var internalCreateVideoDecoder = ({
4740
- onFrame: onFrame2,
4741
- onError,
4742
- controller,
4743
- config,
4744
- logLevel
4745
- }) => {
4746
- const ioSynchronizer = makeIoSynchronizer({
4747
- logLevel,
4748
- label: "Video decoder",
4749
- controller
4750
- });
4751
- const videoDecoder = new VideoDecoder({
4752
- async output(frame) {
4753
- try {
4754
- await onFrame2(frame);
4755
- } catch (err) {
4756
- onError(err);
4757
- frame.close();
4758
- }
4759
- ioSynchronizer.onOutput(frame.timestamp);
4760
- },
4761
- error(error) {
4762
- onError(error);
4763
- }
4764
- });
4765
- const close = () => {
4766
- if (controller) {
4767
- controller._internals._mediaParserController._internals.signal.removeEventListener("abort", onAbort);
4768
- }
4769
- if (videoDecoder.state === "closed") {
4770
- return;
4771
- }
4772
- videoDecoder.close();
4773
- };
4774
- const onAbort = () => {
4775
- close();
4776
- };
4777
- if (controller) {
4778
- controller._internals._mediaParserController._internals.signal.addEventListener("abort", onAbort);
4779
- }
4780
- videoDecoder.configure(config);
4781
- const decode = (sample) => {
4782
- if (videoDecoder.state === "closed") {
4783
- return;
4784
- }
4785
- const encodedChunk = sample instanceof EncodedVideoChunk ? sample : new EncodedVideoChunk(sample);
4786
- videoDecoder.decode(encodedChunk);
4787
- ioSynchronizer.inputItem(sample.timestamp);
4788
- };
4789
- return {
4790
- decode,
4791
- waitForFinish: async () => {
4792
- await videoDecoder.flush();
4793
- Log.verbose(logLevel, "Flushed video decoder");
4794
- await ioSynchronizer.waitForFinish();
4795
- Log.verbose(logLevel, "IO synchro finished");
4796
- },
4797
- close,
4798
- flush: async () => {
4799
- await videoDecoder.flush();
4800
- },
4801
- waitForQueueToBeLessThan: ioSynchronizer.waitForQueueSize
4802
- };
4803
- };
4804
- var createVideoDecoder = ({
4805
- onFrame: onFrame2,
4806
- onError,
4807
- controller,
4808
- track,
4809
- logLevel
4810
- }) => {
4811
- return internalCreateVideoDecoder({
4812
- onFrame: onFrame2,
4813
- onError,
4814
- controller: controller ?? null,
4815
- config: track,
4816
- logLevel: logLevel ?? "info"
4817
- });
4818
- };
4819
-
4820
4892
  // src/video-encoder.ts
4821
4893
  import {
4822
4894
  MediaParserAbortError as MediaParserAbortError2
@@ -4886,7 +4958,7 @@ var createVideoEncoder = ({
4886
4958
  },
4887
4959
  waitForFinish: async () => {
4888
4960
  await encoder.flush();
4889
- await ioSynchronizer.waitForFinish();
4961
+ await ioSynchronizer.waitForQueueSize(0);
4890
4962
  },
4891
4963
  close,
4892
4964
  flush: async () => {
@@ -5023,12 +5095,12 @@ var reencodeVideoTrack = async ({
5023
5095
  });
5024
5096
  state.addWaitForFinishPromise(async () => {
5025
5097
  Log.verbose(logLevel, "Waiting for video decoder to finish");
5026
- await videoDecoder.waitForFinish();
5098
+ await videoDecoder.waitForQueueToBeLessThan(0);
5027
5099
  videoDecoder.close();
5028
5100
  Log.verbose(logLevel, "Video decoder finished. Waiting for encoder to finish");
5029
5101
  await frameSorter.flush();
5030
5102
  Log.verbose(logLevel, "Frame sorter flushed");
5031
- await videoProcessingQueue.ioSynchronizer.waitForFinish();
5103
+ await videoProcessingQueue.ioSynchronizer.waitForQueueSize(0);
5032
5104
  Log.verbose(logLevel, "Video processing queue finished");
5033
5105
  await videoEncoder.waitForFinish();
5034
5106
  videoEncoder.close();
@@ -5068,7 +5140,8 @@ var makeVideoTrackHandler = ({
5068
5140
  outputContainer,
5069
5141
  rotationToApply: rotate,
5070
5142
  inputTrack: track,
5071
- resizeOperation
5143
+ resizeOperation,
5144
+ outputVideoCodec: defaultVideoCodec
5072
5145
  });
5073
5146
  const videoOperation = await (onVideoTrack ?? defaultOnVideoTrackHandler)({
5074
5147
  track,
@@ -1,5 +1,5 @@
1
1
  import type { MediaParserLogLevel } from '@remotion/media-parser';
2
- import type { CreateAudioDecoderInit, WebCodecsAudioDecoder } from './audio-decoder';
2
+ import type { CreateAudioDecoderInit, WebCodecsAudioDecoder } from './create-audio-decoder';
3
3
  import type { IoSynchronizer } from './io-manager/io-synchronizer';
4
4
  export declare const getWaveAudioDecoder: ({ onFrame, config, sampleFormat, ioSynchronizer, onError, }: Pick<CreateAudioDecoderInit, "onFrame" | "config"> & {
5
5
  sampleFormat: AudioSampleFormat;