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.

2 comments » Write a comment

  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

Lascia un commento

Required fields are marked *.