Beste manier om een map met meerdere audioformaten te beheren

Ok, ik heb een map vol mkv’s die ik allemaal wil verwerken. Ik probeer uit te vinden hoe ik het audio-gedeelte goed aan moet pakken.

Mijn bestanden zijn een mix van stereo en surround, er zit zelfs mono bij. Mijn doel is om een taak te maken die alles tot en met 2 kanalen met één set audio-instellingen behandelt, en voor alles daarboven een andere set gebruikt. Die functionaliteit zit al in MCEBuddy voor AC3, maar alleen voor AC3—DTS e.d. worden genegeerd.

Ik dacht aan formats zoals AAC gewoon door te geven, want dat is hoogstwaarschijnlijk de 2-kanaalsbron, maar ik heb ook 2-kanaals E-AC3, AC3, FLAC, enz. Dus raden op basis van encoder werkt dus niet. 6-kanaalsaudio doorgeven is prima als de bron AC3 of E-AC3 is, maar DTS wil ik niet doorgeven; het doel is het bestand kleiner maken en DTS is daarvoor te zwaar.

Ik herinner me een thread waarin iemand een CLI-commando had dat audio doorgeeft op basis van de bitrate: lager dan ±200 kb/s = waarschijnlijk ≤2 kanalen, hoger = waarschijnlijk 6. Ik heb die thread niet gebookmarkt en vind ‘m nergens meer.

Dus: wie helpt met ideeën? Hoe zouden jullie zo’n map aanpakken?

Hier is een alternatief idee met behulp van profielen. MCEBuddy-profielen hebben een functie genaamd niet-ondersteunde combinaties. Voor een profielencoder kun je in principe niet-ondersteunde combinaties van video-, audio- en containerparameters opgeven. Als het zo’n combinatie tegenkomt, wordt die encoder overgeslagen en gaat het naar de volgende. Meer details hier:

Met deze parameter kun je dit op twee verschillende manieren aanpakken:

  1. Gebruik de eerste encoder om bepaalde combinaties niet te verwerken (bijv. handbrake verwerkt geen DTS-streams en kopieert de audiotracks) en laat een andere de rest afhandelen (ffmpeg encodeert alle audiotracks naar ac3). Een voorbeeld hiervan ziet er zo uit (alleen het relevante deel van het profiel, de rest vul je zelf aan):

    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. De tweede aanpak maakt gebruik van profielen met conversietaken: je maakt 2 profielen, specificeert slechts één encoder in elk profiel en voor het ene profiel geef je dts op als niet-ondersteund en voor het andere aac,ac3. Maak twee conversietaken, elk met één van de twee profielen. Nu zal alleen de taak met het profiel dat de audiocodec niet ondersteunt mislukken en de andere zal uitgevoerd worden.

De “fall through”-aanpak was het eerste waar ik naar keek, direct nadat ik mijn bericht had geplaatst. Het is interessant en best handig omdat je hiermee je instellingen per formaat kunt isoleren. Helaas is dat niet echt wat ik nodig heb.

Mijn probleem is dat dezelfde codec/formaat in meerdere smaken van kanalen voorkomt. Bij Atmos of DTS is het vrijwel zeker dat het geluid niet 2.0 zal zijn, maar bij EAC3, AC3 of zelfs AAC of Flac kan het zowel 2.0 als 5.1 zijn. Dus ik kan door de profielvolgorde gaan totdat ik er een voor bijvoorbeeld AAC tegenkom, maar dan heb ik geen manier om te vertellen of het AAC 2.0 of 5.1 is, enz. In wezen is het isoleren van een codec niet wat ik nodig heb. Ik moet uitzoeken of de stream 2.0 of surround is, en MCEBuddy de instellingen automatisch laten aanpassen.

MCEBuddy heeft een ingebouwd mechanisme om het 2.0 versus 5.1-probleem op te lossen, maar het werkt alleen met AC3. Bijvoorbeeld, ik heb hetzelfde profiel dat jij hierboven plaatste genomen en de ffmpeg-audio naar 192 gezet, omdat dat beter geschikt is dan 384 voor stereogeluid.

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

