FFmpeg: Application d'effets à une vidéo

0

J'essaie d'appliquer certains effets à une vidéo en ajustant la couleur, le contraste, la luminosité, etc. Voici certains des effets que j'essayais. Et voici la commande que j'ai utilisée pour appliquer l'effet "Kelvin".

ffmpeg -i 3.mp4 -c:v libx264 -c:a libfaac -filter_complex "[0:v]eq=1.0:0:1.3:2.4:0.175686275:0.103529412:0.031372549:0.4[outv]" -map [outv] out.mp4

La documentation de FFmpeg m'a aidé à comprendre les limites de chaque valeur pour le eqfiltre. Mais je ne reçois toujours pas la sortie attendue pour l'effet "Kelvin" comme dans le lien ci-dessus. J'ai calculé les valeurs rg, gg, bg en fonction des valeurs sepiautilisées dans css. (r = 112, g = 66, b = 20 sont les valeurs que j'ai utilisées pour convertir sépia en rgb) Voici le calcul simple que j'ai utilisé pour obtenir les valeurs rg, gg, bg.

rg = (112/255) * (gamma_r max - gamma_r min) * valeur sépia

Ici, gamma_r max est égal à 10 et gamma_r min à 0,1 selon la documentation.

Qu'est-ce que je fais mal ici? Y a-t-il une autre alternative pour y arriver?

Chamath
la source

Réponses:

0

Le eqfiltre ajuste les canaux de couleur en fonction de leur état actuel, c’est-à-dire qu’ils augmentent ou diminuent leur intensité (comme un bouton de «volume» dans le son). Pour atteindre votre température de couleur cible, eqvous devez calculer la température de couleur actuelle de chaque région de la photo, puis la modifier - ce pour quoi vous avez besoin d'un serveur de cadre tel que AviSynth. Mais tout cela n'est pas vraiment nécessaire, car vous ne voulez pas vraiment contrôler votre balance des blancs, vous voulez simplement appliquer un filtre fixe qui donnera un ton de couleur spécifique - dans ce cas sépia. Pour cela, utilisez plutôt le filtre colorchannelmixer qui permet de gérer la balance des blancs des pixels les uns par rapport aux autres.. La documentation du filtre contient un exemple spécifique pour sépia:

colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131

Comment ça marche (explication très simplifiée)

le colorchannelmixerLe filtre décrit l'image comme si elle avait 4 canaux de couleur - appelés Rouge, Vert, Bleu et Alpha (le canal "masque"). Par défaut, chaque canal représente l'intensité de la couleur pour laquelle il est nommé 1.0. Ainsi, le canal "Rouge" représente la partie de l’image qui correspond au rouge multipliée par 1,0, la partie correspondant au vert multipliée par 0,0, la partie bleue valant 0.0 et la partie correspondant à la valeur alpha multipliée par 0.0. De même, chaque canal a une valeur de 1.0 pour "sa" couleur et de 0.0 pour tous les autres. Maintenant, le filtre vous permet de "voler" une couleur de son canal et d'injecter son "énergie" dans un autre canal. Par exemple, vous pouvez augmenter la valeur du rouge dans le canal "vert" à 1.0 et changer la valeur du rouge dans le canal "rouge" à 0.0, maintenant, l’intensité du vert augmentera dans chaque pixel de l’intensité initiale du rouge, sans laisser de rouge dans l’image et sans modifier l’intensité relative du bleu et de l’alpha. Lorsque vous appliquez ce concept à toutes les 16 combinaisons de couleurs, vous obtenez une matrice qui définit l'intensité de couleur résultante de chaque pixel en tant que produit de toutes les intensités de couleur d'origine. Le résultat est ensuite normalisé et vous obtenez un moyen simple d’exprimer la courbe de transformation des couleurs.

Ce qui précède est quelque peu simpliste. Pour comprendre comment cela s’applique à votre question, vous pouvez en apprendre davantage sur la théorie de la température de couleur . Notez qu'avec le colorchannelmixerfiltre, vous pouvez également utiliser d'autres fonctions, telles que la génération de négatifs couleur, la réduction de la profondeur des couleurs pour obtenir des effets de type bande dessinée, et bien plus encore.

J'espère que cela fonctionne bien pour vous!

avnr
la source
pouvez-vous s'il vous plaît fournir un peu plus d'informations sur le colorchannelmixerfiltre s'il vous plaît. La documentation elle-même ne semble pas contenir beaucoup de détails. Quelles sont ces valeurs séparées par des deux points?
Chamath
Le commentaire a un espace limité, je vais donc éditer la réponse au commentaire dans la réponse complète.
avril
C'est informatif. Ce sera formidable si vous pouvez expliquer comment colorchannelmixer est associé à la teinte, la saturation, le contraste et la luminosité?
Chamath
Le filtre colorchannelmixer fonctionne sur un espace colorimétrique RGBa, mais n'impose pas cet espace colorimétrique sur le format de pixel du flux. Du point de vue pratique, cela ne vous limite pas en termes de capacité à chaîner des filtres supplémentaires opérant sur d'autres espaces colorimétriques. Le côté théorique des espaces colorimétriques est plutôt large. Si vous voulez y plonger, je vous conseillerais de commencer par lire cet article de Wikipedia: en.wikipedia.org/wiki/Color_space
avnr
0

Enfin créé les effets en chaînant colorchannelmixeret en eqfiltrant. Selon les effets mentionnés ici , j'ai appliqué l' sepiaeffet à l'aide d'un colorchannelmixerfiltre et le reste des propriétés a été ajusté à l'aide d'un eqfiltre.

Pour l’effet sépia, vous pouvez utiliser la matrice sépia en remplaçant amountpar sepia value. Toutes les autres propriétés peuvent être appliquées directement sans effectuer de calcul, sauf la valeur de luminosité. J'ai substitué la valeur de luminosité avec,

(luminosité - contraste) / 20

ce qui a entraîné une sortie plus probable. Quelqu'un peut corriger cela car ce n'est pas le calcul exact. Vous trouverez ci-dessous la commande FFmpeg pour l'effet "Willow" après avoir effectué ces calculs.

ffmpeg -i input_image -filter_complex "
[0:v]colorchannelmixer=0.98786:0.01538:0.00378:0.0:0.00698:0.99372:0.00336:0.0:0.00544:0.01068:0.98262:0.0[colorchannelmixed];
[colorchannelmixed]eq=0.85:0.0175:0.02:1.0:1.0:1.0:1.0:1.0[color_effect]" -map [color_effect] -c:v png output_image

J'espère que cela aidera quelqu'un d'autre. À votre santé!

Chamath
la source