Download: CoverTranscode
Transkrypt
Download: CoverTranscode
Konwersja danych TEMAT MIESIĄCA Konwersja i przetwarzanie wideo z Transcode WYGODNE NARZĘDZIE Transcode to uniwersalne narzędzie do manipulacji plikami wideo w Linuksie. Jednak dzięki modularnej budowie, Transcode oferuje użytkownikom o wiele więcej niż prosta konwersja formatów. JÖRN REDER T ranscode jest pakietem służącym do konwersji formatów plików wideo. Można go również wykorzystywać do różnych manipulacji tymi plikami, np. do zmiany rozdzielczości. Jeśli jednak szukasz narzędzia oferującego wygodny interfejs GUI, to Transcode rozczaruje Cię. Transcode [1] to zestaw programów uruchamianych z wiersza poleceń, sterowanych przy pomocy licznych opcji. Podobnie jak w przypadku innych narzędzi znakowych, zaletą Transcode jest wielka elastyczność, natomiast wadą – niewielka przyjazność wobec użytkownika. Dla użytkowników preferujących graficzne GUI dostępnych jest kilka nakładek graficznych pozwalających na korzystanie z możliwości Transcode (Tabela 1). Jednak żaden z tych programów nie daje dostępu do wszystkich możliwości oferowanych przez Transcode. Budowa Transcode ma charakter modularny. Wszystkie ważniejsze operacje wykonywane są przez zewnętrzne moduły ładowane jedynie w razie potrzeby. Transcode posługuje się trzema rodzajami modułów, które odpowiadają trójetapowemu procesowi konwersji: ■ Odczyt/ dekodowanie ■ Modyfikacja/ filtrowanie ■ Zapis/ kodowanie Moduły obsługi wejścia (Tabela 2) wykonują zadanie dekodowania plików audio/ wideo i przekazują je do Transcode w postaci nieskompresowanego strumienia danych. Istnieją różne moduły obsługujące różne algorytmy kompresji audio i wideo, a także ściśle wyspecjalizowane, np. przechwytujące strumienie wideo np. z karty telewizyjnej. Kolejny krok polega na użyciu odpowiednich modułów filtrujących (Tabela 3), które będą przetwarzać surowe dane przekazywane przez moduły wejścia. Filtry nie tylko modyfikują obraz i dźwięk, ale również dodają lub usuwają klatki w celu zmiany synchronizacji ścieżek wideo i audio. W ostatnim kroku, Transcode przekazuje dane do jednego lub więcej modułów wyjściowych (Tabela 4), które obsługują kodowanie danych przy wykorzystaniu różnych kodeków audio i wideo. Na końcu generowany jest plik wynikowy. transcode -V -i sourcefile U -o targetfile. avi -y xvid4 U -w 500 -b 48 Transcode wykorzystuje do tego linuksową bibliotekę Linux XviD. Jest to szybka i dopracowana biblioteka, zapewniająca jakość nieustępującą komercyjnym kodekom. Powyższy przykład pokazuje dwie najważniejsze opcje: -i i -o, które wskazują odpowiednio plik wejściowy i wyjściowy. Opcja y wybiera xvid4 jako filtr eksportowy, a w ustawia wielkość strumienia (bitrate) dla wideo na 500 Kbps. Ponieważ domyślnie Transcode eksportuje audio jako strumień Tabela 2: Moduły importowe Transcode Moduł Opis dvd Odczyt wideo bezpośrednio z DVD. Przełącznik -i wskazuje plik urządzenia lub nazwę katalogu zawierającego system plików DVD. vob Odczyt pliku DVD VOB. Przy pomocy Transcode można też tworzyć takie pliki używając polecenia tccat. dv Odczyt plików DV (nieskompresowane strumienie z kamer DV). ffmpeg Dostęp do kodeków wykorzystywanych przez format ffmpge. Formatowanie jest wykonywane automatycznie. mplayer Wywołuje program Mplayer do dekodowania wideo. Tym samym Transcode może obsługiwać dowolny kodek, wspierany przez Mplayer. v4l / v4l2 Odczyt sygnału wideo bezpośrednio z urządzenia Video4Linux, np. z karty telewizyjnej. Proste konwersje formatów Oto polecenia Transcode, które służą do konwersji plików MPEG1/MPEG2 do pliku AVI w formacie MPEG4: Tabela 1: GUI dla Transcode Nazwa Adres WWW Opis dvd:: rip http://www. exit1. org/dvdrip/ GUI przeznaczone do kopiowania DVD. g4l http://gv4l. sourceforge. net/ Graficzny interfejs do manipulacji materiałem wideo nagranym z TV. ripmake http://www. lallafa. de/bp/ripmake. html Narzędzie znakowe korzystające z wielu aplikacji pakietu Transcode. kavi2svcd http://www. cornelinux. de/web/linux/kavi2svcd/index. html Kavi2svcd konwertuje pliki AVI do formatu SVCD (Super VCD). WWW.LINUX-MAGAZINE.PL xvid Odczyt wideo w formacie MPEG4. mpeg2 Import wideo w formacie MPEG. NUMER 15 KWIECIEŃ 2005 35 TEMAT MIESIĄCA Konwersja danych Listing 1: Przykład kodowania w wielu przejściach (Multiple Pass Encoding) transcode -V -i plikzrodlowy. mpegU -o plikwyjsciowy. avi -y xvid4,U null -w 500 -b 128 -R 1 transcode -V -i plikzrodlowy. mpegU -o plikwyjsciowy. avi -y xvid4 -U w 500 -b 128 -R 2 MP3 o jakości 128 Kbps, musimy ustawić parametr bitrate dla ścieżki dźwiękowej na 48 Kbps, używając opcji -b. Flaga -V sprawia, że Transcode użyje przestrzeni kolorów YUV zamiast RGB. Przyśpiesza to obliczenia o niemal 1/3. Jednak jest kilka filtrów, które obsługują jedynie RGB, w takiej sytuacji przy próbie użycia opcji -V Transcode wyświetli błąd. Odgadywanie strumienia Współczynnik bitrate (ilość danych przekazywanych w strumieniu w danej jednostce czasu) dla plików wideo decyduje o jakości materiału wyjściowego. Do obliczenia go należy użyć wielu parametrów – jest to przede wszystkim wysokość i szerokość klatki oraz ilość ramek na sekundę. W wyniku obliczeń otrzymujemy tzw. współczynnik BPP (Bits Per Pixel): Bitrate * 1000/ (wysokość * szerokość * ilość klatek/sek). Tabela 3: Filtry Transcode Filtr Opis 32detect Wykrywanie ramek z przeplotem. Musisz użyć opcji verbose=1, aby wykryć, czy wymagane jest usuwanie przeplotu. smartdeinter Usuwanie przeplotu dla przestrzeni kolorów RGB. Port filtru smart deinterlacer z programu VirtualDub smartyuv Usuwanie przeplotu dla przestrzeni kolorów YUV. Wymaga opcji -V. modfps Konwersja liczby ramek na sekundę (na przykład z PAL do NTSC). Musisz określić docelową ilość ramek na sekundę: export_fps logo Dodaje logo do obrazu. logoaway Usuwa logo stacji z obrazu. Oczywiście, jakość pliku wideo w wielkim stopniu zależy od jakości oryginalnego materiału (szybkie/ powolne sceny, wysoki/ niski kontrast, itd.), jednak można przyjąć założenie, że wartość BPP = 0.20 zapewnia jakość wystarczającą do tego, aby nie było widać artefaktów (pikseli i rozmycia). Wartości poniżej 0.15 wpłyną znacząco na jakość obrazu. Transcode zwraca bieżącą wartość BPP (w linii V: bits/pixel) po uruchomieniu konwersji. Jeśli wartość ta jest zbyt niska, należy przerwać pracę Transcode, wciskając kombinację klawiszy [Ctrl]+[C], aby uruchomić konwersję z właściwym parametrem bitrate. Lepiej najpierw sprawdzić W przypadku kodeków MPEG4, Transcode stosuje metodę wielokrotnych przejść. W celu osiągnięcia optymalnego ustawienia parametru bitrate dla danego pliku wideo, program przetwarza materiał wideo i generuje plik z informacjami o nim. W drugim przejściu dokonywana jest właściwa konwersja w oparciu o plik wygenerowany wcześniej. Metodę wielokrotnych przejść można włączyć opcją -R, trzeba jedynie określić, czy dana operacja będzie pierwszym czy drugim przejściem – przykład zawiera Listing 1. W pierwszym przejściu zostanie wykonana jedynie analiza wideo, -y xvid4, null jednocześnie wyłączamy funkcje eksportu audio. Dzięki temu cały proces zostanie przyspieszony o około 10 procent. Analizy i próby Ponieważ efektywna konwersja wideo powinna w rezultacie dać materiał wideo wysokiej jakości, pakiet Transcode zawiera zbiór narzędzi do analizy plików wideo, pozwalający na precyzyjne określenie własności materiału. Polecenie tcprobe daje szybki podgląd informacji o pliku (przykład w Ramce 1 „Wynik działania tcprobe”). Ramka 1: Wynik działania tcprobe tcprobe -i plikzrodlowy.mpegU [tcprobe] MPEG program stream (PS) [tcprobe] summary forU plikzrodlowy.mpeg, (*)U = not default, 0 = not detected import frame size: -g 320x240U [720x576] (*) aspect ratio: 1:1 frame rate: -f 29.970U [25.000] frc=4 (*) audio track: -a 0 [0] -eU 44100,16,1 [48000,16,2] -n 0x50U [0x2000] (*) PTS=370.6876,U bitrate=48 kbps W tym przykładzie program tcprobe informuje, że plik źródłowy ma rozdzielczość 320x240 i jest zapisany we właściwej dla systemu NTSC szybkości 29,97 ramek na sekundę. Dodatkowo, plik posiada monofoniczną ścieżkę dźwiękową o jakości 44,1 Khz z 16-bitowym próbkowaniem (wskazuje na to wartość -e 44100,16,1 – ścieżka stereo byłaby opisana liczbą 2). Ścieżka audio jest kodowana w MP3 – wskazuje na to wartość n 0x50, która oznacza MP3, w przypadku AC3 byłaby to wartość 0x2000. Ścieżka dźwiękowa jest próbkowana z jakością 48 Kbps. Ponieważ Transcode wykorzystuje domyślnie kodowanie 128 Kbps, sensowne jest ręczne zmniejszenie jakości próbkowania do 48 Kbps, gdyż wyższa wartość nie podniesie jakości, a jedynie zwiększy wielkość pliku wynikowego. Wartości zwracane przez tcprobe w nawiasach kwadratowych pokazują domyślne ustawienia Transcode. Program użyje ich, jeśli przekażemy do programu surowe dane, bez wskazania preferowanych ustawień. Tabela 4: Moduły eksportowe Transcode Moduł Opis xvid / xvid4 Kodek XviD zapisuje pliki w formacie MPEG4. Transcode wspiera różne wersje biblioteki XviD. Domyślnie Transcode 0.6.12 obsługuje XviD 0.9. Tym niemniej zalecamy użycie bieżącej wersji XviD 1.0, jeśli korzystacie z modułu xvid4. normalize Uśrednia poziom dźwięku. Divx5 yuvdenoise Filtr optymalizujący dla przestrzeni kolorów YUV. Wymaga użycia opcji -V. Wykorzystuje komercyjny kodek divx. com. Mimo że kodek jest dostępny dla Linuksa, odradzamy korzystanie z niego ze względu na dużą ilość błędów, a przede wszystkim na to, że nie ma dostępu do jego kodu źródłowego. ffmpeg detectclipping Wykrywa (opcja -j) lub usuwa (opcja -Y) czarne paski. Dowolny kodek obsługiwany przez bibliotekę ffmpeg – aby wyświetlić listę dostępnych kodeków, użyj polecenia transcode -y ffmpeg -F list. Kodek wybieramy, używając opcji -F mpeg2enc, mp2enc pv Otwiera okno podglądu (X Server musi korzystać z rozszerzenia XV). Kodowanie wideo w formacie MPEG2, a audio w MP2. Polecenie tcmplex łączy wynikowe pliki .m2v i .m2a, tworząc pojedynczy plik .mpeg. Moduł obsługuje wszystkie najważniejsze profile VCD – od SVCD do DVD. wav Moduł eksportu audio do generowanie plików WAV. 36 NUMER 15 KWIECIEŃ 2005 WWW.LINUX-MAGAZINE.PL Konwersja danych Mały, ale sprytny Możliwość skalowania obrazu jest kolejną użyteczną cechą pakietu - dzięki temu możliwe jest utworzenie przeglądowej wersji pliku, np. do pobrania przez WWW. Transcode posiada wiele funkcji, najprostsze z nich wymagają podania flagi -Z oraz wysokości i szerokości obrazu. Poniższy przykład pokazuje, jak zmniejszyć rozdzielczość o połowę do 160x120 pikseli bez użycia techniki kodowania w wielu przejściach: Ramka 2: Instalacja Transcode Rysunek 1: Maksymalna rozdzielczość wideo w standardzie PAL to 720x576 pikseli. Obraz transcode -V -iU sourcefile.mpegU -o targetfile_small.avi -yU xvid4U -w 125 -b 48 -Z 160x120,fast Parametr fast informuje Transcode, aby użył wewnętrznego algorytmu skalowania, który jednak obniża jakość obrazu, a ponadto posiada wiele ograniczeń, np. szerokość i wysokość obrazu powinna być podzielna przez 8. Jeśli ten warunek nie jest spełniony, program użyje metody standardowej. Opcja -w 125 powoduje obniżenie parametru bitrate. Przykładowo, jeśli zmniejszymy wysokość i szerokość obrazu do 1/4 pierwotnej wielkości, będzie to równoważne zmniejszeniu bitrate do 1/4 pierwotnej wartości. Listing 2: Analiza wielkości czarnych pasków transcode -V -i e4.mpv -JU detectclipping ... [detectclipping#0] valid area:U X: 9..712 Y: 57..519 -> -jU 58,10,56,6 ... o proporcji 4: 3 jest zniekształcony, ponieważ rozdzielczość 720x576 pikseli jest równoważna formatowi 5: 4. To właśnie jest przyczyna, dla której głowy aktorów są jajowate, gdy film oglądamy na komputerze PC. transcode -V -i e4.mpv -J U 32detect=verbose=1 ... (0) frame [000086]: (1) = 2141 |U (2) = 2161 | (3) = 10 |U interlaced = yes ... Jeśli dla Twojej dystrybucji dostępne są gotowe do użycia pakiety binarne Transcode, radzimy ich użyć. Samodzielna kompilacja pakietów jest pracochłonna i wymaga instalacji wielu bibliotek dodatkowych, narzędzie dpkg (menedżer pakietów) z Debiana informuje, że pakiet jest zależny od 44 bibliotek! Ten artykuł opisuje wersję 0.6.12, która została opublikowana w styczniu 2005 roku - można ją ściągnąć z adresu [1]. Binaria dostępne są dla następujących dystrybucji: ■ Debian ftp://ftp.nerim.net/debian-marillat/ index.html ■ Gentoo http://packages.gentoo.org/ ■ RedHat http://freshrpms.net/ ■ Mandrake http://plf.zarb.org/ ■ Suse http://packman.links2linux.org/ Słowo ostrzeżenia: obraz TV Użytkownicy urządzeń nagrywających opartych na Linuksie – jak np. VDR – mogą zapisywać nagrania TV, wykorzystując wysoką kompresję – np. formaty XviD lub MPEG4. Transcode może tutaj pomóc, jednak musi korzystać z pomocy zewnętrznego narzędzia Vdrsync [2] z VDR. Mimo że Transcode potrafi obsługiwać pliki VDR bezpośrednio, nie radzi sobie jednak zbyt dobrze z synchronizacją audio/wideo; dlatego lepiej używać Vdrsync. Poniższe polecenie utworzy dwa pliki z nagrania VDR – osobne dla ścieżek wideo i audio: vdrsync.pl U /vdrdata/Dragonheart/U 2004-08-08.20\:13.50.50.rec/ Nazwa pliku wyjściowego może być oczywiście różna. W naszym przykładzie skrypt utworzył plik wideo o nazwie e4.mpv oraz audio o nazwie c0.mpa. Transcode potrafi manipulować obydwoma plikami. Zmniejszona widoczność Listing 3: Sprawdzanie obecności ramek z przeplotem TEMAT MIESIĄCA Jeśli materiał filmowy jest w formacie Letterbox, można łatwo zauważyć czarne paski na górze i dole ekranu. Ponieważ te paski zajmują cenne miejsce, najlepiej się ich pozbyć za pomocą Transcode. Można to wykonać w dwóch krokach: najpierw Transcode musi dokonać analizy wielkości pasków, aby określić ich dokładne wymiary. W tym celu Transcode uruchamia filtr detectclipping. Listing 2 pokazuje przykład polecenia uruchamiającego analizę. Transcode sprawdza wszystkie klatki i zwraca wyniki na konsolę. Kiedy zwracane WWW.LINUX-MAGAZINE.PL wyniki przestają się zmieniać, oznacza to, że Transcode znalazł właściwe ustawienia. Parametr -j 58,10,56,6 informuje program, że należy usunąć czarne paski o wysokości 58 linii, 10 linii po lewej i 6 linii po prawej stronie. Dolny pasek ma szerokość 56 linii. Niestety, nie można użyć tych parametrów bezpośrednio, ponieważ końcowa wielkość obrazu nie byłaby podzielna przez 16 (większość programów kodujących wymaga, aby rozmiar obrazu był podzielny przez 16 – XviD nie jest tutaj wyjątkiem). Musimy użyć matematyki. Dla uproszczenia pominiemy kilka pikseli po lewej i prawej stronie – skoncentrujemy się na górnej i dolnej granicy obrazu. Jeśli usuniemy 56 linii zamiast 58, usuniemy w ten sposób w sumie 112 linii. Rozdzielczość systemu PAL to 576 linii, jeśli odejmiemy od tego 112 linii, pozostanie 464. Jest to liczba podzielna przez 16, dlatego ustawienie to jest prawidłowe. Przekażemy zatem do Transcode parametr -j 56,0,56,0 – ponieważ szerokość jest taka sama dla górnego i dolnego paska, wystarczy użyć przełącznika -j 56. Transcode wytnie czarne paski symetrycznie. Przeplot Przeplot to termin często używany w świecie technologii wideo. Oznacza on, że linie parzyste i nieparzyste obrazu są wyświetlane oddzielnie - jest to standard dla transmisji TV. Jednak, jeśli wyświetlamy film w komputerze, przeplot znacząco pogorszy jakość obrazu, ponieważ poruszające się obiekty będą wyglądać jak duchy. Można temu prze- NUMER 15 KWIECIEŃ 2005 37 TEMAT MIESIĄCA Konwersja danych lorów YUV. VirtualDub jest popularnym programem dla Windows o możliwościach analogicznych do Transcode. Filtr Transcode posiada wiele opcji, aczkolwiek wartości domyślne są w większości przypadków całkowicie wystarczające. Łamanie liczb Rysunek 2: W celu usunięcia zniekształceń, należy rozciągnąć obraz - w ten sposób głowy będą okrągłe. Rysunek 3: Czarne paski zajmują w procesie kodowania cenne miejsce, ich usunięcie pozwoli zaoszczędzić miejsce. ciwdziałać, używając funkcji likwidującej przeplot (wykorzystuje ją większość odtwarzaczy multimedialnych) - usuwa ona po prostu niewyświetlane linie. Transcode używa filtra 32detect (Listing 3) do sprawdzenia, czy materiał wideo zawiera klatki z przeplotem. Transcode zwraca takie informacje dla każdej z ramek. Jeśli informacja zwrotna zawiera interlaced = yes, należy użyć filtru usuwającego przeplot. Niestety, oznacza to również długi czas przekodowania. Transcode wykorzystuje filtr smartyuv, który jest zoptymalizowaną (pod kątem szybkości działania) wersją filtra smart deinterlacer opracowanego przez zespół VirtualDub dla przestrzeni ko- Jeśli chcemy zaoszczędzić więcej miejsca, nie wystarczy usunąć paski, trzeba też zmniejszyć rozdzielczość obrazu. Materiał wideo w systemie PAL ma w oryginale rozdzielczość 720x576 pikseli, jednak obraz jest rozciągnięty w pionie, gdy jest wyświetlany na ekranie komputera PC. Wynika to stąd, że rozdzielczość 720x576 pikseli oznacza, iż stosunek szerokości do wysokości wynosi 5:4 (są też filmy o proporcji 16:9). Telewizory natomiast mają ekran, którego proporcje wynoszą 4:3. Co prawda większość odtwarzaczy wideo automatycznie dostosowuje rozdzielczość do możliwości ekranu komputer, jednak my przygotujemy plik AVI o proporcji 4:3 - specjalnie do oglądania na komputerze. Rysunki 1 - 4 pokazują poszczególne kroki. Pierwszą czynnością, którą musimy wykonać, jest zmiana współczynnika proporcji obrazu. Musimy rozszerzyć obraz o liczbę wynikającą z dzielenia (4/3)/(5/4), czyli 1,33/1,25= 1,06. Obraz zwiększy się o 6 procent i będzie miał teraz szerokość 768 pikseli. Teraz musimy usunąć przy pomocy Transcode dwa czarne paski, z których każdy zajmuje 56 pikseli, w rezultacie otrzymamy obraz o wysokości 464 pikseli. Następnie skalujemy obraz 768x464 do szerokości 640 pikseli (czyli o współczynnik 1,2). W rezultacie powstanie obraz o wielkości 640x386 pikseli, zatem musimy zredukować wysokość do 384 pikseli (musi to być wartość podzielna przez 16). Zniekształcenie obrazu przy współczynniku 1,2 jest niewidzialne dla człowieka. Zastosowanie tych TABELA 5: NARZĘDZIA PAKIETU TRANSCODE Opis tccat Odczytuje plik wejściowy i przekierowuje go do standardowego wyjścia. Narzędzie to jest wykorzystywane przez Transcode, jednak można go też użyć do łatwego odczytywania tytułów DVD. tcscan Przetwarza plik wejściowy i wyświetla informacje o pliku. Używany zazwyczaj do określenia maksymalnej głośności w ścieżce audio. tcmodinfo Wyświetla dokumentację do modułu filtra pakietu Transcode. tcprobe Przetwarza plik wejściowy i wyświetla podstawowe informacje techniczne o pliku. Program tcprobe najlepiej uruchamiać przed uruchamianiem konwersji, aby upewnić się co do prawidłowości ustawień. tcrequant MPEG Requantizer. Zmniejsza bitrate pliku MPEG bez konieczności przekodowania. Dzięki temu możliwe jest generowanie wysokiej jakości wideo w krótkim czasie. tcmplex Multiplekser MPEG – łączy strumienie audio i wideo, generując jeden strumień MPEG. avimerge Łączy wiele plików AVI w jeden duży. avisplit Dzieli duży plik AVI na wiele mniejszych (również AVI). NUMER 15 KWIECIEŃ 2005 ku, możesz zmniejszyć rozdzielczość. W naszym przykładzie wykorzystujemy szerokość 640 pikseli i jest to w większości przypadków wystarczająca wielkość. prostych operacji matematycznych pozwala na konwersję obrazu z oryginalnego źródła VDR do formatu XVID: transcode -V -i e4.mpvU -p c0.mpaU -o targetfile.avi -yU xvid4 -w 1650U -j 56 -J smartyuv -Z =U 640x384,fast Flaga -p określa plik audio (pliki wideo i audio są przechowywane w oddzielnych plikach). Wartość parametru bitrate wynosi 1650, daje to w połączeniu z wybraną rozdzielczością wartość BPP = 0.267, co jest jakością wystarczającą dla naszych celów. Elastyczny i potężny Oczywiście, nasz artykuł nie jest wyczerpującym opisem cech i możliwości Transcode. Pamiętajmy, że pakiet ten zawiera również zestaw innych narzędzi działających w linii poleceń – przedstawiamy je w Tabeli 5. Dobrym źródłem informacji na temat pracy z Transcode jest lista mailingowa Transcode [3]. ■ INFO [1] Transcode: http://www.zebra.fh-weingarten. de/~transcode/ [2] Vdrsync - przygotowanie nagrań VDR dla Transcode: http://vdrsync.vdr-portal.de Nazwa 38 Rysunek 4: W celu zmniejszenia wielkości pli- WWW.LINUX-MAGAZINE.PL [3] Lista mailingowa Transcode: http://lists.exit1.org/mailman/listinfo/ AUTOR Jörn Reder jest popularyzatorem Open Source oraz programistą Perla. Jörn zdobył doświadczenie z Transcode, tworząc do niego interfejs dvd::rip. Jörn pracuje w Kolonii (Niemcy), gdzie zajmuje się głównie rozwojem internetowych aplikacji bazodanowych.