Als ik deze instellingen gebruik en er een EAC3 5.1-bestand instop, produceert het een bestand met 192k-audio. Als het uitvoerformaat op AAC was ingesteld, zou het 256k-audio produceren, enz.

Hetzelfde geldt voor AAC 2.0 versus 5.1, enz. AC3 werkt zoals verwacht, omdat de logica daarvoor al ingebouwd is en het zal een 192 2.0 of 384 5.1 produceren. Met alles behalve AC3 wordt de ffmpeg-audioac3-regel/opdracht volledig genegeerd en heeft het geen effect op de conversie; alleen de ffmpeg-audio-regel wordt door MCEBuddy gebruikt. Als je het vakje voor surroundgeluid in de GUI hebt aangevinkt, zal MCEBuddy een -6ch-vlag aan de ffmpeg-audio-regel doorgeven en die als je surroundinstellingen behandelen.

In mijn voorbeeld gebruikte ik 192k voor de 2.0-uitvoer en 384 voor de 5.1-uitvoer. Aangezien AAC geen AC3 is, zal MCEBuddy de regel ffmpeg-audioac3=-acodec ac3 -ab 384k negeren en de instellingen van ffmpeg-audio=-acodec ac3 -ab 192k gebruiken. Als ik in de GUI heb aangevinkt dat ik surround wil, zal het de -6ch-vlag doorgeven en eindig ik met iets als ffmpeg-audio=-acodec ac3 -ab 192k -6ch. Als mijn uitvoer ook AAC is, schakelt een soort interne failsafe in zodra de conversie begint, die geen 5.1-mix op 192k toestaat. Het verhoogt automatisch de bitrate naar 256 (het minimum voor AAC 5.1). Dus uiteindelijk krijg ik een 256k 5.1-bestand. Ik weet niet zeker of het hetzelfde doet voor andere formaten.

Idealiter zou het geweldig zijn als de ffmpeg-audioac3 als catch-all-instelling voor alle surround zou werken, niet alleen AC3, terwijl ffmpeg-audio dan alle 2.0-mix zou afhandelen. Maar die functie is er gewoon niet. Een workaround vinden is tot nu toe een uitdaging gebleken.

je kunt altijd een feature request indienen om tags als <encoder>-audiodts of soortgelijke tags voor niet-ac3-audio te ondersteunen.

Als -audiodts volgens hetzelfde principe zou werken als -audioac3, zou het moeten werken, maar dan heb ik er voor elke formaat één nodig – -audioflac, -audioaac enz., enz., enz.

Ik denk dat een eenvoudigere oplossing iets is als
ffmpeg-audio <=2ch – 192kb-instellingen
ffmpeg-audio >2ch – 448kb-instellingen

Met andere woorden: de controle zou moeten gebeuren op basis van het aantal audiokanalen, niet de codec. Dan is het volledig onbelangrijk welke input-codec wordt gebruikt. Stop er FLAC of AAC met 2 kanalen in, en het levert 192k. Geef het hetzelfde FLAC- of AAC-bestand met meer dan 2 kanalen, en het levert 448kb enz.

Op dit moment is mijn standaard output-codec EAC3 op 448. Dat werkt prima voor 6 kanalen, maar aangezien MCEBuddy niet uitmaakt of de input 2 of 6 kanalen heeft, houd ik 448k-stereo-audio over op bestanden die alleen 2.0 hebben. 448 voor stereo is verspilling, en dat wil ik vermijden.

Ik besef ook dat deze functie buiten de scope van dit programma valt. Het is bedoeld om commercials te verwijderen en bestanden van een DVR te verkleinen. Voor zover ik weet neemt geen enkele DVR op in eac3, flac of aac enz., dus ik zou de dev vragen iets te coderen/toe te voegen dat niets met de hoofdfunctie van het programma te maken heeft. Ik voel me daar slecht bij en zou graag mijn eigen workaround vinden.

1 like

Voel je niet slecht, maak een functieverzoek aan en leg de behoefte en suggesties uit en start een discussie zodat we de optimale manier vooruit kunnen implementeren.

Klaar.

Laten we zien wat er gebeurt :slight_smile: