diff --git a/src/App.tsx b/src/App.tsx index 384e2f4..822245c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -59,6 +59,7 @@ export default function App({ children }: { children: React.ReactNode }) { const PROXY_URL = useSettingsPageStatesStore(state => state.settings.proxy_url); const VIDEO_FORMAT = useSettingsPageStatesStore(state => state.settings.video_format); const AUDIO_FORMAT = useSettingsPageStatesStore(state => state.settings.audio_format); + const ALWAYS_REENCODE_VIDEO = useSettingsPageStatesStore(state => state.settings.always_reencode_video); const EMBED_VIDEO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_video_metadata); const EMBED_AUDIO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const EMBED_AUDIO_THUMBNAIL = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); @@ -187,10 +188,18 @@ export default function App({ children }: { children: React.ReactNode }) { if (fileType !== 'unknown' && (VIDEO_FORMAT !== 'auto' || AUDIO_FORMAT !== 'auto')) { if (VIDEO_FORMAT !== 'auto' && fileType === 'video+audio') { - args.push('--merge-output-format', VIDEO_FORMAT); + if (ALWAYS_REENCODE_VIDEO) { + args.push('--recode-video', VIDEO_FORMAT); + } else { + args.push('--merge-output-format', VIDEO_FORMAT); + } } if (VIDEO_FORMAT !== 'auto' && fileType === 'video') { + if (ALWAYS_REENCODE_VIDEO) { + args.push('--recode-video', VIDEO_FORMAT); + } else { args.push('--remux-video', VIDEO_FORMAT); + } } if (AUDIO_FORMAT !== 'auto' && fileType === 'audio') { args.push('--extract-audio', '--audio-format', AUDIO_FORMAT); diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index c0473a9..a354447 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -64,6 +64,7 @@ export default function SettingsPage() { const proxyUrl = useSettingsPageStatesStore(state => state.settings.proxy_url); const videoFormat = useSettingsPageStatesStore(state => state.settings.video_format); const audioFormat = useSettingsPageStatesStore(state => state.settings.audio_format); + const alwaysReencodeVideo = useSettingsPageStatesStore(state => state.settings.always_reencode_video); const embedVideoMetadata = useSettingsPageStatesStore(state => state.settings.embed_video_metadata); const embedAudioMetadata = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const embedAudioThumbnail = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); @@ -452,6 +453,15 @@ export default function SettingsPage() { +
+

Always Re-Encode Video

+

Instead of remuxing (simple container change) always re-encode the video to the target format with best compatible codecs (better compatibility, takes longer processing time)

+ saveSettingsKey('always_reencode_video', checked)} + /> +
diff --git a/src/services/store.ts b/src/services/store.ts index 405ccaa..d7820a5 100644 --- a/src/services/store.ts +++ b/src/services/store.ts @@ -112,6 +112,7 @@ export const useSettingsPageStatesStore = create((set) proxy_url: '', video_format: 'auto', audio_format: 'auto', + always_reencode_video: false, embed_video_metadata: false, embed_audio_metadata: true, embed_audio_thumbnail: true, @@ -151,6 +152,7 @@ export const useSettingsPageStatesStore = create((set) proxy_url: '', video_format: 'auto', audio_format: 'auto', + always_reencode_video: false, embed_video_metadata: false, embed_audio_metadata: true, embed_audio_thumbnail: true, diff --git a/src/types/settings.ts b/src/types/settings.ts index 6547ddc..13b2756 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -14,6 +14,7 @@ export interface Settings { proxy_url: string; video_format: string; audio_format: string; + always_reencode_video: boolean; embed_video_metadata: boolean; embed_audio_metadata: boolean; embed_audio_thumbnail: boolean;