Navázání grabování streamu uloženého do .mp4

konnert

Navázání grabování streamu uloženého do .mp4
« kdy: 17. 02. 2018, 01:00:45 »
Ahoj, mám takový problém s tím, že se mi přerušilo stahování videa, které jsem ukládal do mp4. Problém je, že došlo k odpojení flešky a tedy jednak soubor nejde přehrát, protože .mp4 soubor chybí hlavička "moov atom" a za druhé nevím přesně jak pokračovat ve navázání downloadu, i kdyby soubor šel přehrát. (Teď nepotřebuji radit, že příště by bylo lepší ukládat do mkv, ts <nebo do mp4 s moov na začátku přes nějaký flag ffmpeg> nebo přes youtube-dl, což by asi jen řešilo první problém, že stahovaná data budou přehratelná  aniž jsou stažená celá.)

Tedy ještě jednou popis: bylo stahováno  (ne–živě) video zadané url k m3u8 playlistu, který již obsahuje jednotlivé .ts segmenty videa přes ffmpeg:
Kód: [Vybrat]
ffmpeg -i "http://o2tv.cz/atip/...1505.m3u8" -bsf:a aac_adtstoasc -c copy out.mp4. nějakou dobu po přerušení jsem zjistil, že se v cmdline ukázalo (stahoval jsem 4 videa najednou)
Kód: [Vybrat]
2x av_interleaved_frame() No such Directory
2x av_interleaved_frame() Invalid argument
+ u každého Conversion failed!
Štve mě, že ze 4 souborů blo staženo z každého tak 60-80%.

Zajímá mě tedy:
1. jak rekonstruovat již staženou část mp4 souboru, protože nejde přehrát, ffmpeg hlásí typicky no moov atom found, gui přehrávače, že soubor nelze přehrát.
Jakými způsoby je možný dodat ten moov atom do mp4 souboru
2.1 jestli ho jde vzít z jiného souboru (protože videa mají ident.parametry)
2.2 jestli stačí, když znovu stáhnu část toho streamu (přes parametr -t 4 pro 4 sekundy),  které bude finalizované,
2.3 jestli to jde generovat, když zadám nějaká obecné údaje videu (fps, kodek atd délku ), co by šlo i opsat z jiného souboru.
2.4 jestli ten moov atom vzniká nějak složitě, jako nějaká kumulativní funkce průběhu videa a je pro každý soubor (něčím) unikátní.
3. Jak navázat samotné stahování od chybějícího místa , + a uložit to aspoň jako další videosoubor nebo v lepším a pak to třeba spojit (bezztrátově samozřejmě), a v lepší případě zapisovat-pokračovat rovnou do toho původního souboru (tedy jestli s opravenou hlavičkou nebo bez opravy). Teoreticky by to jít mělo –  výstup do mp4 by měl být deterministický a mělo by to jít  určit "hrubou silou" porovnáním od nějakého úseku, co si stáhnu "navíc" , ale je otázka ,jestli se ffmpeg nedržel v paměti nějaká data právě pro zápis sté hlavičky na konec. Nebo lépe – pomocí čtení nějakých synchronizačních úseků ve streamu (pokud jsou ale přítomné  v ne-feinalizovaném mp4)
« Poslední změna: 18. 02. 2018, 17:48:13 od Petr Krčmář »


adsfasdfasdfasdf

asi bych zacal studiem ffmpeg.
pokud jsem to pochopil, tak se da pracovat na urovni moov atomu, tak snad se daji nejak extrahovat, snad i spojit pujdou.

https://stackoverflow.com/questions/8061798/post-processing-in-ffmpeg-to-move-moov-atom-in-mp4-files-qt-faststart/8066089#8066089

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Neni jednodussi stahnouut si m3u8 a pak udelat wget  -i m3u8 a nasledne si to poskladat cat $(ls -tcr *) > file.ext ?