Używanie ffmpeg do rozciągania kontrastu wideo

5

Próbuję wdrożyć to, co tutaj zasugerowano: ffmpeg: adaptacyjny kontrast rozciągania

Metoda, o której myślałem, to:

  1. Oddziel kanały L, U i V.
  2. Zastosuj histeq do kanału L.
  3. Połącz kanały ponownie.

Jestem nowy w ffmpeg, więc mogłem wykonać 1 i 2, ale nie wiem, jak zaimplementować # 3. Do tej pory mam:

ffmpeg -i in.mkv -vf extractplanes=y,histeq=strength=0.3:intensity=1 out.mkv

Który wydobywa kanał L i automatycznie go kontrastuje, ale nie jestem pewien, jak go połączyć z kanałami U i V. Może użyć mergeplanes?

Pickles
źródło

Odpowiedzi:

2

Użyj tego:

ffmpeg -y -i in.mkv -filter_complex "extractplanes=y+u+v[y][u][v];   \
[y]histeq=strength=0.3:intensity=1[lumaeq];   \
[lumaeq][u][v]mergeplanes=0x001020:yuv420p[out]" -map "[out]" out.mkv  

The extractplanes filtr musi wyodrębnić każdy kanał (y + u + v [y] [u] [v]), które można później połączyć mergeplanes.

Uwaga podałem format wyjściowy jawnie yuv420p, ponieważ mój materiał wejściowy ma ten sam format.
Uwaga że użyłem twoich mocnych stron i wartości dla histeq filtr, który sprawił, że mój „normalny” materiał filmowy był całkowicie bezużyteczny. Nie znaczy to, że nie będzie działać na źle nakręconych materiałach. Ale nawet wartość histeq=strength=0.1:intensity=0.5 był na skraju użyteczności. To dlatego, że histeq jest filtr globalny a zastosowanie do jednego kanału nie jest optymalnym procesem. W każdym razie możesz użyć curves filtruj również do poszczególnych kanałów docelowych.

Ale zasada podziału i łączenia jest jak powyżej.

Rajib
źródło