Empfohlene Einstellungen für VOD
Zweck
In diesem Abschnitt finden Sie Empfehlungen für die VP9-Codierungseinstellungen bei der dateibasierten Codierung (nicht live).
Diese Empfehlungen sollen folgende Ziele erreichen:
- Ein ausgewogenes Verhältnis zwischen Qualität und Codierungsgeschwindigkeit
- Die Mindestbitrate für eine angemessene Qualität
- Einstellungen für eine Vielzahl von Inhaltstypen
Diese Empfehlungen
- Live-Codierung
- Für bestimmte Inhaltstypen optimieren (z.B. Sportaufnahmen mit vielen Bewegungen)
- Einstellungen für bestimmte Geräte- oder Netzwerkanforderungen konfigurieren
Codierung mit einer Auflösung
VP9 unterstützt eine Reihe von Frame-Größen, von sehr kleinen Auflösungen bis hin zu 4K. Größere Frame-Größen bieten eine höhere Qualität, erfordern jedoch mehr Bandbreite für die Übertragung und mehr Rechenleistung für die Dekodierung.
Wenn Sie nur eine Auflösung erstellen, ist 640 × 480 eine gute Wahl für eine Vielzahl von Web- und Mobilgeräten. Mit den folgenden FFmpeg-Befehlszeilenparametern können Sie eine Datei mit einer Auflösung mit 750 kbit/s erstellen.
-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
-c:v libvpx-vp9 -c:a libopus output.webm
Codierung mit mehreren Auflösungen
Wenn Sie mehrere Auflösungen anvisieren oder Ihr Auslieferungsnetzwerk eine unterschiedliche Bandbreite hat, empfiehlt es sich, mehrere Auflösungen zu erstellen. Der Player kann dann steuern, welche Auflösung an den Zuschauer gesendet wird.
Video-Encodes mit mehreren Auflösungen werden häufig beim Streaming mit adaptiver Bitrate verwendet. Dabei wechselt der Videoplayer in Echtzeit zwischen den Auflösungen, je nach Bandbreite des Nutzers. Mit Shaka Player können Sie beispielsweise Encodierungen mit mehreren Auflösungen wiedergeben. Dabei befindet sich jede VP9-Encodierung in einer separaten Datei und ein DASH-Manifest enthält Informationen zu jeder Encodierung.
Weitere Informationen zum Verpacken von Videos in adaptiven Streamingformaten finden Sie unter Shaka Packager. In dieser Anleitung geht es um die Encodierungseinstellungen für VP9 bei verschiedenen Auflösungen.
Empfohlene Einstellungen
Alle unten aufgeführten Einstellungen können für einzelne Dateien in verschiedenen Auflösungen verwendet werden. In Kombination bieten sie eine umfassende Reihe, die für adaptives Streaming geeignet ist. Die Version mit 640 × 480 Pixeln ist in zwei Varianten verfügbar: mit niedriger Qualität (LQ) und mit mittlerer Qualität (MQ).
Bitrate
Der Modus „Constrained Quality“ (CQ) wird empfohlen, wenn VP9-Dateien für die On-Demand-Wiedergabe codiert werden. In diesem Codierungsmodus können Sie eine durchschnittliche Zielbitrate angeben und gleichzeitig die maximale Qualität des Videos sowie die minimale und maximale Bitrate steuern.
Die folgenden Bitraten werden als Mindestanforderungen für die Web- und Mobilgerätebereitstellung empfohlen. Diese Vorschläge minimieren die Bitrate und sorgen gleichzeitig für eine Videoqualität, die für die Web- und Mobilgeräteverteilung geeignet ist. Sie können sie als Empfehlung für eine „niedrige“ Bitrate betrachten, mit der sich immer noch eine angemessene Qualität erzielen lässt.
Für die oben genannten Beispiele wird empfohlen, die Mindestbitrate auf 50 % der Zielbitrate und die Höchstbitrate auf 145% der Zielbitrate festzulegen.
Framegröße/Framerate | Zielbitrate (VOD, kbit/s) | Minimale Bitrate (50%) | Maximale Bitrate (145%) |
---|---|---|---|
320 × 240p bei 24,25,30 | 150 | 75 | 218 |
640 × 360p bei 24,25,30 | 276 | 138 | 400 |
640 × 480p bei 24,25,30 | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280 × 720p bei 24,25,30 | 1024 | 512 | 1485 |
1280 × 720p bei 50,60 | 1800 | 900 | 2610 |
1.920 × 1.080 Pixel bei 24,25,30 fps | 1800 | 900 | 2610 |
1.920 × 1.080p bei 50,60 | 3000 | 1500 | 4350 |
2560 × 1440 p bei 24,25,30 | 6000 | 3000 | 8700 |
2560 × 1440 p bei 50,60 | 9000 | 4.500 | 13050 |
3.840 × 2.160 Pixel bei 24,25,30 fps | 12.000 | 6000 | 17400 |
3840 × 2160p bei 50,60 | 18000 | 9000 | 26100 |
Abbildung 2a: Empfohlene VOD-Bitraten
In FFmpeg wird die Bitrate mit den folgenden Befehlen gesteuert:
FFmpeg | |
---|---|
-b:v <arg> |
Legt die Bitrate fest (z. B. 500.000) |
-minrate <arg> -maxrate <arg> |
Legt die Mindest- und Höchstbitrate fest. |
Wenn Sie beispielsweise Inhalte mit einer Auflösung von 640 × 480 codieren, können Sie die Befehlszeile -b:v 750k -minrate 375 -maxrate 1088
verwenden.
Qualität
Im CQ-Modus legen Sie auch die maximale Qualitätsstufe fest. Die folgenden Qualitätsstufen werden für die dateibasierte VP9-Codierung empfohlen:
Frame-Höhe | Zielqualität (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) oder 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
In FFmpeg wird die Qualität mit dem Befehl -crf
festgelegt. Wenn Sie beispielsweise die Qualität auf 33 festlegen möchten, verwenden Sie den Befehl -crf 33
.
Codierung in mehreren Durchgängen und Codierungsgeschwindigkeit
Die dateibasierte Codierung bietet Ihnen Flexibilität bei der Geschwindigkeit. Sie können das gleiche Material auch mehrmals bearbeiten, um die Qualität zu steigern, und für jede Bearbeitung eine Geschwindigkeit auswählen.
Beim Codieren von VP9-Dateien in FFmpeg empfiehlt es sich, den Parameter -quality
auf good
und die Geschwindigkeit des ersten und zweiten Durchgangs mit dem Parameter -speed
gemäß der Tabelle unten festzulegen. So wird ein gutes Gleichgewicht zwischen der Codierungszeit und der Qualität der Ausgabe erreicht.
Frame-Höhe | Geschwindigkeit (erster Durchgang) | Geschwindigkeit (zweiter Durchgang) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Ein Beispiel für einen Codierungsstring für den ersten Durchgang in FFmpeg ist -quality good -speed 4
.
Keyframe-Abstand
Wir empfehlen, zwischen Keyframes bis zu 240 Videoframes zuzulassen (8 Sekunden bei 30 fps). Keyframes sind Videoframes, die in sich geschlossen sind. Sie sind nicht von anderen Frames abhängig, um gerendert zu werden, sind aber in der Regel größer als andere Frametypen. Bei der Wiedergabe im Web und auf Mobilgeräten ermöglicht ein großzügiger Abstand zwischen den Keyframes dem Encoder, die beste Platzierung von Keyframes zu wählen, um die Qualität zu maximieren.
In FFmpeg wird der Keyframe-Abstand mit dem Befehl -g
gesteuert, der die Anzahl der Frames angibt. Bei 240 Frames wäre das -g 240
.
Empfehlungen für Kacheln und Threads
Beim Tiling wird das Videobild in mehrere Spalten aufgeteilt. Dadurch wird die Qualität leicht reduziert, die Codierungsleistung jedoch beschleunigt. Kacheln müssen mindestens 256 Pixel breit sein. Daher ist die Anzahl der Kacheln begrenzt, die verwendet werden können.
Je nach Anzahl der Kacheln und Auflösung des Ausgabebilds können mehr CPU-Threads nützlich sein. Im Allgemeinen sind mehrere Threads bei einer sehr kleinen Ausgabebildgröße nur von begrenztem Nutzen.
Die folgenden Einstellungen werden für das Kacheln und Threading bei verschiedenen Auflösungen empfohlen.
Framegröße | Anzahl der Kachelspalten | Anzahl der Threads |
---|---|---|
320 x 240 | 1 (-tile-columns 0 ) |
1 |
640 x 360 | 2 (-tile-columns 1 ) |
2 |
640 x 480 | 2 (-tile-columns 1 ) |
2 |
1.280 x 720 | 4 (-tile-columns 2 ) |
4 |
1.920 x 1.080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3.840 x 2.160 | 8 (-tile-columns 3 ) |
8 |
In FFmpeg wird die Anzahl der Kacheln mit dem Parameter -tile-columns
und die Anzahl der Threads mit -threads
gesteuert. Für eine Codierung mit 640 × 480 würde beispielsweise der Befehlszeilenparameter -tile-columns 1 -threads 2
verwendet.
FFmpeg-Befehlszeilen
Die folgenden FFmpeg-Befehle können verwendet werden, um VP9-Inhalte zu codieren.
Die Befehle für den ersten und zweiten Durchgang sind verkettet. Das Argument -y
im Befehl für den zweiten Durchgang beantwortet die Frage von FFmpeg, ob die Statistikdatei des ersten Durchgangs mit dem Ausgabevideo überschrieben werden soll, mit „Yes“ (Ja).
Beachten Sie außerdem, dass für Codierungen, die auf eine Ausgabe von bis zu 1280 × 720 ausgerichtet sind, eine 1080p-Quelle verwendet wird. Für größere Ausgaben wird eine 4K-Quelle verwendet.
320 × 240 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 1 -speed 4 tos-320x240.webm && \ ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-320x240.webm (320 × 240, 21,73 MB)
640 × 360 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x360.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-640x360.webm (640 × 360, 31,53 MB)
640 × 480 (niedrige Qualität, 24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-low.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-640x480-low.webm (640 × 480, 51,18 MB)
640 × 480 (mittlere Qualität, 24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-medium.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-640x480-medium.webm (640 × 480, 69,27 MB)
1280 × 720 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1280x720-24-30fps.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-1280x720-24-30fps.webm (1280 × 720, 98,2 MB)
1280 × 720 (50 oder 60 Bilder pro Sekunde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2-y tos-1280x720-50-60fps.webm
- Eingabedatei: tears_of_steel_1080p.webm (1920 × 800, 544,88 MB)
- Ausgabedatei: tos-1280x720-50-60fps.webm (1280 × 720, 157,1 MB)
1920 × 1080 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-1920x1080-24-30fps.webm (1920 × 1080, 151,51 MB)
1920 × 1080 (50 oder 60 Frames pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-1920x1080-50-60fps.webm (1920 × 1080, 238,18 MB)
2560 × 1440 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-2560x1440-24-30fps.webm 2560 × 1440, 533,54 MB
2560 × 1440 (50 oder 60 Bilder pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-2560x1440-50-60fps.webm 2560 x 1440, 664,04 MB)
3840 × 2160 (24, 25 oder 30 Bilder pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-3840x2160-24-30fps.webm 3840 × 2160, 1,03 GB)
3840 × 2160 (50 oder 60 Bilder pro Sekunde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- Eingabedatei: tearsofsteel_4k.mov (3840 × 1714, 6,76 GB)
- Ausgabedatei: tos-3840x2160-50-60fps.webm 3840 × 2160, 1,56 GB)