Konvertieren von Videos in WebM mit ffmpeg / avconv

18

Während ich versuchte, die Größe meiner Heimvideos zu optimieren, konvertierte ich einige davon als Test zu WebM, wobei ich Pitivi auf Xubuntu verwendete. Der Größenunterschied ist signifikant. Die resultierende Webm-Datei ist nur etwa 10% der Originaldatei, während die Bildqualität für mich ziemlich gleich aussieht.

Ich habe auch versucht, die Konvertierung mithilfe von avconvSkripten durchzuführen, aber die resultierende Datei sieht wirklich beschissen aus. Nachdem ich mir die Rendereinstellungen in Pitivi angesehen habe, habe ich einige Parameter ausprobiert:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmaber die Qualität sieht immer noch nach Mist aus, so dass es so aussieht, als würde ich einige falsche Parameter verwenden. Weiß jemand, welche Parameter richtig sind, um einen h264-Film in ein Webm zu konvertieren und die gleiche Qualität wie bei Pitivi zu erhalten?

Dies sind die Einstellungen in Pitivi: Erstellen des Pitivi-Projekts Rendern in Webm (HTML5-Video) Codec-Konfiguration

jeroen
quelle

Antworten:

53

Hinweis: Diese Informationen basieren auf dem FFmpeg-Wiki zur VP9-Codierung . Weitere Informationen finden Sie in diesem Artikel - er wird ständig gepflegt und erweitert. Um die besten Ergebnisse zu erzielen, sollten Sie eine aktuelle Version von verwenden, ffmpegindem Sie sie von der Website herunterladen (ein statischer Build reicht aus; sie enthält den libvps-vp9Encoder).

Variable Bitrate

Durch die VBR-Codierung erhalten Sie die optimale Gesamtqualität, da der Codierer frei wählen kann, wie viele Bits einem Frame zugewiesen werden sollen. Wählen Sie diesen Modus, es sei denn, Sie bereiten Videos für Streaming mit konstanter Bitrate vor.

Option 1: Kodierung mit konstanter Qualität

Wenn Sie nicht auf eine bestimmte Dateigröße abzielen möchten, sollten Sie die Bitrate in der Regel frei variieren lassen, da dies zu höchster Qualität führt. Sie können dies tun, indem Sie die Bitrate auf 0 und den konstanten Ratenfaktor ( CRF ) auf die gewünschte Qualitätsstufe setzen:

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

Der CRF-Wert kann zwischen 0 und 63 liegen. Niedrigere Werte bedeuten bessere Qualität. Die empfohlenen Werte liegen zwischen 15 und 35, wobei 31 für 1080p HD-Videos empfohlen wird. Google hat einen Leitfaden mit weiteren Informationen dazu .

Option 2: Codierung in zwei Durchgängen mit einer Zielbitrate

Wenn Ihre Datei eine bestimmte Ziel-Bitrate oder -Dateigröße haben soll, müssen Sie die Rate angeben und eine Codierung mit zwei Durchläufen verwenden (wodurch eine optimale Qualitätsverteilung gewährleistet wird). Hier wählen wir 5 MBit / s, was für 1080p-Inhalte ausreichen sollte.

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

Windows-Benutzer müssen NULanstelle von /dev/nullund ^anstelle von verwenden \.

Konstante Bit-Rate

Erstens bietet libvpx Codierungsmodi mit konstanter und variabler Bitrate . Eine konstante Bitrate sollte nach Möglichkeit vermieden werden (sofern Sie nicht auf eine bestimmte Dateigröße oder ein bestimmtes Streaming-Szenario abzielen), da die durchschnittliche Qualität pro Dateigröße schlechter ist. Trotzdem können Sie versuchen, eine konstante Bitrate einzustellen, wenn für Sie nichts anderes funktioniert, z. B. mit 1 MBit / s:

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

Schauen Sie sich die Ausgabe an und erhöhen oder verringern Sie die Bitrate nach Ihren Wünschen (oder Dateigrößenbeschränkungen). Zum Beispiel können Sie 500Koder 5Mund so weiter verwenden.

Sie müssen und die Bitrate angeben -minrate, damit der Encoder CBR verwendet. Sie müssen alle denselben Wert haben. Andernfalls wird stattdessen eine andere Ziel-Bitrate ausgewählt und die VBR-Codierung durchgeführt, jedoch mit schlechter Qualität.-maxrate-b:v

Audio

Der derzeit bevorzugte Audio-Codec für die VP9-Codierung ist Opus. FFmpeg wählt standardmäßig den erforderlichen Encoder und seine Optionen aus. Wenn Sie explizit festlegen möchten -c:a libopus, können Sie dies auch tun. Lesen Sie die libopusDokumentationWeitere Optionen finden .

slhck
quelle
4
Dies ist derzeit die beste Anleitung zum Kodieren von VP8 im gesamten Internet. Gut gemacht, ich wünschte, ich könnte mehr als einmal stimmen!
Evilsoup
Vielen Dank. Ich arbeite immer noch daran und werde später eine neue Seite im FFmpeg-Wiki hinzufügen.
Slhck
Das ist wirklich eine wundervolle Antwort! Ich verstehe jetzt, warum mein Video immer die gleiche niedrige Qualität hatte, weil ich eigentlich immer die Standardeinstellung von 256 kBit / s verwendet habe. Vielen Dank!
Jeroen
Was waren die Größenunterschiede zwischen dem ursprünglichen mp4 und dem konvertierten Webm?
switz
1
@Dan ich habe gerade den Leitfaden aktualisiert - festgestellt, dass es ein wenig veraltet war. Froh, dass Sie es nützlich fanden.
Slhck