Czy do zakodowania h264 można użyć karty graficznej?

13

Zastanawiam się, czy dostanę lepszą kartę graficzną, czy może przyspieszyć kodowanie h264 na moim komputerze za pomocą hamulca ręcznego?

Jeśli tak, to w jaki sposób mogę stwierdzić, która karta graficzna to obsługuje?

Wiem, że GPU może dekodować sprzętowo h264, ale nie jestem pewien co do kodowania.

Piotr
źródło
Powiązane: Przyspieszona kompresja wideo - w każdym razie chcesz mieć do tego kartę NVIDIA i być gotowym wydawać pieniądze.
slhck,
Kolejny powiązany post na blogu: Zakoduj swoje filmy za pomocą GPU
slhck,
W przypadku kodowania h.264 hamulec ręczny używa kodera programowego x264 (videolan) . Niektóre odpowiedzi poniżej sugerują, że hamulec ręczny używa ffmpeg, który może wykorzystywać implementacje x264 lub hw (GPU). Chociaż to stare (ale wciąż aktualne) pytanie prawdopodobnie nie dotyczy „jak przyspieszyć hamulec ręczny”, a raczej „jak przyspieszyć kodowanie h.264”. Odpowiedzi będą miały trwałość (niektóre już wygasły); ale na razie, jeśli wykonujesz ML i / lub przetwarzanie wsadowe, być może będziesz musiał dopasować implementację do swojego sprzętu
Michael
fwiw, uważam ten komentarz od ffmeg za interesujący: „Kodery sprzętowe zazwyczaj generują dane wyjściowe o znacznie niższej jakości niż dobre kodery programowe, takie jak x264, ale generalnie są szybsze i nie zużywają dużo zasobów procesora. (Oznacza to, że wymagają większej przepływności wyjście o tej samej jakości percepcyjnej lub wytwarzają sygnał wyjściowy o niższej jakości percepcji przy tej samej przepływności.) ”
Michael

Odpowiedzi:

7

Przy użyciu hamulca ręcznego odpowiedź brzmi „nie”. Hamulec ręczny to koder h.264 tylko do procesora, chociaż teraz jest w stanie używać OpenCL do skalowania wideo i ma pewne wsparcie dla DXVA do dekodowania wideo.

Pytanie połączone przez slhck wymienia MediaCoder , ale wymaga karty graficznej Nvidia lub procesora Intel z rdzeniem graficznym drugiej generacji.

Istnieje kilka starszych produktów, które zostały przestarzałe, w szczególności Badaboom i oprogramowanie ATi Avivo.

Badaboom, który mógłby wykorzystać procesory graficzne Nvidia i Intel do przyspieszenia procesu kodowania, ale jest on już wycofany i nie obsługuje nowszych kart graficznych.

ATi miało własny koder wideo, który wcześniej nazywał się „Avivo”, zanim został połączony z pakietem kodeków AMD, który zawierał konwerter wideo AMD, choć nie jest już dostępny.

Mokubai
źródło
Więc obecnie używam procesora AMD, czy to oznacza dla mnie stratę czasu? Czy może to być dowolna karta NVIDIA - och, więc musi obsługiwać CUDA?
Piotr
Znalazłem ten link, en.wikipedia.org/wiki/CUDA, który sugeruje, że całkiem sporo kart NVIDIA obsługuje CUDA.
Piotr
Zaktualizowałem swoją odpowiedź linkiem do pakietu oprogramowania AMD, który może pomóc w korzystaniu z GPU do kodowania wideo, ale wymaga karty z serii HD2000 lub lepszej. Jeśli masz szczególnie wydajny procesor, ale niedrogą kartę graficzną, hamulec ręczny może być jeszcze szybszy.
Mokubai
Badaboom jest wycofywany z użytku 18.04.2012.
HVS
2
Powyższa odpowiedź nie jest / nie jest już poprawna.
totaam
4

x264 obsługuje teraz przyspieszenie kodowania OpenCL. To, ile przyspieszenia otrzymasz, będzie zależeć od wydajności twojej karty graficznej, na moim GTS 450 nie otrzymuję żadnego, a przy wolniejszych kartach faktycznie spowalnia kodowanie. Lepsze karty mogą pomóc. Wszystko, co musisz zrobić, to dodać --opencl do wiersza poleceń x264. Uważam, że hamulec ręczny korzysta z tych samych bibliotek x264 i oferuje to samo przyspieszenie OpenCL w nowszych wersjach.

Totaam
źródło
Jak korzystać z przyspieszenia kodowania OpenCL?
Dr.jacky,
2

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg zapewnia podsystem przyspieszania sprzętowego.

Przyspieszenie sprzętowe pozwala na wykorzystanie określonych urządzeń (zwykle karty graficznej> lub innych określonych urządzeń) do przetwarzania multimediów. Pozwala to na użycie dedykowanego sprzętu do wykonywania wymagających obliczeń, jednocześnie uwalniając procesor od takich obliczeń. Zazwyczaj przyspieszenie sprzętowe umożliwia określonym urządzeniom (zwykle GPU) wykonywanie operacji związanych z dekodowaniem i kodowaniem strumieni wideo lub filtrowaniem wideo.

