La fonction du filtre est principalement de traiter les données audio et vidéo d'origine pour obtenir divers effets. Comme la superposition de filigranes, le retournement et le zoom de vidéos, etc.
La figure suivante montre le processus de transcodage normal, le filtre est au milieu du décodage et du codage, et la ligne pointillée indique qu'il est facultatif.
Utilisez la commande pour afficher les filtres pris en charge par ffmpeg
ffmpeg -filtres
Afficher les paramètres détaillés d'un filtre
ffmpeg -h filter=pad
La figure ci-dessus montre la fonction et les paramètres requis du filtre pad.
Les filtres dans ffmpeg peuvent être divisés en :
- sortie du filtre source uniquement
- filtre audio filtre audio
- filtre vidéo filtre vidéo
- filtre multimédia filtre complexe
- entrée du filtre de dissipation uniquement
Deux filtres spéciaux doivent être mentionnés ici : buffer et buffersink .
(1) Tampon : le tampon de filtre représente la source dans le graphique de filtre, et les données d'origine sont entrées dans ce nœud de filtre. En appelant la fonction fournie par le filtre (telle que av_buffersrc_add_frame), la trame à filtrer peut être transmise au processus de filtrage. Lors de la création de l'instance de filtre, vous devez fournir certains paramètres nécessaires concernant le format de l'image d'entrée (tels que : time_base, largeur et hauteur de l'image, format de pixel de l'image, etc.).
(2) buffersink : un filtre spécial, le filtre buffersink représente le nœud de sortie dans le graphe de filtre, et les données traitées sont sorties de ce nœud de filtre. En appelant la fonction fournie par le filtre (telle que av_buffersink_get_frame), la trame après avoir été filtrée par le processus de filtrage peut être fournie.
À l'exception des filtres de source et de puits, tous les autres filtres ont au moins une entrée et au moins une sortie.
Il peut également être simplement divisé en filtres simples et en filtres complexes.
Filtre simple : une seule entrée et une seule sortie, utilisez -vf (filtre vidéo), -af (filtre audio) sur la ligne de commande
Filtre complexe : avec plusieurs entrées et sorties, utilisez -lavfi ou -filter_complex sur la ligne de commande
Dans la figure ci-dessous, un exemple officiel de filtergrpah est donné :
Dans ce graphique de filtres, nous pouvons voir qu'en utilisant 4 filtres
1. Utilisez le filtre divisé pour copier le flux d'entrée dans deux sorties de flux, l'une appelée main et l'autre tmp
2. Utilisez le filtre de recadrage pour recadrer le flux tmp
3. Utilisez vflip pour retourner verticalement le flux tmp
4. Utilisez la superposition pour superposer le flux tmp sur le flux principal
Il peut être exprimé à l'aide de la ligne de commande comme suit
ffmpeg -i INPUT -vf 'split [main][tmp] ; [tmp] crop=iw:ih/2:0:0,vflip [flip] ; [main][flip] superposition=0:H/2' SORTIE
Les filtres du même chemin sont séparés par des virgules (',') et les filtres de chemins différents sont séparés par des points-virgules (';').
Syntaxe du filtre
Syntaxe du filtre
nom_filtre=nom_param1=valeur_param1:nom_param2=valeur_param2
filter_name : est le nom du filtre, doit avoir ; ses paramètres sont facultatifs, séparés par " :" ou "+", peuvent avoir des noms de paramètres ou non ;
Par exemple:
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[ v]' v.avi
Ce filtre qui extrait les composants Y, U et V de la vidéo a trois sorties, qui sont [y][u][v]. Après l'extraction, enregistrez différentes sorties dans différents fichiers
Un filtre sans entrée audio ou vidéo est appelé filtre source
Un filtre sans sortie audio et vidéo est appelé un filtre récepteur
Syntaxe de la chaîne de filtres
filtre1, filtre2,....
C'est une combinaison de plusieurs filtres, séparés par des virgules ; et chaque filtre est l'entrée et la sortie du filtre précédent ;
ffmpeg -i audio.aac -filter_complex "aresample=async=16000,adelay=316397,volume=1.0" -acodec libfdk_aac -y output.mp4
Trois filtres sont ici utilisés, respectivement sample, adelay, volume, pour former une chaîne de filtres ;
Grammaire du filtergraph
chaîne de filtres1;chaîne de filtres2;...
C'est une combinaison de plusieurs chaînes de filtres, séparées par un point-virgule ";",
ffmpeg -i INPUT -filter_complex "split [main][tmp] ; [tmp] crop=iw:ih/2:0:0, vflip [flip] ; [main][flip] overlay=0:H/2" SORTIE
Trois chaînes de filtres sont utilisées ici, à savoir :
split [main][tmp] ; // il n'a qu'un seul filtre, c'est-à-dire qu'il est divisé ; il a une entrée par défaut, c'est-à-dire la trame décodée de INPUT ;
Il y a deux sorties, identifiées par [main], [tmp] ;
[tmp] crop=iw:ih/2:0:0, vflip [flip] // Il se compose de deux filtres, à savoir crop et vflip ; une entrée [tmp], une sortie [flip] ;
[main][flip] overlay=0:H/2 // Il se compose d'un filtre, à savoir overlay, avec deux entrées, à savoir [main][flip], une sortie par défaut ;
filtre commun
- scale : mise à l'échelle de la vidéo/image
- superposition : superposition de vidéo/image
- recadrage : recadrage vidéo/image
- rogner : intercepter des clips vidéo
- rotation : faites pivoter la vidéo à n'importe quel angle
- film : charger des vidéos et des images tierces
- yadif : désentrelacement
- pad : rembourrage vidéo
- drawtext : ajouter du texte