2017-01-05 4 views
0

Während des Sommers arbeitete ich daran, ein Skript zusammenzustellen, das einen x264 Video/mp3-Stream erstellte und in die verschiedenen Streams aufteilte, damit es über MSE-DASH funktioniert. (Basierend auf den Anweisungen auf der webmproject.org website) Die gleichen Skripte haben aufgehört zu arbeiten, ein 6 GB Video in mehrere 25 GB-Videos. Ich habe mit Updates von ffmpeg auf dem Laufenden gehalten und weiß daher nicht, wann es nicht mehr funktioniert, aber ich vermute, dass dies auf die Art und Weise zurückzuführen ist, wie die DASH-Webm-Implementierung aktualisiert wurde.Warum ist ein ffmpeg webm Dash Stream viel größer als die anderen?

Ich fand neue Methode, die besser funktioniert, aber immer noch ein großes Problem mit einem Stream hat. Ich hatte gehofft, dass jemand erklären könnte, wie diese Kodierung funktioniert, damit ich die zugrunde liegende Ursache verstehen kann.

#!/bin/bash 
COMMON_OPTS="-map 0:0 -an -threads 11 -cpu-used 4 -cmp chroma" 
WEBM_OPTS="-f webm -c:v vp9 -keyint_min 50 -g 50 -dash 1" 

ffmpeg -i $1 -vn -acodec libvorbis -ab 128k audio.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 500k -vf scale=1280:720 -y vid-500k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 700k -vf scale=1280:720 -y vid-700k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1000k -vf scale=1280:720 -y vid-1000k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1500k -vf scale=1280:720 -y vid-1500k.webm 

Die Transcodierungs ist noch nicht abgeschlossen, aber man kann sehen, wo diese geleitet wird:

-rw-r--r-- 1 user staff 87M Jan 4 23:27 audio.webm 
-rw-r--r-- 1 user staff 27M Jan 4 23:42 vid-1000k.webm 
-rw-r--r-- 1 user staff 285M Jan 4 23:42 vid-1500k.webm 
-rw-r--r-- 1 user staff 15M Jan 4 23:42 vid-500k.webm 
-rw-r--r-- 1 user staff 20M Jan 4 23:42 vid-700k.webm 

Die 1500k Variante unverhältnismäßig größer als die anderen Ströme ist.

Das andere Problem ist, dass wenn ich ein kürzeres Video verwende, sagen wir acht oder neun Minuten, die obige Konfiguration wie erwartet läuft und alles perfekt ist. Ich weiß nicht, wo die Grenze dafür liegt, da jeder Test eine Menge Rechenleistung und Zeit kostet, aber wenn es weniger als zehn Minuten ist, funktioniert es und wenn es länger als eine Stunde ist, produziert es massive Dateien.

Antwort

1

Wenn Sie die Videobitrate auf einen bestimmten Wert beschränken möchten, reicht es nicht, nur -b:v zu verwenden. Abhängig von der Quelle (hohe Bewegung, Szenenkomplexität) wird die tatsächliche Bitrate höher.

Sie müssen auch -maxrate und -bufsize angeben.

Ie.

-b:v 1500k -maxrate 1500k -bufsize 1500k 

Für konstante Bitrate (CBR) das beste Ergebnis mit erreicht werden: eine variable Bitrate (VBR) Video bei rund 1500k gezwungen zu bekommen - - die Spitze höher sein kann, je nach Größe des VBV würden Sie ein einzelner Rahmen VBV. Beispiel für 25fps (1500/25 = 60):

-b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 60k 
+0

Vielen Dank. Ich wusste, dass das in der Sekunde funktionierte, in der ich angefangen habe, aber ich wollte sicherstellen, dass die Videos nicht missgebildet sind. Ich erwähnte, dass die Skripts nicht mehr funktionieren. Ich sollte auch erwähnen, dass sie aufgehört haben, an Videos zu arbeiten, an denen sie zuvor gearbeitet hatten. Kennen Sie etwas, das sich mit ffmpeg geändert hat und jetzt mehr Präzision in der Parameterzeichenfolge erfordert? – ranvel

+0

@renvel ja, es ist seltsam, dass eine einzelne Variante so hoch geht. Ich weiß nicht, was sich geändert hat ... – aergistal

Verwandte Themen