about summary refs log tree commit diff
path: root/src/lib/media/video/compress.ts
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-07-06 01:50:03 +0100
committerGitHub <noreply@github.com>2024-07-05 17:50:03 -0700
commit8f06ba70bb02a9dc3f09285719bd1585cc43aaeb (patch)
treeeacc2a658522826a99d1ca3055fbd54a63ff65de /src/lib/media/video/compress.ts
parent56b688744ef3492a1e93d8a6ee04a116ceb7253a (diff)
downloadvoidsky-8f06ba70bb02a9dc3f09285719bd1585cc43aaeb.tar.zst
Video compression in composer (#4638)
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
Diffstat (limited to 'src/lib/media/video/compress.ts')
-rw-r--r--src/lib/media/video/compress.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/media/video/compress.ts b/src/lib/media/video/compress.ts
new file mode 100644
index 000000000..60e5e94a0
--- /dev/null
+++ b/src/lib/media/video/compress.ts
@@ -0,0 +1,30 @@
+import {getVideoMetaData, Video} from 'react-native-compressor'
+
+export type CompressedVideo = {
+  uri: string
+  size: number
+}
+
+export async function compressVideo(
+  file: string,
+  opts?: {
+    getCancellationId?: (id: string) => void
+    onProgress?: (progress: number) => void
+  },
+): Promise<CompressedVideo> {
+  const {onProgress, getCancellationId} = opts || {}
+
+  const compressed = await Video.compress(
+    file,
+    {
+      getCancellationId,
+      compressionMethod: 'manual',
+      bitrate: 3_000_000, // 3mbps
+      maxSize: 1920,
+    },
+    onProgress,
+  )
+
+  const info = await getVideoMetaData(compressed)
+  return {uri: compressed, size: info.size}
+}