Konwersja wideo do WebM za pomocą ffmpeg / avconv


18

Podczas próby optymalizacji rozmiaru moich filmów domowych konwertowane niektóre z nich do WebM jako test, używając pitivi na Xubuntu. Różnica wielkości jest znacząca. Wynikowy plik webm stanowi zaledwie około 10% oryginalnego pliku, podczas gdy jakość obrazu wygląda dla mnie prawie tak samo.

Próbowałem też wykonać konwersję, avconvaby móc ją napisać w skrypcie, ale plik wynikowy wygląda naprawdę kiepsko. Po przyjrzeniu się ustawieniom renderowania w Pitivi wypróbowałem kilka parametrów:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmale jakość nadal wygląda jak bzdura, więc wygląda na to, że brakuje mi / używam niewłaściwych parametrów. Czy ktoś wie, jakich parametrów należy użyć, aby przekonwertować film h264 na webm i uzyskać taką samą jakość jak w Pitivi?

Są to ustawienia w Pitivi: tworzenie projektu Pitivi Renderowanie do webm (wideo HTML5) konfiguracja kodeka

Odpowiedzi:


53

Uwaga: Ta informacja jest oparta na Wiki FFmpeg o kodowaniu VP9 . Więcej informacji można znaleźć w tym artykule - będzie on stale utrzymywany i rozszerzany. Aby uzyskać najlepsze wyniki, należy użyć najnowszej wersji ffmpeg, pobierając ją ze strony internetowej (wystarczy kompilacja statyczna; zawiera ona libvps-vp9koder).

Zmienna przepływność

Kodowanie VBR zapewnia optymalną ogólną jakość, ponieważ koder może dowolnie wybierać liczbę bitów do przypisania do ramki. Wybierz ten tryb, chyba że przygotowujesz filmy do przesyłania strumieniowego o stałej przepływności.

Opcja 1: Kodowanie o stałej jakości

Zazwyczaj, jeśli nie chcesz kierować na określony rozmiar pliku, powinieneś pozwolić na swobodną zmianę bitrate, ponieważ doprowadzi to do najwyższej jakości. Możesz to zrobić, ustawiając bitrate na 0, a współczynnik stałej szybkości ( CRF ) na docelowy poziom jakości:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Wartość CRF może wynosić od 0–63. Niższe wartości oznaczają lepszą jakość. Zalecane wartości mieszczą się w zakresie 15–35, przy czym 31 jest zalecane dla wideo HD 1080p. Google ma przewodnik z dodatkowymi informacjami na ten temat .

Opcja 2: kodowanie dwuprzebiegowe z docelową przepływnością

Jeśli chcesz, aby plik miał określoną docelową szybkość transmisji lub rozmiar pliku, musisz określić szybkość i zastosować kodowanie dwuprzebiegowe (co zapewni optymalną dystrybucję jakości). Tutaj wybieramy 5 MBit / s, co powinno wystarczyć dla treści 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Użytkownicy systemu Windows muszą używać NULzamiast /dev/nulli ^zamiast \.

Stała szybkość transmisji

Po pierwsze, libvpx oferuje tryby kodowania o stałej przepływności i zmiennej przepływności . Zawsze, gdy jest to możliwe, należy unikać stałej szybkości transmisji (chyba że celujesz w określony rozmiar pliku lub scenariusz przesyłania strumieniowego), ponieważ średnia jakość na rozmiar pliku będzie gorsza. Mimo to możesz spróbować ustawić stały bitrate, jeśli nic więcej nie działa, np. Z 1 MBit / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Spójrz na wynik i zwiększ lub zmniejsz częstość bitów do swoich upodobań (lub ograniczeń rozmiaru pliku). Na przykład możesz użyć 500Klub 5M, i tak dalej.

Trzeba określić -minrate, -maxratea bitrate -b:vw celu kodera używać CBR. Wszystkie muszą mieć tę samą wartość - w przeciwnym razie wybierze inną docelową szybkość transmisji i wykona kodowanie VBR, ale o złej jakości.

Audio

Obecnie wybranym kodekiem audio do kodowania VP9 jest Opus. FFmpeg domyślnie wybierze potrzebny koder i jego opcje. Jeśli chcesz to wyraźnie ustawić -c:a libopus, możesz to zrobić. Więcej informacji znajduje się w libopusdokumentacji .


4
Jest to obecnie jedyny najlepszy przewodnik do kodowania VP8 w całym Internecie. Dobra robota, chciałbym móc raz jeszcze głosować!
— evilsoup

@evilsoup Dziękujemy. Nadal go ulepszam i później dodam nową stronę na wiki FFmpeg.
— slhck

To naprawdę cudowna odpowiedź! Teraz rozumiem, dlaczego moje wideo zawsze było tej samej niskiej jakości, ponieważ faktycznie zawsze używałem domyślnej wartości 256 kBit / s. Dziękuję Ci bardzo!
— jeroen

Jakie były różnice wielkości między oryginalnym MP4 a skonwertowanym webm?
— switz

1
@ Dan Właśnie zaktualizowałem przewodnik - zauważyłem, że był trochę przestarzały. Cieszę się, że uznałeś to za przydatne.
— slhck
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.