in Daj Się Poznać 2017, Lifehacki

Jak pobrać film z serwisu VOD TVP

Potrzebowałem pobrać w celach archiwizacyjnych jedno nagranie z serwisu vod.tvp.pl. Niestety nie było to takie oczywiste, jak zainstalowanie wtyczki czy użycie dedykowanego serwisu. Nie chciałem też rejestrować obrazu z własnego monitora ze względu na wątpliwą jakość nagrania. Do swojego celu użyłem ostatecznie wget i ffmpeg.

Odtwarzacz TVP wysyła do nas stream w małych paczkach po kilka sekund, dzięki czemu serwer może łatwo przestać nadawać dane, kiedy zatrzymamy odtwarzanie albo zmienić jakość w locie. Adres pliku, który do przeglądarki jest wysyłany można podejrzeć za pomocą konsoli deweloperskiej w Chrome. Pliki numerowane są w suffiksie za pomocą kolejnych liczb naturalnych, więc bardzo łatwo jest przeiterować po nich wgetem. Za przykład weźmy odcinek Magazynu kulturalnego.

Identyfikacja

Wciskamy F12, przechodzimy do odpowiedniego diva klasy movieWrapper i ramki w widoku html:

<iframe src="/sess/tvplayer.php?object_id=29126895&amp;autoplay=true"></iframe>

Przechodzimy na stronę http://vod.tvp.pl/sess/tvplayer.php?object_id=29126895 gdzie będzie nam wygodniej śledzić otrzymane pakiety. W konsoli zaglądamy do zakładki Network i widzimy przychodzące do nas fragmenty streamu w formacie .ts (transport stream).

Warto zwrócić tutaj uwagę na parametry streamu, które widać w nazwie pliku. Nie udało mi się znaleźć innej jakości dźwięku, ale jeśli chodzi o obraz, to w zależności od tego parametru mamy do wyboru różne rozdzielczości. Dla programu, który mnie interesował były to:

  • 2861000 – 3.1 Mbps – 540p
  • 5454000 – 5.9 Mbps – 720p
  • 9239000  – 9.9 Mbps – 1080p

W przypadku Magazynu widzimy, że dla 540p parametr ten to 2877000 – 3.2 Mbps, dlatego nie zawsze musi to być identyczne jak na powyższej liście.

Żeby sprawdzić, jaki parametr przypisany jest do najwyższej możliwej jakości (1080p), gdy nie mamy ekranu ≥1080p można skorzystać z narzędzia do badania responsywności strony (ikona telefonu i tabletu). Zmieniając pozorną rozdzielczość strony (np. 4360 × 1600) odtwarzacz umożliwi oglądanie streamu w najwyższej możliwej rozdzielczości, a tym samym ujawni konkretny parametr pliku.

Tu widać zmianę rozdzielczości dla Teleekspresu

Teraz kopiujemy adres za pomocą prawego przycisku myszy i przechodzimy do wgeta. Ścieżka powinna wyglądać mniej więcej tak:

http://rsdt-waw201-66.tvp.pl/token/video/vod/29126895/20170312/1497915835/4fab9e34-44b7-4558-b4f1-a7d3cceec4fa/video.ism/video-audio=97000-video=2877000-41.ts

Pobieranie

Z wgeta korzystam przez Cygwina, ale jest chyba wersja działająca natywnie na Windowsie. Ma on taką wspaniałą opcję, że jeśli chcemy pobrać serię plików nazwanych tak regularnie, jak interesujace nas pliki z TVP, to za pomocą frazy {1..n}  możemy podać zakres liczb do iteracji. Komenda wygląda wówczas po prostu tak:

wget http://rsdt-waw201-66.tvp.pl/token/video/vod/29126895/20170312/1497915835/4fab9e34-44b7-4558-b4f1-a7d3cceec4fa/video.ism/video-audio=97000-video=2877000-{1..595}.ts

W trakcie pobierania może się zdarzyć, że połączenie zostanie zatrzymane. W moim przypadku wystarczyło odczekać chwilę lub skopiować adres jeszcze raz i zacząć od przerwanego pliku.

Przypadkiem odkryłem, że za pomocą opcji -O  wgeta można dopisywać zawartość pobranych plików do wybranego pliku. Format .ts jest wybitnie korzystnym wyborem do takiej próby. Komenda ma wówczas formę:

wget http://rsdt-waw201-66.tvp.pl/token/video/vod/29126895/20170312/1497915835/4fab9e34-44b7-4558-b4f1-a7d3cceec4fa/video.ism/video-audio=97000-video=2877000-{1..595}.ts -O OutputName.ts

Po kilku minutach plik powinien zostać pobrany i bez problemu gotowy do odtworzenia w VLC.

Konwersja

Proponuję od razu przekonwertować plik do bardziej przyjaznego formatu/kontenera np. za pomocą ffmpeg do mp4. Zakładając, że ffmpeg.exe znajduje się w tym samym katalogu i nie chcemy transkodować pliku (a jedynie zmienić kontener) wykonujemy poniższy jednolinijkowiec:

.\ffmpeg.exe -i .\OutputName.ts -codec copy .\OutputName.mp4