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.

Pubblicato da

Ingegnere. Si divide tra lavoro, bicicletta, monociclo e volontariato. Vive in una casa con un ciliegio insieme ad una moglie, tre bimbe e otto pesciolini che non lo aiutano a tenere in ordine.

16 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

  3. ciao io ho scaricato il file dash video e audio e i relativi file m4s ma non riesco a convertirlo in un file riproducibile , come posso fare ?
    vf_m0007w4l_27545c1f-572d-43d4-9bb6-935312876426-audio=96000.dash
    vf_m0007w4l_27545c1f-572d-43d4-9bb6-935312876426-audio=96000-1.m4s



    vf_m0007w4l_27545c1f-572d-43d4-9bb6-935312876426-video=5070000.dash
    vf_m0007w4l_27545c1f-572d-43d4-9bb6-935312876426-video=5070000-1.m4s



    ti ringazio anticipatamente

  4. Grazie Emanuele. Mi hai tolto quegli ultimi dubbi che avevo su come procedere.

    Cerco di dare qualche hint in più:
    – il file .dash, se presente, è il cosiddetto “initialization file”, quello che tu hai inidicato con init.mp4. Probabilmente alcuni stream usano .dash al posto di .mp4. Qui dicono init.mp4 –> https://riptutorial.com/video/example/20670/understanding-dash-adaptive-streaming-presentations
    – il file .mpd è invece un file xml che contiene molte informazioni sullo stream, compreso il bitrate (o i bitrate, nel caso l’adattativo sia supportato) e il pattern del nome dei files segmento, nel tag
    – per trovare l’inidirizzo dei vari files io ho usato l’estensione di Firefox “Bulk Media Downloader” che elenca i files che il player scarica quando di fa partire il player. Poi, trascinando il cursore del player alla fine, si può capire anche quanti sono i segmenti in totale.
    – una volta noto il pattern del nome dei files m4s ed il loro numero, ho usato l’estensione “Simple Mass Downloader” per fare il download di massa.

    Ciao

  5. Ciao e complimenti per il tutorial.
    Una domanda: inviDownloader non mi ha scaricato il file init.mp4 e neanch’io lo trovo se banalmente lo cerco con lo strumento Ispeziona del browser. Non lo trovo neppure se utilizzo l’estensione “Bulk media downloader” suggerita da Raf. Come posso fare?
    Grazie in anticipo

    • Ciao Filippo, il file potrebbe non chiamarsi init, ma certamente dovrà esistere un file, il primo, che espliciti la lista dei trunk da scaricare.
      Ciao,
      Emanuele

  6. Come fanno alcuni siti a scovare il link del video completo .mp4 credo sia possibile. Tu stesso hai messo tra virgolette la parola “nascondere”.
    Come viene nascosto?

    • Ciao h1tman2, semplicemente tale formato dev’essere già disponibile tra quelli offerti dal sito web. Se lo è, verrà presentato come predefinito per determinati disposisitivi. Non tutti i siti si preoccupano di preparare versioni multiple dello stesso video.
      Ciao,
      Emanuele

  7. Come fanno alcuni siti a prelevare il file esatto da scaricare.

    Noi in questo interessante tutorial andiamo ad unire i segmenti del video.
    Ma questi segmenti derivano da un file unico mp4 scaricabile dai vari server video delle varie piattaforme vedi Mediaset o RaiPlay.
    Queste piattaforme nascondono tale link per varie ragioni, una delle quali è che salvando il video si eviterebbero le pubblicità.
    Poi usano dei nomi file con numeri e avvolte lettere per impedire di ricavarlo in modo logico.
    Quindi la mia domanda originaria era: come mai alcuni siti riescono a ricavare tale link, pur essendo celato?

    • Mi fai un esempio di:
      1. sito dal quale si riesce a trovare il file intero
      2. strumento internet che permette di trovare il file mp4 intero per il sito che mi indicherai.

      Ciao,
      Emanuele

        • Ciao h1tman2, molto interessante, non conoscevo quel sito. Personalmente immagino vada a cambiare user agent per visitare il sito dal quale recuperare i contenuti facendo credere di non essere in grado di visualizzare contenuti video in HTML5. In quel modo, il sito, per ragioni di retro-compatibilità con dispositivi più vecchi, offre “gentilmente” una versione .mp4 (che è quella che Pasty.info poi indica a te). Conosci i suoi creatori? Sai se è un progetto opensource? Mi piacerebbe scoprire se non stiano usando qualche altro accorgimento particolare. L’url che viene offerto per il download del contenuto di RaiPlay non può essere ricavato dal codice della pagina né dalle info sul pacchetto m4s offerto con un browser tradizionale (per intenderci, l’ID cambia).
          Ciao,
          Emanuele

  8. occhio che copy /b * elabora i file in ordine alfabetico 1 10 11… 100 2 20 21…
    se i file stanno su vimeo suggerisco l’estensione Vimeo Video Downloader che semplifica un bel po’ la vita

  9. ciao hai ragione e come faccio un copy in ordine di numero e non alfabetico?

    grazie della risposta

  10. Ciao, io ho scaricato gli m4s, riesco a metterli in ordine alfabeti, ma ffmpeg mi dice che serve il famoso init.mp4.
    Lo cerco come .mp4, come .bash, ma nulla.
    Avete qualche altra idea?
    grazie,
    ciao

Rispondi a Raf Annulla risposta

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.