Incrementare volume di un video

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Incrementare volume di un video

Messaggio da joe »

Ciao a tutti!

Ho un video che ha il volume stranamente basso... Anche impostando il volume del player mpv al 100% e il volume di sistema (slack-14.2 con pulseaudio e kde di default) al massimo, il volume del video in questione è appena accettabile. Probabilmente chi ha creato quel video ha in qualche modo ottenuto un volume troppo basso.

Mi chiedevo se ci fosse il modo per alzarlo utilizzando ad esempio "ffmepg" che per questi scopi trovo molto pratico, per quel poco che mi è servito.

Qualche dettaglio in più sul video/audio con cui ho a che fare:
- Anzitutto i flussi audio video e sottotitoli sono contenuti in un contenitore "mkv" diciamo "audiovideosub.mkv".
- Ecco cosa riporta ffmpeg dandogli in pasto il nostro audiovideosub.mkv:

Codice: Seleziona tutto

    Stream #0:0: Video: h264 (High), yuv420p, 1916x820, SAR 1:1 DAR 479:205, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)  
    Stream #0:1(ita): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
    Stream #0:2(eng): Audio: aac (LC), 48000 Hz, stereo, fltp
    Stream #0:3(ita): Subtitle: subrip
    Stream #0:4(eng): Subtitle: subrip
Lo scopo sarebbe quello di ottenere lo stesso file audiovideosub, ma con il flusso audio "0:1" cioè la traccia in italiano a volume amplificato.

Vi spiego come ho fatto io andando abbastanza a sentimento:
1. ho estratto la traccia audio

Codice: Seleziona tutto

ffmpeg -i orig.mkv -vn -map 0:1 -acodec copy audio-ita.ac3
Ok, probabilmente l'opzione -vn (lascia perdere la traccia video) non serviva, in quanto ho specificato quale flusso considerare con l'opzione -map. Ho un po' scopiazzato, però alla fine penso che l'estrazione della traccia audio desiderata sia riuscita.

2. ho amplificato la traccia audio

Codice: Seleziona tutto

ffmpeg -i audio-ita.ac3 -vol 1280 audio-ita-gain.ac3
Anche qui ho scopiazzato da una guida trovata al volo, non so se sia il metodo più corretto, comunque la traccia audio che ne esce è effettivamente amplificata e il volume mi pare molto meglio di prima, infatti ho dovuto subito abbassarlo un po' mentre lo testavo con mpv.

3. ora l'idea sarebbe quella di mettere la traccia amplificata al posto del corrispondente flusso originale, lasciando il resto inalterato.
Ho provato così, ma non funziona come mi aspettavo (lo immaginavo dopotutto):

Codice: Seleziona tutto

ffmpeg -i audiovideosub.mkv -i audio-ita-gain.ac3 -vcodec copy new.mkv
Il che ha prodotto il seguente video:

Codice: Seleziona tutto

Stream #0:0: Video: h264 (High), yuv420p, 1916x820, SAR 1:1 DAR 479:205, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(ita): Audio: vorbis, 48000 Hz, 5.1, fltp (default)
Stream #0:2(ita): Subtitle: ass
In pratica la traccia in inglese e i sub in inglese sono svaniti.
Tutto sommato però alla fine il risultato ottenuto è valido, nel senso che ho il video di prima con la traccia audio italiana amplificata.

Tuttavia mi piacerebbe domandarvi come si poteva fare meglio, cioè in modo più diretto e possibilmente veloce. Veloce nel senso che sia durante l'estrazione dell'audio dal file originale che l'unione della traccia amplificata al video originale ha impiegato un po' di tempo. Visto che non ho ricodificato nulla (o almeno così penserei da ignorante) pensavo che fossero operazioni molto più rapide. Invece il comando per amplificare la traccia audio ci sta che impieghi un certo tempo...

Avete qualche dritta per fare la cosa fatta bene e in modo più spedito?

Grazie in anticipo! :)

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 3022
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 6.6.16
Desktop: lxde
Località: Pisa
Contatta:

Re: Incrementare volume di un video

Messaggio da ponce »

il modo piu' semplice e' usare mkvtoolnix-gui, che da un'interfaccia in qt5 ti permette di muxare i vari flussi nel container matroska (togliendone alcuni e mettendone altri, ad esempio, ma ha anche diverse altre funzioni), con l'mkv originale e il file con l'audio a posto.
la stessa funzione di mkvtoolnix-gui la fa anche mkvmerge da linea di comando (sempre parte della suite mkvtoolnix) ma ti devi studiare bene la sintassi.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Incrementare volume di un video

Messaggio da joe »

