diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-09-07 19:22:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-07 11:22:44 -0700 |
commit | b7d78fe59b73294ac13baa51a6a7cd94698cb205 (patch) | |
tree | a62cb36045a7c926f921fd8631df8cb98e442335 | |
parent | 42fb92064acc383a2d264f3cae0b1234c1822beb (diff) | |
download | voidsky-b7d78fe59b73294ac13baa51a6a7cd94698cb205.tar.zst |
[Video] Only compress if >25mb or unknown format (#5187)
Co-authored-by: Hailey <me@haileyok.com>
-rw-r--r-- | src/lib/media/video/compress.ts | 17 | ||||
-rw-r--r-- | src/state/queries/video/compress-video.ts | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/lib/media/video/compress.ts b/src/lib/media/video/compress.ts index e783a8438..ebbbc2034 100644 --- a/src/lib/media/video/compress.ts +++ b/src/lib/media/video/compress.ts @@ -1,9 +1,13 @@ import {getVideoMetaData, Video} from 'react-native-compressor' +import {ImagePickerAsset} from 'expo-image-picker' +import {SUPPORTED_MIME_TYPES, SupportedMimeTypes} from '#/lib/constants' import {CompressedVideo} from './types' +const MIN_SIZE_FOR_COMPRESSION = 1024 * 1024 * 25 // 25mb + export async function compressVideo( - file: string, + file: ImagePickerAsset, opts?: { signal?: AbortSignal onProgress?: (progress: number) => void @@ -11,12 +15,21 @@ export async function compressVideo( ): Promise<CompressedVideo> { const {onProgress, signal} = opts || {} + const isAcceptableFormat = SUPPORTED_MIME_TYPES.includes( + file.mimeType as SupportedMimeTypes, + ) + + const minimumFileSizeForCompress = isAcceptableFormat + ? MIN_SIZE_FOR_COMPRESSION + : 0 + const compressed = await Video.compress( - file, + file.uri, { compressionMethod: 'manual', bitrate: 3_000_000, // 3mbps maxSize: 1920, + minimumFileSizeForCompress, getCancellationId: id => { if (signal) { signal.addEventListener('abort', () => { diff --git a/src/state/queries/video/compress-video.ts b/src/state/queries/video/compress-video.ts index 533b58416..cefbf9406 100644 --- a/src/state/queries/video/compress-video.ts +++ b/src/state/queries/video/compress-video.ts @@ -20,7 +20,7 @@ export function useCompressVideoMutation({ mutationKey: ['video', 'compress'], mutationFn: cancelable( (asset: ImagePickerAsset) => - compressVideo(asset.uri, { + compressVideo(asset, { onProgress: num => onProgress(trunc2dp(num)), signal, }), |