Dostałem film HD (1080p) w formacie .mkv (tzw. matrioszka) i bitrate rzędu 10 mega, w którym obraz zakodowano do H.264 a dźwięk do DTS (tego typu kodowanie filmów bardzo ostatnio popularane w necie dla filmów HD). Zacząłem go oglądać w Movist - to taki fajny playerek z przełączaniem silników QuickTime i ffmpeg (ten drugi to to samo co dekoduje w VLC czy MPlayer). Po chwili oglądanie stało sie bardzo uciążliwe. Wiatraki na maksa, komp bardzo gorący. Komenda top jasno pokazała, że procek zużywa prawie 80% zasobów. Czyli akceleracji sprzętowej brak. Jest to jasne — ffmpeg nie korzysta z niej po prostu więc programy typu VLC czy MPlayer niestety na OSX są z tego wykastrowane. Więc uruchamiam film w QuickTime Player X. Mimo, że on obsłuje akcelerację, to nie używa jej tutaj z prostej przyczyny. Sam nie zna kontenera matrioszki, więc dane dostarcza mu Perian, a ten też jest na ffmpeg więc akceleracji niet. Z początku nawet miał ponad 100% CPU (jak są dwa rdzenie w procku to się do 200% sumuje) bo buforował sobie sekkbara, jak skończył ~80-90% CPU (to narzut odtwarzania dostarczonego streamu + dekodowania perian/ffmpeg, w VLC i MPlayer jest lekko mniejsze, bo stream po rozkodowaniu przez ffmpeg od razu jest kopiowany do grafiki a nie musi być pobieraby z serwera QT).
Oglądać się nie da więc trzeba przekonwertować go do kontenera zjadliwego dla QT. Do ręki avidemuxer, w nim ustawiam nowy kontener na mp4, strumień wideo tylko kopiuję, bez reenkodowania (to by wieki zajęło dla 10GB filmu a po co, skoro już jest w dobrym formacie) a strumień audio do AAC (mp4 nie obsługuje w teorii DTS'a). Po ~20 minutach mam film mp4.
Teraz pierwsze benchmarki. QuickTime X: 16-17% CPU — akceleracja działa. VLC, MPlayer dalej ~80%. Tego się można było spodziewać. Tak czy siak sukces — można oglądać. Jedyne „przeciw” to czas przygotowań ~20 minut i kolejne 10GB zajęte na dysku.
Ale tak z głupia jeszcze potestowałem wszędzie oryginalny .mkv i otworzyłem go w starym QT7. Po zbuforowaniu seekbara do końca (~4 minuty) odtwarza ze zużyciem...
Tylko 23% CPU! Monitorowane przez dobre 10 minut. Trzyma się na mniej więcej takim poziomie cały czas (oczywiście dla tego samego fragmentu filmu co reszta benchmarków). Komenda top podała też ciekawą informację. Zużycie to tylko proces Quick Time Player a nie QTKitServer jak to miało miejsce w QTX. To jest dziwne, bo Perian właśnie tak działa, że dostarcza do QTKitServer rozkodowany strumień raw a QTPlayer go sobie stamtąd odtwarza. Czyli jedyna logiczna konkluzja jaka mi się nasuwa, to że QT7 jakoś, zupełnie nie mam pomysłu jak z periana pobiera bezpośrednio strumień H.264 i go dekoduje samemu (a raczej kopuje do GPU), perianowi zostawiając tylko dźwięk i obsługę kontenera. Może gdzieś go sobie QT zbuforował w takiem razie? Reset kompa i jeszcze raz wszystkie benchmarki — dalej tak samo. Przy QT7 procek się w ogóle nie poci, przy reszcie playerów (VLC, Movist + engine ffmpeg, Movist + engine QT, MPlayer i QuickTime Player X) umiera z wycieńczenia. Czyli nie trzeba konwertować kontenera do natywnego dla QT, wystarczy uruchomić .mkv w stary, QT i poczekać chwilkę na zbuforowanie seekbara. To mniej o 3/4 czasu i o 10GB zajętego niepotrzebnie dysku drugą kopią filmu.
Nigdzie nie znalazłem żadnej informacji w necie na ten temat. Wszyscy podają, że nie ma możliwości akceleracji H.264 w .mkv bez wcześniejszego skopiowania strumienia do czegoś zjadliwego dla QT natywnie. Czy ktoś ma jakieś przemyślenia na ten temat? Uprzedzając pytania — jestem pewien że przy QT7 nie ma innego procesu który to dekoduje, bo top uruchamiam z sortowaniem według CPU usage.




LinkBack URL
About LinkBacks



Odpowiedź z Cytatem