Ho provato mvktoolnix-gui, Sembra semplice come hai descritto e veloce nel muxaggio.
Ho aggiunto la mia traccia audio amplificata lasciando anche quella originale dal volume troppo basso.
Il video finale dopo il mux però ha un problemino non da poco:
la traccia amplificata risulta in anticipo rispetto al video.
Da mpv posso cambiare traccia audio al volo e noto che la sola fuori sincronia è la mia, le atre due, quella in ita a volume basso e in inglese risultano invece come prima ovvero sincronizzate.

Il risultato che ho ottenuto muxando la traccia audio amplificata direttamente al video originale, come ho mostrato nel mio post precedente, porta invece ad un audio sincronizzato col video, però con gli altri problemini che avevo riportato (ovvero spariscono le tracce in inglese e i sub in inglese).

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Incrementare volume di un video

Messaggio da joe »

Ok, direi che sono riuscito a saltarci fuori alla fine.
Ho usato tre comandi: mkvmerge, mkvextract, ffmpeg.

1.
controllo di cosa bolle in pentola, come è fatto l'mkv in questione:

Codice: Seleziona tutto

mkvmerge -i orig.mkv
File 'orig.mkv': contenitore: Matroska
ID traccia 0: video (MPEG-4p10/AVC/h.264)
ID traccia 1: audio (AC-3/E-AC-3)
ID traccia 2: audio (AAC)
ID traccia 3: subtitles (SubRip/SRT)
ID traccia 4: subtitles (SubRip/SRT)
Capitoli: 9 elementi
2.
Estraggo la seconda traccia che è l'audio italiano a basso volume

Codice: Seleziona tutto

mkvextract tracks orig.mkv 1:audio-orig.ac3
3.
La amplifico ottenendo un nuovo file audio

Codice: Seleziona tutto

ffmpeg -i audio-ita.ac3 -vol 1280 -b:a 640k audio-gain.ac3
Ho imposto il bitrate che rilevavo dalla traccia audio a basso volume sperando che la sincronia fosse mantenuta, invece dopo il mux finale mi sono accorto che l'audio amplificato continuava ad essere in anticipo rispetto al video, quindi non era un problema dovuto al bitrate che usciva diverso...
Ricontrollando l'audio originale e quello amplificato, sembrerebbe che siano perfettamente sincronizzati. Quindi sospetto che lo sfasamento che osservo nel file finale sia dovuto in qualche modo alla successiva fase di mux.
Se qualcuno ha idea del perchè questo accada... Sono tutt'orecchi! :)

4.
Infine creo un nuovo mkv prendendo tutte le traccie del'originale tranne la seconda (che ha ID:1 perche mkvmerge parte da 0 a numerarle). E prendendo la traccia zero, l'unica in pratica dal file AC3 amplificato. Ordino poi le tracce in modo che l'audio italiano amplificato sia la seconda traccia, in pratica lo metto al posto di quello a basso volume...

Codice: Seleziona tutto

mkvmerge -o muxed.mkv -a \!1 orig.mkv -y 0:1000 audio-gain.ac3 --track-order 0:0,1:0,0:2,0:3,0:4

Note:

- le opzioni di mkvmerge relative alle singole tracce o ai singoli file vanno inserite "prima" del nome del file in input, ad esempio "-a \!1 orig.mkv" vuol dire semplicemente, copia tutte le tracce dal file orig.mkv tranne la seconda (quella con ID=1 per la precisione).

- l'opzione -y "0:1000" vuol dire: inserisci un silenzio iniziale di 1000 ms cioè di un secondo alla traccia con ID=0 del file in input che segue cioè audio-gain.mp3 che contiene l'audio amplificato.
Si è resa necessaria perchè come ho detto prima in qualche modo la traccia audio amplificata saltava fuori sfasata di 1 secondo in anticipo rispetto al video.
Non ho capito bene perchè, cioè dove stia l'inghippo, ma quel secondo di silenzio aggiunto all'inizio corregge la situazione. Anche se non è molto pratico perchè richiede qualche visione del file e qualche conto a spanne...

- l'ultima opzione "--trackorder" può essere messa ovunque perchè si riferisce al file di output. Dice come posizionare le tracce nel file in uscita: esempio 0:0,0:1 significa metti per prima la traccia con ID 0 del file 0 (il primo file di input che ho inserito nella riga di comando cioè orig.mkv), poi inserisci la traccia 0 del file 1 (cioè il secondo che trovi nel comando ovvero audio-gain.ac3).


Direi che è davvero tutto. Se aveste altri metodi da condividere tanto meglio, dite pure!
Per la cronaca il video di test era: Reservoir Dogs - Le Iene (1992).
Ne ho trovato un paio di versioni in giro ma entrambe avevano questo problemino di volume basso.

Speriamo almeno che la visione ripaghi tutta sta fatica! :D

Rispondi