Come salvare video da segmenti m4s MPEG-DASH.

Recentemente avevo voglia di conservare un video presente online in streaming in formato m4s. A differenza dei metodi di pubblicazione fin ora incontrati, questo non prevedeva la presenza di un file contenitore o playlist che teoricamente aiuta ad occultare nel codice la sorgente del file mp4/mkv. [1]

Il formato MPEG-DASH prevede la presenza di chunk – pezzettini di file – che verranno uniti successivamente dal player integrato nel browser. In questo modo non è presente alcun link diretto al file e l’unico riferimento è il percorso (la cartella) in cui il player troverà i vari chunk. Questa tecnica, oltre a “nascondere” il video permette lo streaming adattivo: man mano che il video avanza il player può decidere, in base al buffer ancora a disposizione, se richiedere il prossimo chunk in alta o bassa qualità.

La tecnica, se allargata anche all’audio separa i due flussi e permette, ad esempio, di mantenere l’audio in alta qualità ed abbassare il bitrate del solo video. Ovviamente mi trovavo di fronte a quest’ultimo scenario.

Come procedere per unire i file m4s in un unico video? Per risolvere comodamente avrete bisogno di un download manager e di ffmpeg, il coltellino svizzero della gestione video.

  1. Per prima cosa è necessario scaricare tutti i chunk del video [2]. Io ho utilizzato InviDownloader, attraverso cui si può indicare il nome dei segmenti e il numero di elementi da scaricare (spesso le cartelle hanno il listing disabilitato e non è possibile effettuare un banale browse). Se lo streaming audio è separato, dovremo scaricare tutti i suoi segmenti.
  2. InviDownloader

  3. Successivamente è necessario unire tutti i segmenti in un unico file contenitore mp4. Per far questo, dal prompt dei comandi di Windows basta digitare:
    copy /b init.mp4 +segment_*.m4s video-output.mp4
  4. Prompt CMD Copy

  5. Lo stesso faremo con i segmenti dell’audio. Ci spostiamo nella cartella dove abbiamo salvato i chunk audio e digitiamo:
    copy /b init.mp4 +segment_*.m4s audio-output.mp4
  6. A questo punto abbiamo due file: video-output.mp4 e audio-output.mp4. Per unirli ci viene incontro ffmpeg. Raggruppiamo ffmpeg.exe, video-output.mp4 e audio-output.mp4 in un’unica cartella e da linea di comando eseguiamo:
    ffmpeg.exe -i video-output.mp4 -i audio-output.mp4 -c copy output.mkv

Il nostro file output.mkv è un file video leggibile sia da browser che da VLC. Volendo potremo decidere, successivamente, di convertirlo in mp4, avi e così via…

Emanuele

[1] inefficaci tecniche di security-through-obscurity che non servono a nulla se non a far guadagnare qualche euro in più alle web-agency.

[2] ricordo che MPEG-DASH prevede la prenza di un file init e di tanti segmenti. Il primo, tra le varie informazioni contiene in formato binario la segment-list che il player andrà a processare.

3 commenti » Scrivi un commento

  1. Ciao Emanuele,
    capisco che ho da imparare ancora per usare InviDownloader, ma puoi aiutarmi egualmente?
    Da sourceforge si scarica il file InviDownloader.dproj.download di 1.8KB, e poi?
    grazie
    Lorenzo

    • Ciao Lorenzo, credo tu abbia scaricato solo un piccolo file del progetto. In realtà se vai nella sezione “tutti i download” dovresti trovare anche un file .zip ben più grosso che contiene anche l’eseguibile (l’interfaccia è mostrata in questo post).
      Poi segui il resto della guida…
      Ciao,
      Emanuele

  2. Ciao, molto interessante.
    Vorrei scaricare i video di una piattaforma di formazione in web-marketing ma non riesco a scaricare i singoli segmenti, questo perchè probabilmente si tratta di una piattaforma con verifica credenziali di accesso.
    Hai qualche workaround da suggerirmi?

    Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.