Jak szybko przekonwertować MP4 na WebM przy użyciu FFMPEG?

20

Muszę przekonwertować 76 plików mp4 na webm na potrzeby strony internetowej korzystającej z filmów HTML5. Mówię o 10 GB plików mp4 ... Wiem, że mogę po prostu poprosić ffmpeg o zrobienie tego za pomocą:

ffmpeg -i input_file.mp4 output_file.webm

Oczywiście zrobię to rekurencyjnie przez:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;

Próbowałem nawet czegoś, co znalazłem gdzieś w Internecie:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm

Ale chodzi o to, że nie zajmie mi to mniej niż tydzień !!! Co ja robię źle? Czy jest jakiś sposób, aby to przyspieszyć? Czy w przypadku konwersji na ogg uzyskam prędkość? Proszę pomóż!!!

pr.nizar
źródło
@ LordNeckbeard powinieneś napisać odpowiedź na podstawie tego przewodnika. Należy również zauważyć, że koder vpx jest powolny jak melasa, nawet przy zdrowych ustawieniach itp., W porównaniu do x264 ... chyba że jesteś gotów poświęcić dużo jakości, oświetlony nie jest w stanie uzyskać z nim naprawdę szybkiego kodowania.
evilsoup
Problem dotyczy kompatybilności. To jest mała tabela kompatybilności: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} Wiem, że mówią, że Safari i IE mają największą część rynku, ale poważnie w to wątpię i postawiłbym na Firefoxa i Operę! ;)
pr.nizar
@ pr.nizar Dzięki wydaniu przez Cisco OpenH264 pod BSD, firefox obsługuje teraz h.264.
Wyatt8740,
Powiązane: stackoverflow.com/questions/43612424/… | superuser.com/questions/1211786/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

11

Transkodowanie wideo wymaga czasu. Wymaga również znacznie większej wiedzy na temat parametrów kodowania; Domyślne ustawienia ffmpeg raczej nie będą dla ciebie odpowiednie i mogą nawet nie utworzyć użytecznego pliku wyjściowego.

Oto początek:

http://blog.pcode.nl/2010/10/17/encoding-webm-using-ffmpeg/

Te ustawienia będą kodować do określonej średniej szybkości transmisji (szybkość transmisji wideo 3900 kbitów), więc będą występowały skoki prędkości transmisji.

MP4 i WebM używają różnych kodeków wideo, więc nie ma skrótu; wideo musi być transkodowane.

Szybkość kodowania będzie się znacznie różnić w zależności od rozmiaru klatki, liczby klatek na sekundę i ustawień jakości. W przypadku kodowania 720p możesz oczekiwać, że będziesz w stanie kodować mniej więcej 1: 1 (tj. 10 godzin wideo w 10 godzin) na procesorze z ostatnich kilku lat. Jeśli wykonujesz dwuprzebiegowe kodowanie ABR, jak w przykładzie podanym w linku, prawie dwukrotnie.

thomasrutter
źródło
8

Podwoić to czy o połowę przeciąć? Więc to ślepy zaułek .. Nie będę grał bitrate'ami, nigdy nie wiem, czego mogę się spodziewać po jakości lub rozmiarze .. Myślę, że pozostanę przy tym i utrzymam klienta do zakończenia konwersji ...

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;

Zamieszczam go dla przyszłych użytkowników, właściwie zyskałem na szybkości, ale mój procesor działa jak diabli: od 60 do 80% na każdym rdzeniu! Teraz myślę, że zajmie to mniej czasu: 3 dni zamiast 6 lub 7 .. Mam nadzieję, że to nie zepsuje .. ^ _ ^

W każdym razie dziękuję człowieku!

Edycja: Usunięto przełącznik -sameq po komentarzach od LordNeckbeard i neon_overload -sameq nie oznacza tej samej „jakości”

pr.nizar
źródło
3
-sameqnie oznacza „tej samej jakości” i zostało usunięte wcześniej. Nie używaj tego. Zobacz link w moim komentarzu do twojego pytania, aby uzyskać szczegółowe instrukcje kodowania libvpx.
llogan
2
-sameq oznacza ten sam kwantyzator, jednak nie można porównywać kwantyzatorów między h.264 i VP8, więc nawet jeśli to zadziałałoby, prawie na pewno uzyskałbyś zepsute wyniki, jeśli go użyjesz - więc nie.
thomasrutter
2
Dziękuję człowieku za zwrócenie mojej uwagi na to! Zredagowałem swoją odpowiedź ..;) Właściwie nie użyłem tego przełącznika, ponieważ widziałem, że robi się to jeszcze wolniej .. Rzuciłem nawet ffmpeg i użyłem avconv: TO WIELE SZYBCIEJ! Zadanie zostało wykonane w ciągu półtora dnia dzięki: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -wątki 8 " $ {0 %%. Mp4} .webm "'{} \; Wiem, że zmieniam temat za pomocą tego komentarza, ale pomyślałem, że warto to powiedzieć .. ^ _ ^ Mam nadzieję, że to komuś pomoże! ;)
pr.nizar
Jeśli chodzi o jakość, naprawdę nie potrafię odróżnić oryginalnych plików od tych transkodowanych przez webm: to prawie takie same jakości audio i wideo!
pr.nizar
1
Nadal zaleca się ustawienie wartości crf lub bitrate zamiast używania wartości domyślnych ffmpeg / avconv, cokolwiek to może być.
thomasrutter