Bedste måde at håndtere en mappe med flere lydformater

Ok, jeg har en mappe fyldt med mkv-filer, som jeg gerne vil køre igennem. Jeg prøver at finde ud af, hvordan jeg håndterer lyd korrekt.

Mine filer er en blanding af stereo, surround og endda noget mono. Målet er at opsætte en opgave, der tager alt med to kanaler eller derunder og bruger én sæt lydindstillinger, mens en anden bruges til noget med mere end to kanaler. Denne funktion er allerede indbygget i MCEbuddy til AC3, men den gælder kun AC3, hvilket betyder, at den ignorerer DTS osv.

Jeg overvejede at “pass’e” formater som AAC, da det sandsynligvis er 2-kanals kilden, men jeg har også 2-kanals eac3, ac3, flac osv. Så at gætte om lyden er 2-kanals udelukkende baseret på encoderen vil ikke fungere. At “pass’e” 6-kanals lyd fungerer fint for mig, hvis kilden er ac3 eller eac3, men jeg ville ikke “pass’e” DTS. Målet er at gøre filen mindre, og DTS er bare lidt for tung til det.

Jeg husker at have set en tråd, hvor nogen havde en kommandolinjekommando, der ville “pass’e” lyd baseret på lydens bitrate. Logikken var, at hvis lydens bitrate er under cirka 200, er det sandsynligvis 2 kanaler eller derunder. Over dette er det sandsynligvis 6 osv. Desværre bogmærkede jeg ikke tråden og kan ikke finde den for mit liv.

Så jeg leder efter hjælp og forslag. Hvordan ville du håndtere en mappe som denne?

Her er et alternativt forslag, der bruger profiler. MCEBuddy-profiler har en funktion kaldet “unsupported combinations”. Grundlæggende kan du for en profil-encoder angive kombinationer af video-, lyd- og containerparametre, der ikke understøttes. Hvis den støder på sådan en kombination, springes den encoder over, og den går videre til den næste. Flere detaljer her:

Med denne parameter kan du gribe det an på to forskellige måder:

  1. Brug den første encoder til ikke at håndtere visse kombinationer (f.eks. håndterer HandBrake ikke DTS-spor og kopierer blot lydsporene), og lad en anden tage sig af resten (ffmpeg koder alle lydsporene til ac3). Et eksempel kunne se sådan ud (kun den relevante del af profilen; du skal udfylde resten):

    order=handbrake,ffmpeg
    handbrake-unsupported=dts
    handbrake-audio=-E copy
    handbrake-audioac3=-E copy
    ffmpeg-audio=-acodec ac3 -ab 384k
    ffmpeg-audioac3=-acodec ac3 -ab 384k

  2. Den anden tilgang er at bruge profiler med konverteringsopgaver: opret to profiler, angiv kun én encoder i hver profil, og for den ene profil angiver du dts som ikke-understøttet, mens du for den anden angiver aac,ac3 som ikke-understøttet. Opret to konverteringsopgaver, hvor hver bruger én af de to nye profiler. Nu vil kun den opgave, hvis profil ikke understøt det pågældende lydformat, fejle, mens den anden kører.

“Fall through”-tilgangen var det første, jeg kiggede på lige efter jeg havde postet. Det er interessant, og ret smart i den forstand, at den lader dig isolere dine indstillinger pr. format. Desværre er det ikke rigtigt det, jeg har brug for.

Mit problem er, at den samme codec/format findes i flere varianter af antal kanaler. Med Atmos eller DTS er det nærmest givet, at lyden ikke er 2.0, men med EAC3, AC3 eller endda AAC eller Flac kan det både være 2.0 eller 5.1. Så jeg kan falde gennem profilrækkefølgen, indtil jeg rammer en for, lad os sige AAC, men så har jeg ingen måde at vide, om det er AAC 2.0 eller 5.1, osv. Kort sagt: at isolere en codec er ikke det, jeg har brug for. Jeg skal finde ud af, om streamen er 2.0 eller surround, og så lade MCEbuddy justere indstillingerne automatisk.

MCEbuddy har indbygget en mekanisme til at finde ud af 2.0 vs. 5.1, men den virker kun med AC3. Eksempelvis tog jeg den samme profil, du postede ovenfor, og ændrede ffmpeg-audio til 192, da det passer bedre til stereo end 384.