Podczas używania narzędzia FFmpeg dekodowanie wspomagane sprzętowo jest włączane za pomocą -hwaccelopcji, która włącza określony dekoder. Każdy dekoder może mieć określone ograniczenia (na przykład dekoder H.264 może obsługiwać tylko profil linii podstawowej). Kodowanie wspomagane sprzętowo jest włączane za pomocą określonego kodera (na przykład nvenc_h264). Filtrowanie Przetwarzanie wspomagane sprzętowo jest obsługiwane tylko w kilku filtrach, w takim przypadku włączasz kod OpenCL poprzez opcję filtrowania.

Istnieje kilka API standardów sprzętowych akceleracji, z których niektóre są w pewnym stopniu obsługiwane przez FFmpeg.

Opcja „-hwaccel auto” pozwala wybrać sprzętowe przyspieszone dekodowanie do użycia w sesji kodowania. Możesz dodać ten parametr z „auto” przed wejściem (jeśli twój x264 jest skompilowany z obsługą OpenCL, możesz spróbować dodać parametr -x264opts), na przykład:

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

Przykro mi, ale nie pamiętam, jak wyświetlić listę wszystkich dostępnych opcji dla „-hwaccel”.

Możesz także spróbować tego: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

Rusłan Berozow
źródło
Nie wydaje się, że to konkretnie odpowiada na pytanie, choć wydaje się przydatne. Może dodasz kilka szczegółów, które pokazują, jak ffmpeg i jego argumenty mogą pomóc OP.
music2myear
Ta odpowiedź sugeruje użycie ffmpeg zamiast hamulca ręcznego do kodowania h.264, co prawdopodobnie jest w porządku, ponieważ pytanie prawdopodobnie dotyczy tylko najszybszego sposobu kodowania - i zakłada, że ​​GPU to umożliwi. Zauważ, że nie wszystkie GPU są równie wydajne (np. Zintegrowane GPU vs dedykowane), a procesory mają również optymalizacje, które biblioteki mogą wykorzystać, jeśli biblioteka jest skompilowana do jej obsługi. Zatem „przyspieszenie sprzętowe” jest właściwą ścieżką, niezależnie od tego, czy odbywa się to za pośrednictwem procesora, czy GPU.
Michael
0

Obecnie Handbrake obsługuje następujące kodery przyspieszane sprzętowo dla H.264 / AVC:

  1. Intel QuickSync (w systemie Windows i Linux). Jest to zgodne z co najmniej procesorami z serii Intel Sandybridge (Core drugiej generacji) ze zintegrowaną grafiką włączoną i wystawioną na działanie systemu operacyjnego. Zalecany sprzęt dla akceptowalnej jakości kodowania: Haswell (seria Core 4. generacji) i nie tylko, który wprowadził koncepcję precyzyjnych poziomów docelowych (TU), funkcje antycypowania (takie jak tryby kodowania LA-BRC i ICQ ) ze znacznie lepszą wydajnością. Zobacz instrukcję użytkowania z dokumentacji hamulca ręcznego tutaj .

  2. NVENC firmy NVIDIA : Wymaga to co najmniej procesorów graficznych NVIDIA z serii Kepler (GK +) i wyższych z wysokowydajnych konsumenckich jednostek SKU (seria GTX) i profesjonalnych zestawów (GPU Quadro i Tesla opartych na Kepler i nie tylko). Jest to dostępne zarówno w systemie Windows, jak i Linux.

Warto zauważyć, że dzięki NVENC będziesz sztucznie ograniczony do co najwyżej dwóch równoczesnych sesji kodowania na jednostkach SKU konsumentów, podczas gdy na skład profesjonalny nie ma to wpływu. Informacje na temat określonych możliwości kodera można znaleźć w matrycy GPU . Aby uzyskać najlepszą wydajność i jakość kodera, trzymaj się najnowszej wersji procesorów graficznych Pascal i Volta .

Opcjonalnie:

  1. Obsługa kodowania AMD AMF jest również dostępna tylko w bieżących kompilacjach nocnych TYLKO dla systemu Windows. Specjalna uwaga na temat technologii AMF AMD (która podłącza się do kodera VCE wbudowanego w sprzęt we wszystkich jednostkach GCN + SKU) dotyczy nowszych urządzeń, takich jak Polaris (seria RX 400+) i Vega , niektóre zaawansowane strojenie koderów dla H.264 / AVC zostały wycofane, ponieważ wprowadzono obsługę kodowania HEVC. AMD porzuciło kodowanie w ramce B, bez obsługi adaptacyjnej kwantyzacji (AQ), cechę, którą wspomniane sprzętowe kodery (QuickSync i NVENC) zaimplementowały przez pokolenia bez regresji. Zobacz to także w uwagach dotyczących wskaźników przepustowości, których można się spodziewać.

Jeśli chodzi o wsparcie Apple, jest to w najlepszym razie wstępne . VideoToolBox API, gdzie realizowane poza zakresem hamulca ręcznego, również wydaje się mieć bardzo ograniczony zestaw kontroli. Nawet jeśli Handbrake przyjmie go wcześniej, nie oczekuj cudów pod względem zachowania jakości i przepustowości.

Pamiętaj, że może być konieczne użycie najnowszej wersji nocnej, aby móc korzystać z najnowszych funkcji kodera na swojej platformie, tak jak obecnie. To zdecydowanie zmieni się w przyszłości.

林正浩
źródło