Gibt es einen Videocontainer, der Segmente unterschiedlicher Videoqualität (oder sogar Größe) verarbeiten kann?

Nehmen wir an, ich habe ein Video von 10 Minuten Länge. Und ich möchte seine Größe reduzieren, indem ich einige Teile mit hoher Bitrate habe, während andere weniger wichtige Teile eine niedrige Bitrate haben können. Dazu würde ich das Original in Segmente schneiden. Die wichtigen so lassen, wie sie sind, während die unwichtigen Teile in eine geringere Qualität transkodiert werden.

Geben Sie hier die Bildbeschreibung ein

Gibt es jetzt ein Video-Container-Format, das diese verschiedenen Teile in einer Datei "zusammenkleben" kann ? Mit guter Unterstützung in Playern spielt der so zuverlässige mplayer das Video ab, als wäre es eine gewöhnliche Datei? Und auf eine standardisierte/annotierte/rückgängig zu machende Weise, sodass ein einfacher CLI-Befehl die Segmente wieder in separate Teile/Dateien entwirren würde?

Ich hatte den Eindruck, Matroska könnte dies über Kapitel tun, wobei jedes meiner Segmente ein Kapitel wäre. (Ich habe es irgendwo gelesen, wo das Zusammenführen von Videos ohne Transcodierung diskutiert wurde). Aber wenn ich die eigentlichen MKV-Dokumente lese, scheinen MKV-Kapitel eher wie ein Textindex zu sein, der auf einen anderen (Video-) Stream einer .mkv-Datei zeigt - und nicht auf eine Art Datenblockindex auf niedriger Ebene, der mir bei meiner Idee helfen würde. mkv sieht also aus wie eine Sackgasse.

Einfaches Bearbeiten oder Zusammenführen (was mit etwas Remuxing verlustfrei möglich ist) würde mir nicht bieten, unterschiedliche Qualitäten in verschiedenen Abschnitten des Videos zu haben - richtig?

Was ich suche, ist eine an den Interessenbereich angepasste Qualität, etwas, das Bildformate wie JPEG2000 für räumliche Bereiche bieten, nur hier im Laufe der Zeit auf Video angewendet.

Irgendwelche Vorschläge oder Ideen?

Die akzeptierte Antwort schlägt vor, die VBR-Funktionen eines Formats wie mp4 zu verwenden. Während dies funktioniert, hinterlassen Sie bitte eine Antwort, wenn Sie einen anderen Weg kennen, um das gewünschte Ergebnis zu erzielen.

Antworten (3)

Wenn der einzige Unterschied die Bitrate ist, erfüllt jeder Container, der Streams mit variabler Bitrate akzeptiert, Ihre Anforderung, z. B. MP4, MKV usw

Schritt 1 besteht darin, Ihre Segmente, idealerweise mit demselben Encoder, in unterschiedliche Bitraten zu codieren, wobei alle anderen Parameter gleich sind, z. B. über ffmpeg ,

ffmpeg -ss 0 -t 5 -i input.mp4 -b:v 1000k seg1.mp4

ffmpeg -ss 5 -t 7 -i input.mp4 -b:v 3000k seg2.mp4

ffmpeg -ss 12 -i input.mp4 -b:v 500k seg3.mp4

Schritt 2 besteht darin, ffmpeg zu verwenden, um die codierten Segmente im Kopiermodus mit dem concat-Demuxer zu verketten.

Bereiten Sie eine Textdatei vor

file 'seg1.mp4'
file 'seg2.mp4'
file 'seg3.mp4'

und dann

ffmpeg -f concat -i list.txt -c copy joined.mp4

Clips mit unterschiedlichen Eigenschaften, wie Auflösung, können ebenfalls zu einer MP4 zusammengefügt werden, aber die Kompatibilität zwischen Mediaplayern ist zweifelhaft , und ffmpeg wird dies derzeit ohnehin nicht zuverlässig tun.