order=handbrake,ffmpeg
handbrake-unsupported=dts
handbrake-audio=-E copy
handbrake-audioac3=-E copy
ffmpeg-audio=-acodec ac3 -ab 192k
ffmpeg-audioac3=-acodec ac3 -ab 384k

Hvis jeg bruger disse indstillinger og fodrer den med en EAC3 5.1-fil, vil den lave en fil med 192k lyd. Hvis outputformatet var sat til AAC, ville den give 256k lyd, osv.

Det samme gælder AAC 2.0 vs. 5.1 osv. AC3 virker som forventet, da logikken kun er indbygget for den, og den vil lave 192k 2.0 eller 384k 5.1. Kort sagt: med alt andet end AC3 ignoreres ffmpeg-audioac3-linjen fuldstændigt og har ingen effekt på konverteringen; kun ffmpeg-audio-linjen bruges af MCEbuddy. Hvis du har krydset “surround sound”-boksen af i GUI’en, vil MCEbuddy tilføje et -6ch-flag til ffmpeg-audio-linjen og behandle det som dine surround-indstillinger.

I mit eksempel brugte jeg 192k til 2.0-output og 384k til 5.1-output. Eftersom AAC ikke er AC3, vil MCEbuddy ignorere ffmpeg-audioac3=-acodec ac3 -ab 384k og i stedet bruge ffmpeg-audio=-acodec ac3 -ab 192k. Hvis jeg har krydset surround af i GUI’en, tilføjes -6ch-flaget, og jeg ender med noget som ffmpeg-audio=-acodec ac3 -ab 192k -6ch. Hvis output også er AAC, aktiveres en slags intern failsafe, der ikke tillader 5.1 mix på 192k; den hæver automatisk bithastigheden til 256k (minimum for AAC 5.1). Så ender jeg med en 256k 5.1-fil. Jeg er ikke sikker på, om den gør det samme for andre formater.

Ideelt set ville det være fantastisk, hvis ffmpeg-audioac3 kunne fungere som “catch-all”-indstilling for al surround, ikke kun AC3, mens ffmpeg-audio så ville håndtere al 2.0-mix. Men den funktion findes ikke. At finde en workaround har indtil videre vist sig udfordrende.

du kan altid oprette en anmodning om en funktion til at håndtere <encoder>-audiodts eller lignende tags for ikke-ac3-lyd.

Hvis -audiodts fungerede efter samme princip som -audioac3, burde det virke, men så ville jeg skulle bruge en til hver format – -audioflac, -audioaac osv., osv., osv.

Jeg tror, en lettere løsning ville være noget i retning af
ffmpeg-audio <=2ch – 192 kb-indstillinger
ffmpeg-audio >2ch – 448 kb-indstillinger

Med andre ord skal tjekket ske ud fra antallet af lydkanaler, ikke codec’en. På den måde er det helt ligegyldigt, hvilken input-codec der bruges. Fodrer den med Flac eller AAC, der har 2 kanaler, spytter den 192k ud. Giver du den samme Flac- eller AAC-fil med mere end 2 kanaler, spytter den 448k ud osv.

Lige nu er mit go-to output-codec EAC3 ved 448. Det fungerer fint til 6 kanaler, men eftersom MCEbuddy ikke tager hensyn til, om inputtet har 2- eller 6-kanals lyd, ender jeg med 448k stereo-lyd på filer, der kun har 2.0. 448k for stereo er spild, og det er det, jeg prøver at undgå.

Jeg indser også, at denne funktion ligger uden for programmets scope. Det er lavet til at rippe reklamer og skrumpe filer fra en DVR. Ingen DVR’er, så vidt jeg ved, optager i eac3, flac, aac osv., så jeg ville bede udvikleren om at kode/tilføje noget, som intet har med programmets hovedformål at gøre. Det har jeg det dårligt med, og jeg ønsker, jeg kunne finde mit eget workaround.

Du behøver ikke at føle dig dårligt tilpas; opret en funktionsanmodning, forklar behovet og forslagene, og åbn den for en diskussion, så vi kan implementere den optimale løsning.

Færdig.

Lad os se hvad der sker :slight_smile: