CodeGym /Corso Java /Python SELF IT /Applicazione di filtri visivi ed effetti: modifica della ...

Applicazione di filtri visivi ed effetti: modifica della luminosità, contrasto e colore

Python SELF IT
Livello 48 , Lezione 1
Disponibile

1. Effetti visivi

Introduzione agli effetti visivi

Oggi impariamo non solo a modificare la luminosità e il contrasto, ma anche a dare alle tue creazioni uno stile speciale, non meno figo di quello dei blockbuster di Hollywood. Beh, o almeno rendere il tuo video più guardabile se è stato registrato con un vecchio telefono.

Quando si tratta di editing video, sapere come applicare effetti visivi è il tuo ingrediente segreto per creare contenuti che attirano l'attenzione. Gli effetti visivi possono aiutare a rendere il video più vivido, evidenziare dettagli importanti o trasformare lo stile generale del clip.

Le basi della modifica di luminosità, contrasto e colore

Prima di passare alla pratica, ripassiamo per un attimo cosa significano luminosità, contrasto e colore nel contesto dei video.

  • Luminosità – è la chiarezza o oscurità complessiva dell'immagine. Aumentare la luminosità rende il video più chiaro, mentre diminuirla lo rende più scuro.
  • Contrasto – è la differenza tra le parti più chiare e più scure del video. Un alto contrasto rende il video più ricco, uno basso lo rende più piatto.
  • Color correction – è il processo di modifica dell'equilibrio cromatico per migliorare la qualità del video.

2. Modifica della luminosità del video

Ora tuffiamoci nel codice e vediamo come possiamo applicare questi effetti usando MoviePy.

Modifica della luminosità del video con il metodo fl_image()

La modifica della luminosità del video può essere ottenuta utilizzando il metodo fl_image, che consente di applicare funzioni personalizzate a tutti i frame del video. Se vuoi aumentare la luminosità del 20%, utilizza il fattore 1.2

Python

from moviepy.editor import VideoFileClip

# Funzione per modificare la luminosità
def change_brightness(image, factor=1.2):
    return image * factor

# Aprire il file video
clip = VideoFileClip("video.mp4")

# Applicare la modifica della luminosità
brightened_clip = clip.fl_image(lambda frame: change_brightness(frame, 1.2))

# Salvare il risultato
brightened_clip.write_videofile("brightened_video.mp4")

Modifica della luminosità del video con moviepy.video.fx.all

Un altro modo per modificare la luminosità del video è tramite l'effetto lum_contrast, che consente di aumentare o diminuire la luminosità del clip.

Aumentare la luminosità del video

Python

from moviepy.editor import VideoFileClip
from moviepy.video.fx.all import lum_contrast

# Caricare il video
video = VideoFileClip("sample_video.mp4")

# Applicare l'effetto per aumentare la luminosità
bright_video = lum_contrast(video, lum=30)  # Aumentare la luminosità di 30 unità

# Salvare il risultato
bright_video.write_videofile("bright_video.mp4")

In questo esempio:

  • lum_contrast(video, lum=30) aumenta la luminosità del video di 30 unità. Il valore della luminosità può essere positivo (per aumentare la luminosità) o negativo (per oscurare).

Ridurre la luminosità del video

Python

# Applicare l'effetto per ridurre la luminosità
dark_video = lum_contrast(video, lum=-30)  # Ridurre la luminosità di 30 unità

# Salvare il risultato
dark_video.write_videofile("dark_video.mp4")

3. Modifica del contrasto del video

Il contrasto del video determina quanto sono brillanti e saturi le parti luminose e scure. Un contrasto più alto rende le parti chiare più luminose e quelle scure più scure, mentre un contrasto più basso riduce la differenza tra le parti chiare e scure.

Modifica del contrasto con il metodo fl_image()

Il contrasto può essere modificato in modo simile utilizzando una funzione di trasformazione dell'immagine. Ecco come fare:

Python

import numpy as np

# Funzione per modificare il contrasto
def change_contrast(image, factor=1.5):
    mean = np.mean(image)
    return (image - mean) * factor + mean

# Applicare la modifica del contrasto
contrasted_clip = clip.fl_image(lambda frame: change_contrast(frame, 1.5))

# Salvare il risultato
contrasted_clip.write_videofile("contrasted_video.mp4")

Modifica del contrasto con il metodo lum_contrast()

Aumentare il contrasto del video

Python

# Aumentare il contrasto
high_contrast_video = lum_contrast(video, contrast=1.5)  # Aumentare il contrasto del 50%

# Salvare il risultato
high_contrast_video.write_videofile("high_contrast_video.mp4")