Interessant! Ich hatte immer eine andere Vorstellung davon, was VBR ist und tut, in Bezug auf "Granularität". Werde das versuchen. Außerdem warte ich noch ein wenig, bis ich Ihre Antwort wahrscheinlich als akzeptiert markieren werde
Nachdem ich es ausprobiert habe und festgestellt habe, dass es funktioniert (sowohl vbr als auch variable Größe), habe ich ein kleines Problem gefunden: Wenn ich ein Segment "wie es ist" mit "-vcodec copy" herausbearbeite, wird der Concat 1 melden .„Auto-inserting h264_mp4toannexb bitstream filter“ (scheint gut), 2. „Non-monotonous DTS in output stream“ (arg!!) für dieses Segment. Gibt es eine Möglichkeit, einen Stream zu kopieren (keine Neucodierung), aber Zeitstempel zu entfernen? So wie ich es verstehe, würde das Filtern der Ausgabe/dieses Segments auf diese Weise diesen DTS-Fehler beheben (obwohl das Video trotzdem abgespielt wird).
ffmpeg generiert standardmäßig neue Zeitstempel, es sei denn, Sie verwenden die Segment-Muxer oder geben ein Flag wie copyts. Mit welchem ​​Befehl bekommst du den Fehler?
Befehl ist das, was Sie vorgeschlagen haben: ffmpeg -f concat -i list.txt -c copy joined.mp4, und die Beispielsegmentbefehle, nur der mittlere wurde in geändert ... -i input.mp4 -vcodec copy seg2.mp4. Getestet mit ffmpeg 2.8.1, mein Ubuntu avconv kennt concat noch nicht.
Ah. Beim Stream-Copy ist das Schneiden nicht exakt. Sie müssen einfügen -avoid_negative_ts make_zero, aber Sie werden wahrscheinlich einige Wiederholungen mit dem vorherigen Segment erhalten.
Beim Segmentieren oder beim Concat-Schritt? Beides probiert. Eine Variante gab mir sogar einen zusätzlichen Fehler "Paket mit ungültiger Dauer". Sorry, dass das hier zu einem Thread wird... Außerdem stimmt make_zeroder Wert für den -avoid_negative_tsSchalter. Wo sind die Unterlagen dazu?
Ich hatte begrenzten Erfolg beim Hinzufügen -copyts -start_at_zerojeder Segmentierung, keine DTS-Warnung mehr bei Concat, aber das Video wurde nicht richtig abgespielt.
Wenn Sie neu codieren, benötigen Sie diese Flags nicht. Wenn Sie nicht sind, werden diese beiden nicht helfen. Beabsichtigen Sie, die gesamte Datei zu segmentieren?
Ich füge gerade Befehle zum Reproduzieren im Chat ein

Advanced Authoring Format (AAF) und einige MXF-Betriebsmuster (OP-2a, 2b, 3a und 3b) sollten Bitraten mischen können. Ich sage "sollte", weil ich im Moment keine gute Möglichkeit zum Testen habe und keine kommerziellen Systeme kenne, die diese MXF-OPs stark nutzen.

Nun, ich kann nicht sagen, dass ich weiß, wie es gemacht werden würde; aber RED (www.red.com), ihr R3D-Videoformat verwendet einen Debayer-Prozess.

Ich besitze eine RED Epic. Es schießt mit bis zu 5K 100 FPS.

Wenn Sie unterwegs sind und das Video beispielsweise auf einem Laptop ansehen möchten, ist der Durchsatz von unkomprimiertem (oder nahezu) beispielsweise 3:1 5K enorm.

RED verwendet also einen Debayer-Prozess; wobei die Pixel grundsätzlich einem Gittermuster zugeordnet werden, in Bezug darauf, wie sie sowohl codiert als auch decodiert werden.

Dadurch entfällt die Notwendigkeit von "Proxy"-Dateien, Dateien, die zur Bearbeitung heruntergestuft werden, weil Ihr System die Datei einfach nicht in Echtzeit abspielen kann.

Der Debayer hat 8 Ebenen. Und der RED-Player (sowie Software, die ihn unterstützt, wie PPro/After Effects, ermöglicht die Wiedergabe mit 100 %, 50 %, 25 %, 12,5 % und so weiter.

Das Einzigartige an RED ist, dass, wenn Ihr Computer dies tut, die Qualität tatsächlich nicht verringert wird, sondern nur die gewünschte x/100-Qualität angezeigt wird.

Vielleicht ist meine Antwort also etwas rückwärts gedacht: Aber im Wesentlichen haben Sie mit RED-Dateien eine 1K-, 2K-, 3K-, 4K-, 5K-Version - alles in einer Datei verpackt.

Hoffe, das hilft vielleicht etwas, auch wenn es keine Antwort auf die eigentliche Frage ist.

Diese "Antwort" entspricht eigentlich nicht der gestellten Frage. Es geht nicht darauf ein, wie das Problem allgemein gehandhabt werden kann (man kann kein zufälliges Videoformat in RED RAW transcodieren). Und meines Wissens kann man die RED-Debayer-/Komprimierungsparameter nicht im laufenden Betrieb als dynamische Eigenschaft von RED-Medien ändern.
Eher ein Ex-Kurs in Dateiformate, aber trotzdem danke für die Mühe.
Ich glaube, ich habe klar gesagt, dass die Parameter "debayer/compression" nicht geändert wurden; lediglich die Wiedergabe von solchen. Ich habe auch angegeben, dass sich die Antwort nicht direkt auf die Frage bezieht, eher das "Konzept".