react-native-video-trim 7.1.1 → 8.0.0

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.
@@ -59,6 +59,8 @@ class VideoTrimmerViewController: UIViewController {
59
59
  private var waveformBarCornerRadius: CGFloat = 1.5
60
60
  private var iconColor: UIColor { isLightTheme ? .black : .white }
61
61
  private var dimmedIconColor: UIColor { iconColor.withAlphaComponent(0.5) }
62
+ private let symbolConfig = UIImage.SymbolConfiguration(pointSize: 14, weight: .medium)
63
+ private let speedOptions: [Double] = [0.25, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0]
62
64
 
63
65
  private let playerController = AVPlayerViewController()
64
66
  private var trimmer: VideoTrimmer!
@@ -86,6 +88,10 @@ class VideoTrimmerViewController: UIViewController {
86
88
 
87
89
  private(set) var rotationCount = 0
88
90
  private(set) var isFlipped = false
91
+ private(set) var isMuted = false
92
+ private var muteBtn: UIButton?
93
+ private(set) var speed: Double = 1.0
94
+ private var speedBtn: UIButton?
89
95
  private var isVideoType = true
90
96
  private var playerContainerView: UIView!
91
97
  private var transformStackView: UIStackView?
@@ -270,6 +276,7 @@ class VideoTrimmerViewController: UIViewController {
270
276
  }
271
277
 
272
278
  player.play()
279
+ player.rate = Float(speed)
273
280
  }
274
281
 
275
282
  setPlayBtnIcon()
@@ -463,6 +470,7 @@ class VideoTrimmerViewController: UIViewController {
463
470
  }
464
471
  playerController.player = AVPlayer()
465
472
  player.replaceCurrentItem(with: AVPlayerItem(asset: asset))
473
+ player.isMuted = isMuted
466
474
 
467
475
  statusObservation = player.observe(\.status, options: [.new, .initial]) { [weak self] player, _ in
468
476
  DispatchQueue.main.async {
@@ -521,8 +529,6 @@ class VideoTrimmerViewController: UIViewController {
521
529
  private func setupTransformButtons() {
522
530
  guard isVideoType else { return }
523
531
 
524
- let symbolConfig = UIImage.SymbolConfiguration(pointSize: 14, weight: .medium)
525
-
526
532
  let flipBtn = UIButton(type: .system)
527
533
  flipBtn.setImage(UIImage(systemName: "arrow.trianglehead.left.and.right.righttriangle.left.righttriangle.right", withConfiguration: symbolConfig), for: .normal)
528
534
  flipBtn.tintColor = iconColor
@@ -539,6 +545,25 @@ class VideoTrimmerViewController: UIViewController {
539
545
  cropButton.addTarget(self, action: #selector(onCropTapped), for: .touchUpInside)
540
546
  self.cropBtn = cropButton
541
547
 
548
+ let muteButton = UIButton(type: .system)
549
+ muteButton.setImage(UIImage(systemName: isMuted ? "speaker.slash.fill" : "speaker.wave.2.fill", withConfiguration: symbolConfig), for: .normal)
550
+ muteButton.tintColor = iconColor
551
+ muteButton.addTarget(self, action: #selector(onMuteTapped), for: .touchUpInside)
552
+ self.muteBtn = muteButton
553
+
554
+ let speedButton = UIButton(type: .system)
555
+ let speedLabel = speed == 1.0 ? "1x" : "\(speed)x"
556
+ speedButton.setTitle(speedLabel, for: .normal)
557
+ speedButton.titleLabel?.font = .systemFont(ofSize: 13, weight: .semibold)
558
+ speedButton.tintColor = iconColor
559
+ if #available(iOS 14.0, *) {
560
+ speedButton.showsMenuAsPrimaryAction = true
561
+ speedButton.menu = buildSpeedMenu()
562
+ } else {
563
+ speedButton.addTarget(self, action: #selector(onSpeedTapped), for: .touchUpInside)
564
+ }
565
+ self.speedBtn = speedButton
566
+
542
567
  let undoButton = UIButton(type: .system)
543
568
  undoButton.setImage(UIImage(systemName: "arrow.uturn.backward", withConfiguration: symbolConfig), for: .normal)
544
569
  undoButton.tintColor = dimmedIconColor
@@ -553,7 +578,7 @@ class VideoTrimmerViewController: UIViewController {
553
578
  redoButton.addTarget(self, action: #selector(onRedoTapped), for: .touchUpInside)
554
579
  self.redoBtn = redoButton
555
580
 
556
- let leftStack = UIStackView(arrangedSubviews: [flipBtn, rotateBtn, cropButton])
581
+ let leftStack = UIStackView(arrangedSubviews: [flipBtn, rotateBtn, cropButton, muteButton, speedButton])
557
582
  leftStack.axis = .horizontal
558
583
  leftStack.spacing = 12
559
584
 
@@ -578,6 +603,10 @@ class VideoTrimmerViewController: UIViewController {
578
603
  rotateBtn.heightAnchor.constraint(equalToConstant: btnSize),
579
604
  cropButton.widthAnchor.constraint(equalToConstant: btnSize),
580
605
  cropButton.heightAnchor.constraint(equalToConstant: btnSize),
606
+ muteButton.widthAnchor.constraint(equalToConstant: btnSize),
607
+ muteButton.heightAnchor.constraint(equalToConstant: btnSize),
608
+ speedButton.widthAnchor.constraint(greaterThanOrEqualToConstant: 36),
609
+ speedButton.heightAnchor.constraint(equalToConstant: btnSize),
581
610
  undoButton.widthAnchor.constraint(equalToConstant: btnSize),
582
611
  undoButton.heightAnchor.constraint(equalToConstant: btnSize),
583
612
  redoButton.widthAnchor.constraint(equalToConstant: btnSize),
@@ -590,6 +619,66 @@ class VideoTrimmerViewController: UIViewController {
590
619
  self.transformStackView = fullRow
591
620
  }
592
621
 
622
+ @objc private func onMuteTapped() {
623
+ isMuted.toggle()
624
+ muteBtn?.setImage(UIImage(systemName: isMuted ? "speaker.slash.fill" : "speaker.wave.2.fill", withConfiguration: symbolConfig), for: .normal)
625
+ player.isMuted = isMuted
626
+ if enableHapticFeedback {
627
+ UIImpactFeedbackGenerator(style: .light).impactOccurred()
628
+ }
629
+ }
630
+
631
+ // Builds a native context menu for speed selection (iOS 14+). The menu is
632
+ // attached via showsMenuAsPrimaryAction so it opens on tap without an extra
633
+ // long-press gesture. Falls back to UIAlertController on older iOS versions.
634
+ @available(iOS 14.0, *)
635
+ private func buildSpeedMenu() -> UIMenu {
636
+ let actions = speedOptions.map { opt in
637
+ let title = opt == 1.0 ? "Normal (1x)" : "\(opt)x"
638
+ let isSelected = abs(opt - speed) < 0.0001
639
+ return UIAction(title: title, state: isSelected ? .on : .off) { [weak self] _ in
640
+ self?.setSpeed(opt)
641
+ }
642
+ }
643
+ return UIMenu(title: "", children: actions)
644
+ }
645
+
646
+ /// Fallback for iOS < 14 where UIMenu is unavailable.
647
+ @objc private func onSpeedTapped() {
648
+ let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
649
+ alert.overrideUserInterfaceStyle = isLightTheme ? .light : .dark
650
+ for opt in speedOptions {
651
+ let title = opt == 1.0 ? "Normal (1x)" : "\(opt)x"
652
+ let isSelected = abs(opt - speed) < 0.0001
653
+ let action = UIAlertAction(title: title, style: isSelected ? .destructive : .default) { [weak self] _ in
654
+ self?.setSpeed(opt)
655
+ }
656
+ alert.addAction(action)
657
+ }
658
+ alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
659
+ if let pop = alert.popoverPresentationController, let btn = speedBtn {
660
+ pop.sourceView = btn
661
+ pop.sourceRect = btn.bounds
662
+ }
663
+ present(alert, animated: true)
664
+ }
665
+
666
+ private func setSpeed(_ newSpeed: Double) {
667
+ speed = newSpeed
668
+ let label = newSpeed == 1.0 ? "1x" : "\(newSpeed)x"
669
+ speedBtn?.setTitle(label, for: .normal)
670
+ if #available(iOS 14.0, *) {
671
+ speedBtn?.menu = buildSpeedMenu()
672
+ }
673
+ player.rate = Float(newSpeed)
674
+ if player.timeControlStatus != .playing {
675
+ player.pause()
676
+ }
677
+ if enableHapticFeedback {
678
+ UIImpactFeedbackGenerator(style: .light).impactOccurred()
679
+ }
680
+ }
681
+
593
682
  @objc private func onFlipTapped() {
594
683
  pushUndo()
595
684
  isFlipped.toggle()
@@ -978,6 +1067,10 @@ class VideoTrimmerViewController: UIViewController {
978
1067
  zoomOnWaitingDuration = (config["zoomOnWaitingDuration"] as? Double ?? 5.0) / 1000.0 // convert ms to s
979
1068
  autoplay = config["autoplay"] as? Bool ?? false
980
1069
  isVideoType = (config["type"] as? String ?? "video") == "video"
1070
+ isMuted = config["removeAudio"] as? Bool ?? false
1071
+ if let cfgSpeed = config["speed"] as? Double {
1072
+ speed = cfgSpeed
1073
+ }
981
1074
  headerText = config["headerText"] as? String
982
1075
  headerTextSize = config["headerTextSize"] as? Int ?? 16
983
1076
  headerTextColor = config["headerTextColor"] as? Double
@@ -22,6 +22,58 @@ import { TurboModuleRegistry } from 'react-native';
22
22
  * Result returned by a trim operation (both editor and headless).
23
23
  */
24
24
 
25
+ /**
26
+ * Options for extracting a single frame from a video.
27
+ */
28
+
29
+ /**
30
+ * Result returned by {@link Spec.getFrameAt}.
31
+ */
32
+
33
+ /**
34
+ * Options for extracting the audio track from a video file.
35
+ */
36
+
37
+ /**
38
+ * Result returned by {@link Spec.extractAudio}.
39
+ */
40
+
41
+ /**
42
+ * Options for compressing a video file.
43
+ */
44
+
45
+ /**
46
+ * Result returned by {@link Spec.compress}.
47
+ */
48
+
49
+ /**
50
+ * Options for converting a video segment to an animated GIF.
51
+ */
52
+
53
+ /**
54
+ * Result returned by {@link Spec.toGif}.
55
+ */
56
+
57
+ /**
58
+ * Options for merging multiple media files into one.
59
+ */
60
+
61
+ /**
62
+ * Result returned by {@link Spec.merge}.
63
+ */
64
+
65
+ /**
66
+ * Result returned by {@link Spec.saveToPhoto}.
67
+ */
68
+
69
+ /**
70
+ * Result returned by {@link Spec.saveToDocuments}.
71
+ */
72
+
73
+ /**
74
+ * Result returned by {@link Spec.share}.
75
+ */
76
+
25
77
  /**
26
78
  * TurboModule spec for the native VideoTrim module.
27
79
  */
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVideoTrim.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAGlD;AACA;AACA;;AAwBA;AACA;AACA;;AA+GA;AACA;AACA;;AAQA;AACA;AACA;;AAUA;AACA;AACA;;AAcA;AACA;AACA;;AAmEA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVideoTrim.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAGlD;AACA;AACA;;AAgCA;AACA;AACA;;AA+GA;AACA;AACA;;AAQA;AACA;AACA;;AAUA;AACA;AACA;;AAcA;AACA;AACA;;AAcA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAQA;AACA;AACA;;AAqBA;AACA;AACA;;AAMA;AACA;AACA;;AAYA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAQA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;;AAmFA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
@@ -15,6 +15,51 @@ function createBaseOptions(overrides = {}) {
15
15
  removeAfterSavedToPhoto: false,
16
16
  removeAfterFailedToSavePhoto: false,
17
17
  enablePreciseTrimming: false,
18
+ removeAudio: false,
19
+ speed: 1.0,
20
+ ...overrides
21
+ };
22
+ }
23
+ function createCompressOptions(overrides = {}) {
24
+ return {
25
+ quality: 'medium',
26
+ bitrate: -1,
27
+ width: -1,
28
+ height: -1,
29
+ frameRate: -1,
30
+ outputExt: 'mp4',
31
+ removeAudio: false,
32
+ ...overrides
33
+ };
34
+ }
35
+ function createFrameExtractionOptions(overrides = {}) {
36
+ return {
37
+ time: 0,
38
+ format: 'jpeg',
39
+ quality: 80,
40
+ maxWidth: -1,
41
+ maxHeight: -1,
42
+ ...overrides
43
+ };
44
+ }
45
+ function createExtractAudioOptions(overrides = {}) {
46
+ return {
47
+ outputExt: 'm4a',
48
+ ...overrides
49
+ };
50
+ }
51
+ function createGifOptions(overrides = {}) {
52
+ return {
53
+ startTime: 0,
54
+ endTime: -1,
55
+ fps: 10,
56
+ width: -1,
57
+ ...overrides
58
+ };
59
+ }
60
+ function createMergeOptions(overrides = {}) {
61
+ return {
62
+ outputExt: 'mp4',
18
63
  ...overrides
19
64
  };
20
65
  }
@@ -171,6 +216,103 @@ export function isValidFile(url) {
171
216
  export function trim(url, options) {
172
217
  return VideoTrim.trim(url, createTrimOptions(options));
173
218
  }
219
+
220
+ /**
221
+ * Extract a single frame from a video at a given timestamp
222
+ *
223
+ * @param {string} url: absolute non-empty file path
224
+ * @param {Partial<FrameExtractionOptions>} options: extraction options
225
+ * @returns {Promise<FrameResult>} A **Promise** which resolves to the FrameResult
226
+ */
227
+ export function getFrameAt(url, options = {}) {
228
+ return VideoTrim.getFrameAt(url, createFrameExtractionOptions(options));
229
+ }
230
+
231
+ /**
232
+ * Extract the audio track from a video file
233
+ *
234
+ * @param {string} url: absolute non-empty file path
235
+ * @param {Partial<ExtractAudioOptions>} options: extraction options
236
+ * @returns {Promise<ExtractAudioResult>} A **Promise** which resolves to the result
237
+ */
238
+ export function extractAudio(url, options = {}) {
239
+ return VideoTrim.extractAudio(url, createExtractAudioOptions(options));
240
+ }
241
+
242
+ /**
243
+ * Compress a video file to reduce its size
244
+ *
245
+ * @param {string} url: absolute non-empty file path
246
+ * @param {Partial<CompressOptions>} options: compression options
247
+ * @returns {Promise<CompressResult>} A **Promise** which resolves to the result
248
+ */
249
+ export function compress(url, options = {}) {
250
+ return VideoTrim.compress(url, createCompressOptions(options));
251
+ }
252
+
253
+ /**
254
+ * Convert a video segment to an animated GIF
255
+ *
256
+ * @param {string} url: absolute non-empty file path
257
+ * @param {Partial<GifOptions>} options: GIF conversion options
258
+ * @returns {Promise<GifResult>} A **Promise** which resolves to the result
259
+ */
260
+ export function toGif(url, options = {}) {
261
+ return VideoTrim.toGif(url, createGifOptions(options));
262
+ }
263
+
264
+ /**
265
+ * Merge multiple media files into a single file (headless, no UI)
266
+ *
267
+ * @param {string[]} urls: array of file paths to merge in order
268
+ * @param {Partial<MergeOptions>} options: merge options
269
+ * @returns {Promise<MergeResult>} A **Promise** which resolves to the result
270
+ */
271
+ export function merge(urls, options = {}) {
272
+ if (!urls?.length) {
273
+ throw new Error('URLs array cannot be empty!');
274
+ }
275
+ return VideoTrim.merge(urls, createMergeOptions(options));
276
+ }
277
+
278
+ /**
279
+ * Save a file to the device's photo library
280
+ *
281
+ * @param {string} filePath: absolute path to the file
282
+ * @returns {Promise<SaveToPhotoResult>} A **Promise** which resolves to the result
283
+ */
284
+ export function saveToPhoto(filePath) {
285
+ if (!filePath?.trim().length) {
286
+ throw new Error('File path cannot be empty!');
287
+ }
288
+ return VideoTrim.saveToPhoto(filePath);
289
+ }
290
+
291
+ /**
292
+ * Present the system document picker to save a file
293
+ *
294
+ * @param {string} filePath: absolute path to the file
295
+ * @returns {Promise<SaveToDocumentsResult>} A **Promise** which resolves to the result
296
+ */
297
+ export function saveToDocuments(filePath) {
298
+ if (!filePath?.trim().length) {
299
+ throw new Error('File path cannot be empty!');
300
+ }
301
+ return VideoTrim.saveToDocuments(filePath);
302
+ }
303
+
304
+ /**
305
+ * Open the system share sheet for a file
306
+ *
307
+ * @param {string} filePath: absolute path to the file
308
+ * @returns {Promise<ShareResult>} A **Promise** which resolves to the result
309
+ */
310
+ export function share(filePath) {
311
+ if (!filePath?.trim().length) {
312
+ throw new Error('File path cannot be empty!');
313
+ }
314
+ return VideoTrim.share(filePath);
315
+ }
174
316
  export * from "./NativeVideoTrim.js";
175
317
  export default VideoTrim;
176
318
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VideoTrimNewArch","VideoTrimOldArch","processColor","isFabric","global","nativeFabricUIManager","VideoTrim","createBaseOptions","overrides","saveToPhoto","type","outputExt","removeAfterSavedToPhoto","removeAfterFailedToSavePhoto","enablePreciseTrimming","createEditorConfig","enableHapticFeedback","maxDuration","minDuration","openDocumentsOnFinish","openShareSheetOnFinish","removeAfterSavedToDocuments","removeAfterFailedToSaveDocuments","removeAfterShared","removeAfterFailedToShare","cancelButtonText","saveButtonText","enableCancelDialog","cancelDialogTitle","cancelDialogMessage","cancelDialogCancelText","cancelDialogConfirmText","enableSaveDialog","saveDialogTitle","saveDialogMessage","saveDialogCancelText","saveDialogConfirmText","trimmingText","fullScreenModalIOS","autoplay","jumpToPositionOnLoad","closeWhenFinish","enableCancelTrimming","cancelTrimmingButtonText","enableCancelTrimmingDialog","cancelTrimmingDialogTitle","cancelTrimmingDialogMessage","cancelTrimmingDialogCancelText","cancelTrimmingDialogConfirmText","headerText","headerTextSize","headerTextColor","trimmerColor","handleIconColor","zoomOnWaitingDuration","alertOnFailToLoad","alertOnFailTitle","alertOnFailMessage","alertOnFailCloseText","waveformColor","waveformBackgroundColor","waveformBarWidth","waveformBarGap","waveformBarCornerRadius","createTrimOptions","startTime","endTime","showEditor","filePath","config","isLight","theme","_headerTextColor","_trimmerColor","_handleIconColor","_waveformColor","_waveformBackgroundColor","listFiles","cleanFiles","deleteFile","trim","length","Error","closeEditor","isValidFile","url","options"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["VideoTrimNewArch","VideoTrimOldArch","processColor","isFabric","global","nativeFabricUIManager","VideoTrim","createBaseOptions","overrides","saveToPhoto","type","outputExt","removeAfterSavedToPhoto","removeAfterFailedToSavePhoto","enablePreciseTrimming","removeAudio","speed","createCompressOptions","quality","bitrate","width","height","frameRate","createFrameExtractionOptions","time","format","maxWidth","maxHeight","createExtractAudioOptions","createGifOptions","startTime","endTime","fps","createMergeOptions","createEditorConfig","enableHapticFeedback","maxDuration","minDuration","openDocumentsOnFinish","openShareSheetOnFinish","removeAfterSavedToDocuments","removeAfterFailedToSaveDocuments","removeAfterShared","removeAfterFailedToShare","cancelButtonText","saveButtonText","enableCancelDialog","cancelDialogTitle","cancelDialogMessage","cancelDialogCancelText","cancelDialogConfirmText","enableSaveDialog","saveDialogTitle","saveDialogMessage","saveDialogCancelText","saveDialogConfirmText","trimmingText","fullScreenModalIOS","autoplay","jumpToPositionOnLoad","closeWhenFinish","enableCancelTrimming","cancelTrimmingButtonText","enableCancelTrimmingDialog","cancelTrimmingDialogTitle","cancelTrimmingDialogMessage","cancelTrimmingDialogCancelText","cancelTrimmingDialogConfirmText","headerText","headerTextSize","headerTextColor","trimmerColor","handleIconColor","zoomOnWaitingDuration","alertOnFailToLoad","alertOnFailTitle","alertOnFailMessage","alertOnFailCloseText","waveformColor","waveformBackgroundColor","waveformBarWidth","waveformBarGap","waveformBarCornerRadius","createTrimOptions","showEditor","filePath","config","isLight","theme","_headerTextColor","_trimmerColor","_handleIconColor","_waveformColor","_waveformBackgroundColor","listFiles","cleanFiles","deleteFile","trim","length","Error","closeEditor","isValidFile","url","options","getFrameAt","extractAudio","compress","toGif","merge","urls","saveToDocuments","share"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,gBAAgB,MAAM,sBAAmB;AAChD,OAAOC,gBAAgB,MAAM,cAAW;AAqBxC,SAASC,YAAY,QAAQ,cAAc;;AAE3C;AACA,MAAMC,QAAQ,GAAG,CAAC,CAAEC,MAAM,CAASC,qBAAqB;AACxD,MAAMC,SAAS,GAAGH,QAAQ,GAAGH,gBAAgB,GAAGC,gBAAgB;AAEhE,SAASM,iBAAiBA,CAACC,SAA+B,GAAG,CAAC,CAAC,EAAe;EAC5E,OAAO;IACLC,WAAW,EAAE,KAAK;IAClBC,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,KAAK;IAChBC,uBAAuB,EAAE,KAAK;IAC9BC,4BAA4B,EAAE,KAAK;IACnCC,qBAAqB,EAAE,KAAK;IAC5BC,WAAW,EAAE,KAAK;IAClBC,KAAK,EAAE,GAAG;IACV,GAAGR;EACL,CAAC;AACH;AAEA,SAASS,qBAAqBA,CAC5BT,SAAmC,GAAG,CAAC,CAAC,EACvB;EACjB,OAAO;IACLU,OAAO,EAAE,QAAQ;IACjBC,OAAO,EAAE,CAAC,CAAC;IACXC,KAAK,EAAE,CAAC,CAAC;IACTC,MAAM,EAAE,CAAC,CAAC;IACVC,SAAS,EAAE,CAAC,CAAC;IACbX,SAAS,EAAE,KAAK;IAChBI,WAAW,EAAE,KAAK;IAClB,GAAGP;EACL,CAAC;AACH;AAEA,SAASe,4BAA4BA,CACnCf,SAA0C,GAAG,CAAC,CAAC,EACvB;EACxB,OAAO;IACLgB,IAAI,EAAE,CAAC;IACPC,MAAM,EAAE,MAAM;IACdP,OAAO,EAAE,EAAE;IACXQ,QAAQ,EAAE,CAAC,CAAC;IACZC,SAAS,EAAE,CAAC,CAAC;IACb,GAAGnB;EACL,CAAC;AACH;AAEA,SAASoB,yBAAyBA,CAChCpB,SAAuC,GAAG,CAAC,CAAC,EACvB;EACrB,OAAO;IACLG,SAAS,EAAE,KAAK;IAChB,GAAGH;EACL,CAAC;AACH;AAEA,SAASqB,gBAAgBA,CAACrB,SAA8B,GAAG,CAAC,CAAC,EAAc;EACzE,OAAO;IACLsB,SAAS,EAAE,CAAC;IACZC,OAAO,EAAE,CAAC,CAAC;IACXC,GAAG,EAAE,EAAE;IACPZ,KAAK,EAAE,CAAC,CAAC;IACT,GAAGZ;EACL,CAAC;AACH;AAEA,SAASyB,kBAAkBA,CACzBzB,SAAgC,GAAG,CAAC,CAAC,EACvB;EACd,OAAO;IACLG,SAAS,EAAE,KAAK;IAChB,GAAGH;EACL,CAAC;AACH;AAEA,SAAS0B,kBAAkBA,CACzB1B,SAAgC,GAAG,CAAC,CAAC,EACvB;EACd,OAAO;IACL2B,oBAAoB,EAAE,IAAI;IAC1BC,WAAW,EAAE,CAAC,CAAC;IACfC,WAAW,EAAE,CAAC,CAAC;IACfC,qBAAqB,EAAE,KAAK;IAC5BC,sBAAsB,EAAE,KAAK;IAC7BC,2BAA2B,EAAE,KAAK;IAClCC,gCAAgC,EAAE,KAAK;IACvCC,iBAAiB,EAAE,KAAK;IACxBC,wBAAwB,EAAE,KAAK;IAC/BC,gBAAgB,EAAE,QAAQ;IAC1BC,cAAc,EAAE,MAAM;IACtBC,kBAAkB,EAAE,IAAI;IACxBC,iBAAiB,EAAE,UAAU;IAC7BC,mBAAmB,EAAE,8BAA8B;IACnDC,sBAAsB,EAAE,OAAO;IAC/BC,uBAAuB,EAAE,SAAS;IAClCC,gBAAgB,EAAE,IAAI;IACtBC,eAAe,EAAE,eAAe;IAChCC,iBAAiB,EAAE,4BAA4B;IAC/CC,oBAAoB,EAAE,OAAO;IAC7BC,qBAAqB,EAAE,SAAS;IAChCC,YAAY,EAAE,mBAAmB;IACjCC,kBAAkB,EAAE,KAAK;IACzBC,QAAQ,EAAE,KAAK;IACfC,oBAAoB,EAAE,CAAC,CAAC;IACxBC,eAAe,EAAE,IAAI;IACrBC,oBAAoB,EAAE,IAAI;IAC1BC,wBAAwB,EAAE,QAAQ;IAClCC,0BAA0B,EAAE,IAAI;IAChCC,yBAAyB,EAAE,UAAU;IACrCC,2BAA2B,EAAE,uCAAuC;IACpEC,8BAA8B,EAAE,OAAO;IACvCC,+BAA+B,EAAE,SAAS;IAC1CC,UAAU,EAAE,EAAE;IACdC,cAAc,EAAE,EAAE;IAClBC,eAAe,EAAEpE,YAAY,CAAC,OAAO,CAAW;IAChDqE,YAAY,EAAErE,YAAY,CAAC,SAAS,CAAW;IAC/CsE,eAAe,EAAEtE,YAAY,CAAC,OAAO,CAAW;IAChDuE,qBAAqB,EAAE,IAAI;IAC3BC,iBAAiB,EAAE,IAAI;IACvBC,gBAAgB,EAAE,OAAO;IACzBC,kBAAkB,EAChB,oEAAoE;IACtEC,oBAAoB,EAAE,OAAO;IAC7BC,aAAa,EAAE5E,YAAY,CAAC,OAAO,CAAW;IAC9C6E,uBAAuB,EAAE7E,YAAY,CAAC,SAAS,CAAW;IAC1D8E,gBAAgB,EAAE,CAAC;IACnBC,cAAc,EAAE,CAAC;IACjBC,uBAAuB,EAAE,GAAG;IAC5B,GAAG3E,iBAAiB,CAACC,SAAS,CAAC;IAC/B,GAAGA;EACL,CAAC;AACH;AAEA,SAAS2E,iBAAiBA,CAAC3E,SAA+B,GAAG,CAAC,CAAC,EAAe;EAC5E,OAAO;IACLsB,SAAS,EAAE,CAAC;IACZC,OAAO,EAAE,IAAI;IACb,GAAGxB,iBAAiB,CAACC,SAAS,CAAC;IAC/B,GAAGA;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS4E,UAAUA,CACxBC,QAAgB,EAChBC,MAeC,EACK;EACN,MAAM;IACJhB,eAAe;IACfC,YAAY;IACZC,eAAe;IACfM,aAAa;IACbC;EACF,CAAC,GAAGO,MAAM;EACV,MAAMC,OAAO,GAAGD,MAAM,CAACE,KAAK,KAAK,OAAO;EACxC,MAAMC,gBAAgB,GAAGvF,YAAY,CACnCoE,eAAe,KAAKiB,OAAO,GAAG,OAAO,GAAG,OAAO,CACjD,CAAC;EACD,MAAMG,aAAa,GAAGxF,YAAY,CAACqE,YAAY,IAAI,SAAS,CAAC;EAC7D,MAAMoB,gBAAgB,GAAGzF,YAAY,CACnCsE,eAAe,KAAKe,OAAO,GAAG,OAAO,GAAG,OAAO,CACjD,CAAC;EACD,MAAMK,cAAc,GAAG1F,YAAY,CAAC4E,aAAa,IAAI,OAAO,CAAC;EAC7D,MAAMe,wBAAwB,GAAG3F,YAAY,CAC3C6E,uBAAuB,IAAI,SAC7B,CAAC;EAEDzE,SAAS,CAAC8E,UAAU,CAClBC,QAAQ,EACRnD,kBAAkB,CAAC;IACjB,GAAGoD,MAAM;IACThB,eAAe,EAAEmB,gBAAuB;IACxClB,YAAY,EAAEmB,aAAoB;IAClClB,eAAe,EAAEmB,gBAAuB;IACxCb,aAAa,EAAEc,cAAqB;IACpCb,uBAAuB,EAAEc;EAC3B,CAAC,CACH,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAA,EAAsB;EAC7C,OAAOxF,SAAS,CAACwF,SAAS,CAAC,CAAC;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAA,EAAoB;EAC5C,OAAOzF,SAAS,CAACyF,UAAU,CAAC,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACX,QAAgB,EAAoB;EAC7D,IAAI,CAACA,QAAQ,EAAEY,IAAI,CAAC,CAAC,CAACC,MAAM,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EAC/C;EACA,OAAO7F,SAAS,CAAC0F,UAAU,CAACX,QAAQ,CAAC;AACvC;;AAEA;AACA;AACA;AACA,OAAO,SAASe,WAAWA,CAAA,EAAS;EAClC,OAAO9F,SAAS,CAAC8F,WAAW,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,GAAW,EAAiC;EACtE,OAAOhG,SAAS,CAAC+F,WAAW,CAACC,GAAG,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASL,IAAIA,CAClBK,GAAW,EACXC,OAA6B,EACR;EACrB,OAAOjG,SAAS,CAAC2F,IAAI,CAACK,GAAG,EAAEnB,iBAAiB,CAACoB,OAAO,CAAC,CAAC;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CACxBF,GAAW,EACXC,OAAwC,GAAG,CAAC,CAAC,EACvB;EACtB,OAAOjG,SAAS,CAACkG,UAAU,CAACF,GAAG,EAAE/E,4BAA4B,CAACgF,OAAO,CAAC,CAAC;AACzE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAC1BH,GAAW,EACXC,OAAqC,GAAG,CAAC,CAAC,EACb;EAC7B,OAAOjG,SAAS,CAACmG,YAAY,CAACH,GAAG,EAAE1E,yBAAyB,CAAC2E,OAAO,CAAC,CAAC;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,QAAQA,CACtBJ,GAAW,EACXC,OAAiC,GAAG,CAAC,CAAC,EACb;EACzB,OAAOjG,SAAS,CAACoG,QAAQ,CAACJ,GAAG,EAAErF,qBAAqB,CAACsF,OAAO,CAAC,CAAC;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,KAAKA,CACnBL,GAAW,EACXC,OAA4B,GAAG,CAAC,CAAC,EACb;EACpB,OAAOjG,SAAS,CAACqG,KAAK,CAACL,GAAG,EAAEzE,gBAAgB,CAAC0E,OAAO,CAAC,CAAC;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,KAAKA,CACnBC,IAAc,EACdN,OAA8B,GAAG,CAAC,CAAC,EACb;EACtB,IAAI,CAACM,IAAI,EAAEX,MAAM,EAAE;IACjB,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;EAChD;EACA,OAAO7F,SAAS,CAACsG,KAAK,CAACC,IAAI,EAAE5E,kBAAkB,CAACsE,OAAO,CAAC,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS9F,WAAWA,CAAC4E,QAAgB,EAA8B;EACxE,IAAI,CAACA,QAAQ,EAAEY,IAAI,CAAC,CAAC,CAACC,MAAM,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EAC/C;EACA,OAAO7F,SAAS,CAACG,WAAW,CAAC4E,QAAQ,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASyB,eAAeA,CAACzB,QAAgB,EAAkC;EAChF,IAAI,CAACA,QAAQ,EAAEY,IAAI,CAAC,CAAC,CAACC,MAAM,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EAC/C;EACA,OAAO7F,SAAS,CAACwG,eAAe,CAACzB,QAAQ,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS0B,KAAKA,CAAC1B,QAAgB,EAAwB;EAC5D,IAAI,CAACA,QAAQ,EAAEY,IAAI,CAAC,CAAC,CAACC,MAAM,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EAC/C;EACA,OAAO7F,SAAS,CAACyG,KAAK,CAAC1B,QAAQ,CAAC;AAClC;AAEA,cAAc,sBAAmB;AACjC,eAAe/E,SAAS","ignoreList":[]}
@@ -24,6 +24,14 @@ export interface BaseOptions {
24
24
  * happens regardless of this flag, so precise trimming comes for free in that case.
25
25
  */
26
26
  enablePreciseTrimming: boolean;
27
+ /** When `true`, strips the audio track from the output. Default `false`. */
28
+ removeAudio: boolean;
29
+ /**
30
+ * Playback speed multiplier applied during export. `1.0` is normal speed,
31
+ * `2.0` is double speed, `0.5` is half speed. Valid range: 0.25–4.0.
32
+ * When not `1.0`, re-encoding is forced regardless of `enablePreciseTrimming`.
33
+ */
34
+ speed: number;
27
35
  }
28
36
  /**
29
37
  * Configuration for the video trimmer editor UI.
@@ -172,6 +180,130 @@ export interface TrimResult {
172
180
  /** Whether the trim operation completed successfully. */
173
181
  success: boolean;
174
182
  }
183
+ /**
184
+ * Options for extracting a single frame from a video.
185
+ */
186
+ export interface FrameExtractionOptions {
187
+ /** Timestamp in milliseconds at which to extract the frame. */
188
+ time: number;
189
+ /** Output image format: `"jpeg"` (default) or `"png"`. */
190
+ format: string;
191
+ /** JPEG compression quality from 0–100. Default `80`. Ignored for PNG. */
192
+ quality: number;
193
+ /** Maximum width in pixels. Height is auto-calculated to preserve aspect ratio. `-1` for original. */
194
+ maxWidth: number;
195
+ /** Maximum height in pixels. Width is auto-calculated to preserve aspect ratio. `-1` for original. */
196
+ maxHeight: number;
197
+ }
198
+ /**
199
+ * Result returned by {@link Spec.getFrameAt}.
200
+ */
201
+ export interface FrameResult {
202
+ /** Absolute path to the extracted image file. */
203
+ outputPath: string;
204
+ }
205
+ /**
206
+ * Options for extracting the audio track from a video file.
207
+ */
208
+ export interface ExtractAudioOptions {
209
+ /** Output audio file extension (e.g. `"mp3"`, `"m4a"`, `"wav"`). Default `"mp3"`. */
210
+ outputExt: string;
211
+ }
212
+ /**
213
+ * Result returned by {@link Spec.extractAudio}.
214
+ */
215
+ export interface ExtractAudioResult {
216
+ /** Absolute path to the extracted audio file. */
217
+ outputPath: string;
218
+ /** Duration of the audio in milliseconds. */
219
+ duration: number;
220
+ }
221
+ /**
222
+ * Options for compressing a video file.
223
+ */
224
+ export interface CompressOptions {
225
+ /**
226
+ * Quality preset: `"low"` (smallest file), `"medium"` (balanced), `"high"` (best quality).
227
+ * Maps to CRF 28, 23, 18 respectively. Ignored when `bitrate` is set.
228
+ */
229
+ quality: string;
230
+ /** Explicit target bitrate in bits per second. Overrides `quality` when set. `-1` to use quality preset. */
231
+ bitrate: number;
232
+ /** Target width in pixels. `-1` to keep original. Height is auto-calculated to preserve aspect ratio. */
233
+ width: number;
234
+ /** Target height in pixels. `-1` to keep original. Width is auto-calculated to preserve aspect ratio. */
235
+ height: number;
236
+ /** Target frame rate. `-1` to keep original. */
237
+ frameRate: number;
238
+ /** Output file extension (e.g. `"mp4"`). Default `"mp4"`. */
239
+ outputExt: string;
240
+ /** When `true`, strips the audio track from the output. Default `false`. */
241
+ removeAudio: boolean;
242
+ }
243
+ /**
244
+ * Result returned by {@link Spec.compress}.
245
+ */
246
+ export interface CompressResult {
247
+ /** Absolute path to the compressed output file. */
248
+ outputPath: string;
249
+ }
250
+ /**
251
+ * Options for converting a video segment to an animated GIF.
252
+ */
253
+ export interface GifOptions {
254
+ /** Start time in milliseconds. Default `0`. */
255
+ startTime: number;
256
+ /** End time in milliseconds. Default `-1` (end of video). */
257
+ endTime: number;
258
+ /** Frame rate of the GIF. Default `10`. */
259
+ fps: number;
260
+ /** Width in pixels. Height is auto-calculated to preserve aspect ratio. `-1` for original. */
261
+ width: number;
262
+ }
263
+ /**
264
+ * Result returned by {@link Spec.toGif}.
265
+ */
266
+ export interface GifResult {
267
+ /** Absolute path to the generated GIF file. */
268
+ outputPath: string;
269
+ }
270
+ /**
271
+ * Options for merging multiple media files into one.
272
+ */
273
+ export interface MergeOptions {
274
+ /** Output file extension (e.g. `"mp4"`, `"wav"`). Default `"mp4"`. */
275
+ outputExt: string;
276
+ }
277
+ /**
278
+ * Result returned by {@link Spec.merge}.
279
+ */
280
+ export interface MergeResult {
281
+ /** Absolute path to the merged output file. */
282
+ outputPath: string;
283
+ /** Total duration of the merged file in milliseconds. */
284
+ duration: number;
285
+ }
286
+ /**
287
+ * Result returned by {@link Spec.saveToPhoto}.
288
+ */
289
+ export interface SaveToPhotoResult {
290
+ /** Whether the file was saved to the photo library successfully. */
291
+ success: boolean;
292
+ }
293
+ /**
294
+ * Result returned by {@link Spec.saveToDocuments}.
295
+ */
296
+ export interface SaveToDocumentsResult {
297
+ /** Whether the file was saved to documents successfully. */
298
+ success: boolean;
299
+ }
300
+ /**
301
+ * Result returned by {@link Spec.share}.
302
+ */
303
+ export interface ShareResult {
304
+ /** Whether the user completed the share action. */
305
+ success: boolean;
306
+ }
175
307
  /**
176
308
  * TurboModule spec for the native VideoTrim module.
177
309
  */
@@ -190,6 +322,22 @@ export interface Spec extends TurboModule {
190
322
  isValidFile(url: string): Promise<FileValidationResult>;
191
323
  /** Perform a headless trim (no UI) on the given URL with the specified options. */
192
324
  trim(url: string, options: TrimOptions): Promise<TrimResult>;
325
+ /** Extract a single frame from a video at the specified timestamp. */
326
+ getFrameAt(url: string, options: FrameExtractionOptions): Promise<FrameResult>;
327
+ /** Extract the audio track from a video file into a separate audio file. */
328
+ extractAudio(url: string, options: ExtractAudioOptions): Promise<ExtractAudioResult>;
329
+ /** Compress a video file to reduce its size. */
330
+ compress(url: string, options: CompressOptions): Promise<CompressResult>;
331
+ /** Convert a video segment to an animated GIF. */
332
+ toGif(url: string, options: GifOptions): Promise<GifResult>;
333
+ /** Merge multiple media files into a single file. Headless only, no editor UI. */
334
+ merge(urls: ReadonlyArray<string>, options: MergeOptions): Promise<MergeResult>;
335
+ /** Save a file to the device's photo library. Requires photo library permission. */
336
+ saveToPhoto(filePath: string): Promise<SaveToPhotoResult>;
337
+ /** Present the system document picker to save a file to the user's chosen location. */
338
+ saveToDocuments(filePath: string): Promise<SaveToDocumentsResult>;
339
+ /** Open the system share sheet for a file. */
340
+ share(filePath: string): Promise<ShareResult>;
193
341
  /** Emitted when the trim operation starts. */
194
342
  readonly onStartTrimming: EventEmitter<void>;
195
343
  /** Emitted when the user cancels an in-progress trim operation. */
@@ -1 +1 @@
1
- {"version":3,"file":"NativeVideoTrim.d.ts","sourceRoot":"","sources":["../../../src/NativeVideoTrim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NativeVideoTrim.d.ts","sourceRoot":"","sources":["../../../src/NativeVideoTrim.ts"],"names":[],"mappings":"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"}