ffmpeg: adaptive stretch kontrast

2054
Camille Goudeseune

Betrachten Sie ein (Farb-) Video, das unter schlechten Bedingungen aufgenommen wurde. Die hellsten Pixel der Rahmen liegen weit unter reinem Weiß, die dunkelsten unter weit über reinem Schwarz. Kann der Kontrast jedes Frames wie ein Audiokompressor / Limiter näher an den gesamten Helligkeitsbereich gedehnt werden? Kann dies in ffmpeg mit einigen seiner vielen Filter gemacht werden?

Natürlich, einfach jeder Rahmen hellsten Wert auf weißen und dunkelsten Schwarz Zuschlagen macht die Belichtung stottern wie im Jahre 1910 erschossen etwas Wie viel strecken jeden Kontrast zu den hellsten und dunkelsten Werte der abhängen sollte den Rahmen umgebenden Rahmen, vermutlich + -10 Sekunden .

Man könnte alle Frames extrahieren, die weißen und schwarzen Punkte jedes Frames mit Imagemagick erhalten, sie in einem Array speichern, das Array glätten, den Kontrast jedes Frames erneut mit Imagemagick strecken und das Video neu erstellen. Das scheint aber mittelalterlich zu sein.

2
Der [histeq] (http://www.ffmpeg.org/ffmpeg-filters.html#histeq) kommt dem nahe, was Sie wollen. Sie können sich aber auch die verschiedenen Flavours von [LUT] (http://www.ffmpeg.org/ffmpeg-filters.html#lut_002c-lutrgb_002c-lutyuv) sowie lut3d ansehen. Rajib vor 10 Jahren 0
Der Filter 'histeq' sieht aus der Dokumentation vielversprechend aus. Wenn ich jedoch libavfilter / vf_histeq.c filter_frame () untersuche, ist es genau wie bei den Filtern kurven, lut / lutrgb / lutyuv und (ich denke) lut3d, die Pixel früherer und späterer Frames ignorieren. 'histeq' erstellt Histogramme nur zu einem Zeitpunkt. (Aber "histeq" beantwortet die Frage technisch!) Camille Goudeseune vor 10 Jahren 0
Wenn Sie versuchen, den Durchschnitt über die gesamte Länge des Videos zu ermitteln, müssen Sie etwas tun, wie etwa imagemagick. Was Sie tun müssen, ist entweder imagemagick oder ffmpeg. Um das Histogramm des umgebenden Videos zu erhalten, müssen alle umgebenden Bilder * decodiert und zusammen gemittelt werden. stib vor 10 Jahren 0
@Rajib, bitte poste histeq als Antwort, damit ich es akzeptieren kann. AFAIK Keiner von ffmpegs Filtern verwendet vorherige oder nachfolgende Frames als Eingabe. Camille Goudeseune vor 10 Jahren 0

1 Antwort auf die Frage

1
Rajib

Der Histeq kommt dem nahe, was Sie wollen. Sie können aber auch die verschiedenen Geschmacksrichtungen von LUT-Filtern und lut3d betrachten.

Die Lut-Filter sind anpassbarer, da Sie tatsächlich einen Frame betrachten und bestimmen können, welche Werte verwendet werden sollen. Wenn darüber hinaus das Eingangsmaterial große Unterschiede aufweist, d. H. Die Leuchtdichtepegel, kann der Ausgang rütteln, wenn eine Korrektur "pro Bild" vorgenommen wird. Das Anwenden einer gleichmäßigen Korrekturstärke auf alle Bilder würde zu einem glatteren Ergebnis führen.