Qui:

  • contrast = 1.5 aumenta il contrasto del 50%. Puoi specificare qualsiasi valore maggiore di 1 per aumentare il contrasto.

Ridurre il contrasto del video

Python

# Ridurre il contrasto
low_contrast_video = lum_contrast(video, contrast=0.5)  # Ridurre il contrasto del 50%

# Salvare il risultato
low_contrast_video.write_videofile("low_contrast_video.mp4")

Qui:

  • contrast = 0.5 riduce il contrasto del 50%. Valori inferiori a 1 riducono il contrasto, rendendo l'immagine meno satura.

4. Modifica delle caratteristiche cromatiche del video

MoviePy offre strumenti per modificare la gamma cromatica, trasformare il video in bianco e nero e applicare altri effetti cromatici.

Correzione del colore con il metodo fl_image()

Per la correzione del colore, possiamo utilizzare una funzione come rgb_color, che consente di trasformare la palette cromatica del video.

Python

def adjust_color(image, factor=0.8):
    return image * np.array([1, factor, factor])  # riduzione dei canali verde e blu

# Applicare la correzione del colore
color_corrected_clip = clip.fl_image(lambda frame: adjust_color(frame, 0.8))

# Salvare il risultato
color_corrected_clip.write_videofile("color_corrected_video.mp4")

Correzione del colore con moviepy.video.fx.all

MoviePy offre strumenti per lavorare con la gamma cromatica, inclusa la trasformazione del video in bianco e nero e altri effetti.

Trasformare un video in bianco e nero

Per creare un video in bianco e nero, puoi utilizzare il metodo fx con la funzione blackwhite.

Python

from moviepy.video.fx.all import blackwhite

# Convertire il video in bianco e nero
bw_video = blackwhite(video)

# Salvare il risultato
bw_video.write_videofile("black_and_white_video.mp4")

Qui:

  • blackwhite(video) trasforma il video in tonalità di grigio.

Inversione dei colori del video

MoviePy consente di creare un effetto di inversione dei colori, utilizzato per effetti drammatici o artistici.

Python

from moviepy.video.fx.all import invert_colors

# Inversione dei colori del video
inverted_video = invert_colors(video)

# Salvare il risultato
inverted_video.write_videofile("inverted_video.mp4")

Qui:

  • invert_colors(video) inverte tutti i colori del video, creando un effetto negativo.

5. Applicazione dei filtri

Applicazione di filtri cromatici per creare un effetto seppia

Per creare un effetto seppia, che aggiunge un calore marrone ai video, è possibile applicare un filtro personalizzato. In MoviePy, ciò può essere fatto modificando manualmente i canali cromatici.

Crea un effetto seppia

Python

from moviepy.video.fx.all import colorx

# Applicare l'effetto seppia (riduzione dei canali blu e verde)
sepia_video = colorx(video, 0.9)

# Salvare il risultato
sepia_video.write_videofile("sepia_video.mp4")

In questo esempio:

  • colorx(video, 0.9) riduce la saturazione dei colori. Puoi anche combinare questo effetto con altri per ottenere tonalità calde.

Uso di filtri personalizzati

Se hai bisogno di creare un effetto cromatico unico, MoviePy ti permette di scrivere i tuoi filtri personalizzati creando una funzione da applicare a ogni frame del video.

Creazione di un filtro personalizzato per aumentare il canale rosso

Python

import numpy as np

# Funzione personalizzata per aumentare il canale rosso
def enhance_red(image):
    image[:, :, 0] = np.clip(image[:, :, 0] * 1.5, 0, 255)  # Aumento del canale rosso
    return image

# Applicare il filtro personalizzato
red_video = video.fl_image(enhance_red)

# Salvare il risultato
red_video.write_videofile("enhanced_red_video.mp4")

In questo esempio:

  • La funzione enhance_red(image) aumenta il canale rosso dell'immagine, rendendolo più saturo.
  • fl_image() applica questa funzione a ogni frame del video, creando un effetto di aumento del canale rosso.

Problemi e soluzioni

A prima vista sembra che rendere un video più vivace sia semplice. Tuttavia, come nella programmazione, ci sono sempre sfumature. Ad esempio, una luminosità troppo alta può "cancellare" i dettagli nelle aree luminose, mentre un contrasto eccessivo può rendere il video visivamente "rumoroso". Si consiglia di applicare queste modifiche gradualmente e di verificare il risultato su piccoli frammenti del video.

Inoltre, non dimenticare le prestazioni. Cambiare ogni frame è un processo che richiede risorse. È saggio assicurarsi che il video non sia eccessivamente lungo quando si sperimentano effetti.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION