Pliki wideo skompresowane H.264/MPEG-4 AVC - cięcie bez ponownej rekompresji
27.01.2013 19:57
Historia ta wydarzyła się wiele cykli temu, w czasach kiedy nastała nowa era, era cyfrowego filmu w wysokiej (jak na ówczesne czasy) rozdzielczości full HD - czyli 1920x1080 pikseli. Nastał w tym okresie zmierzch telewizji analogowej i tak zwanego "przechwytywania" obrazu, za pomocą karty telewizyjnej / wideo. Aktualnie rozdzielczość Full HD jest dostępna w smartfonach z niższej półki i nikogo to już nie dziwi, zwłaszcza użytkowników telewizorów z matrycami 4k - które powoli ustępują nowszym konstrukcjom. Przenieśmy się zatem w czasie, kiedy to rozpoczynała się przygoda z cyfrowym materiałem wideo.
Pewnego dnia okazało się, że w naziemnej telewizji cyfrowej (wtedy nazywanej DVB‑T, aktualnie już nie stosowanej przynajmniej od kilkunastu lat) - nadają ciekawy program (co zdarzało się dość rzadko). Postanowiłem nagrać go sobie przy użyciu cyfrowego tunera, podłączanego do gniazda USB. Testowałem wówczas ciekawy program do oglądania telewizji cyfrowej, mianowicie "SmartDVB"
Co prawda była to wczesna wersja aplikacji, ale bardzo mi się spodobała. Na początku miałem pewien problem z uruchomieniem, ale wystarczyło ręcznie zdefiniować częstotliwości w pliku xxx.ini i wszystko ruszyło.
H.264 - pierwsze starcie
Tak wiec miałem działający program do obsługi tunerka i mogłem rozpocząć nagrywanie. Po zarejestrowaniu materiału, postanowiłem powycinać niektóre fragmenty. Było to moje pierwsze podejście do operacji na plikach zakodowanych kodekiem h.264/AVC. Nauczony łatwym wycinaniem plików avi w aplikacji VirtualDub, przeciągnąłem materiał na ikonę aplikacji. Niestety nic z tego nie wyszło, ponieważ format nie został rozpoznany. Hmmm pomyślałem, no tak - przecież to nie avi, tylko TS (transport stream). Poszukałem więc trochę w sieci (w tamtych czasach istniała taka wyszukiwarka jak google) i znalazłem wtyczkę do VirtualDub-a, która umożliwiała załadowanie praktycznie każdego pliku wideo. Nazywała się: "DShowInputDriver.vdplugin". Teraz wszystko poszło gładko. Ale moja radość nie trwała długo, ponieważ działało to dość wolno i nie dało się kopiować strumienia danych (direct stream copy). Czyli aby po wycięciu niechcianych fragmentów, zapisać materiał należało wykonać rekompresję. Nie wchodziło to w grę z powodu strat na jakości oraz długiego czasu trwania takiej operacji (teraz w dobie układów APU 18 i 19 generacji, to się chce śmiać). Postanowiłem poszukać lepszego rozwiązania.
Cięcie plików HD bez rekompresji
Przewertowałem wiele zakamarków internetu i nic nie znalazłem. Naczytałem się różnych opinii, że ze względu na dużą złożoność takiego pliku, jest bardzo ciężko zrobić program, który byłby w stanie bez problemu wycinać fragmenty i łączyć bez rekompresji. Nie dawałem za wygraną i w końcu dopiąłem swego. Znalazłem bardzo ciekawą aplikację o nazwie: "TSSNIPER"
Potrafi ona wyciąć niechciane fragmenty i przekopiować resztę materiału bez ponownej kompresji. Aby dokonać tego "cudu", należy przygotować odpowiednio program: 1. Należy mieć zainstalowany Haali Media Splitter (np. wraz z pakietem K‑Lite Codec Pack) 2. Należy mieć zainstalowany kodek DiviX (wersja dekodująca h.264) 3. Wchodzimy do ustawień TSSniper-a (menu->Extras->Settings) 4. Przechodzimy na zakładkę General, a następnie na DirectShow i ustawiamy tak jak poniżej oraz zatwierdzamy OK:
5. Tworzymy nowy projekt File->New project 6. Dodajemy materiał wideo w formacie TS (właściwie w kontenerze) przez File->Add new file...
Jeżeli wszystko zrobiliśmy dobrze, to po lewej stronie pokaże nam się informacja o załadowanym materiale. Następnie Ustawiamy kursor w miejscu, gdzie chcemy rozpocząć wycinanie i klikamy na ] , a tam gdzie kończyć się ma [ . Następnie wciskamy klawisz F9 i tym sposobem niechciane fragmenty zostają wpisane na listę do wycięcia "Cuts":
Aby zwiększyć precyzję ustawienia kursora, można posłużyć się strzałkami umieszczonymi na początku oraz na końcu linii czasu. Gdy już mamy zaznaczone fragmenty do wycięcia, klikamy na "Export transport stream (TS)". Operacja wycinania trwa od kilkunastu do kilkudziesięciu SEKUND! (w zależności od objętości pliku i szybkości dysku).
Wybranie takiego splitera i dekodera daje najlepszą precyzję przy ustawianiu kursora. Metodą prób i błędów, udało mi się ustalić te, które dają dokładność do kilku klatek obrazu.
Powyższym programem, można wycinać wszystkie pliki TS czy MTS, również z kamer cyfrowych AVCHD.
Uwagi oraz mała rada
Jak zwykle, nie ma róży bez kolców. Tym razem chodzi o dźwięk. TSSniper ma problem z odtwarzaniem niektórych ścieżek dźwiękowych, szczególnie E‑AC3 (taki jest nadawany w polskim DVB‑T) i źle rozpoznaje bitrate. Oczywiście nie ma to wpływu na obrabiany materiał, ale może troszkę przeszkadzać podczas zabawy w wycinanie. Możemy przykładowo zechcieć odtworzyć fragment. W takim układzie zalecam podczas nagrywania strumienia - zaznaczyć nagrywanie wszystkich strumieni audio. Gdy załadujemy taki plik do naszej aplikacji, możemy w razie problemów przełączyć się na inny strumień audio i normalnie pracować. Polska cyfrówka nadaje równocześnie audio mpeg2, więc nie będzie problemu. Kolejna rada jest związana z używanymi dekoderami audio i wideo. Okazuje się bowiem, że "ffdshow" mam problemy np. E‑AC3. Dlatego jeżeli coś nam nie działa. to zalecam używanie dekoderów LAV (jest w pakiecie K‑Lite Codec Pack)
Baza Księżycowa M21, rok 2052. :‑)