(feat): added always re-encode video option in settings

This commit is contained in:
2025-07-11 20:18:47 +05:30
parent fbadbb001e
commit c78cad0034
4 changed files with 23 additions and 1 deletions

View File

@@ -59,6 +59,7 @@ export default function App({ children }: { children: React.ReactNode }) {
const PROXY_URL = useSettingsPageStatesStore(state => state.settings.proxy_url); const PROXY_URL = useSettingsPageStatesStore(state => state.settings.proxy_url);
const VIDEO_FORMAT = useSettingsPageStatesStore(state => state.settings.video_format); const VIDEO_FORMAT = useSettingsPageStatesStore(state => state.settings.video_format);
const AUDIO_FORMAT = useSettingsPageStatesStore(state => state.settings.audio_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_VIDEO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_video_metadata);
const EMBED_AUDIO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const EMBED_AUDIO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata);
const EMBED_AUDIO_THUMBNAIL = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); const EMBED_AUDIO_THUMBNAIL = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail);
@@ -187,11 +188,19 @@ export default function App({ children }: { children: React.ReactNode }) {
if (fileType !== 'unknown' && (VIDEO_FORMAT !== 'auto' || AUDIO_FORMAT !== 'auto')) { if (fileType !== 'unknown' && (VIDEO_FORMAT !== 'auto' || AUDIO_FORMAT !== 'auto')) {
if (VIDEO_FORMAT !== 'auto' && fileType === 'video+audio') { if (VIDEO_FORMAT !== 'auto' && fileType === 'video+audio') {
if (ALWAYS_REENCODE_VIDEO) {
args.push('--recode-video', VIDEO_FORMAT);
} else {
args.push('--merge-output-format', VIDEO_FORMAT); args.push('--merge-output-format', VIDEO_FORMAT);
} }
}
if (VIDEO_FORMAT !== 'auto' && fileType === 'video') { if (VIDEO_FORMAT !== 'auto' && fileType === 'video') {
if (ALWAYS_REENCODE_VIDEO) {
args.push('--recode-video', VIDEO_FORMAT);
} else {
args.push('--remux-video', VIDEO_FORMAT); args.push('--remux-video', VIDEO_FORMAT);
} }
}
if (AUDIO_FORMAT !== 'auto' && fileType === 'audio') { if (AUDIO_FORMAT !== 'auto' && fileType === 'audio') {
args.push('--extract-audio', '--audio-format', AUDIO_FORMAT); args.push('--extract-audio', '--audio-format', AUDIO_FORMAT);
} }

View File

@@ -64,6 +64,7 @@ export default function SettingsPage() {
const proxyUrl = useSettingsPageStatesStore(state => state.settings.proxy_url); const proxyUrl = useSettingsPageStatesStore(state => state.settings.proxy_url);
const videoFormat = useSettingsPageStatesStore(state => state.settings.video_format); const videoFormat = useSettingsPageStatesStore(state => state.settings.video_format);
const audioFormat = useSettingsPageStatesStore(state => state.settings.audio_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 embedVideoMetadata = useSettingsPageStatesStore(state => state.settings.embed_video_metadata);
const embedAudioMetadata = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const embedAudioMetadata = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata);
const embedAudioThumbnail = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); const embedAudioThumbnail = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail);
@@ -452,6 +453,15 @@ export default function SettingsPage() {
</div> </div>
</RadioGroup> </RadioGroup>
</div> </div>
<div className="always-reencode-video">
<h3 className="font-semibold">Always Re-Encode Video</h3>
<p className="text-xs text-muted-foreground mb-3">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)</p>
<Switch
id="always-reencode-video"
checked={alwaysReencodeVideo}
onCheckedChange={(checked) => saveSettingsKey('always_reencode_video', checked)}
/>
</div>
</TabsContent> </TabsContent>
<TabsContent key="metadata" value="metadata" className="flex flex-col gap-4 min-h-[235px]"> <TabsContent key="metadata" value="metadata" className="flex flex-col gap-4 min-h-[235px]">
<div className="embed-video-metadata"> <div className="embed-video-metadata">

View File

@@ -112,6 +112,7 @@ export const useSettingsPageStatesStore = create<SettingsPageStatesStore>((set)
proxy_url: '', proxy_url: '',
video_format: 'auto', video_format: 'auto',
audio_format: 'auto', audio_format: 'auto',
always_reencode_video: false,
embed_video_metadata: false, embed_video_metadata: false,
embed_audio_metadata: true, embed_audio_metadata: true,
embed_audio_thumbnail: true, embed_audio_thumbnail: true,
@@ -151,6 +152,7 @@ export const useSettingsPageStatesStore = create<SettingsPageStatesStore>((set)
proxy_url: '', proxy_url: '',
video_format: 'auto', video_format: 'auto',
audio_format: 'auto', audio_format: 'auto',
always_reencode_video: false,
embed_video_metadata: false, embed_video_metadata: false,
embed_audio_metadata: true, embed_audio_metadata: true,
embed_audio_thumbnail: true, embed_audio_thumbnail: true,

View File

@@ -14,6 +14,7 @@ export interface Settings {
proxy_url: string; proxy_url: string;
video_format: string; video_format: string;
audio_format: string; audio_format: string;
always_reencode_video: boolean;
embed_video_metadata: boolean; embed_video_metadata: boolean;
embed_audio_metadata: boolean; embed_audio_metadata: boolean;
embed_audio_thumbnail: boolean; embed_audio_thumbnail: boolean;