⚠️ Ceci est un site de traduction non officiel, sans lien avec le projet FFmpeg. Pour des informations faisant autorité, consultez la page originale (https://ffmpeg.org/ffmpeg.html).

Documentation de ffmpeg

1 Synopsis

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

2 Description

ffmpeg est un convertisseur multimédia universel. Il peut lire une grande variété d'entrées - y compris des périphériques de capture ou d'enregistrement en direct -, les filtrer et les transcoder vers une multitude de formats de sortie.

ffmpeg lit un nombre arbitraire d'entrées (qui peuvent être des fichiers ordinaires, des tubes, des flux réseau, des périphériques de capture, etc.), spécifiées par l'option -i, et écrit vers un nombre arbitraire de sorties, spécifiées par une simple URL de sortie. Tout élément trouvé sur la ligne de commande qui ne peut pas être interprété comme une option est considéré comme une URL de sortie.

Chaque entrée ou sortie peut, en principe, contenir un nombre quelconque de flux élémentaires de types différents (vidéo/audio/sous-titre/pièce jointe/données), même si le nombre et/ou les types de flux autorisés peuvent être limités par le format de container. Le choix des flux de chaque entrée qui iront vers chaque sortie se fait soit automatiquement, soit avec l'option -map (voir le chapitre Sélection de flux).

Pour désigner les entrées ou les sorties dans les options, vous devez utiliser leur indice (à partir de 0). Par exemple, la première entrée est 0, la seconde 1, etc. De même, les flux à l'intérieur d'une entrée ou d'une sortie sont désignés par leur indice. Par exemple, 2:3 désigne le quatrième flux de la troisième entrée ou sortie. Voir également le chapitre Spécificateurs de flux.

En règle générale, les options s'appliquent au fichier suivant spécifié. L'ordre est donc important, et une même option peut apparaître plusieurs fois sur la ligne de commande : chaque occurrence s'applique alors au fichier d'entrée ou de sortie suivant. Les options globales (par exemple le niveau de verbosité) font exception à cette règle et doivent être spécifiées en premier.

Ne mélangez pas les fichiers d'entrée et de sortie - spécifiez d'abord tous les fichiers d'entrée, puis tous les fichiers de sortie. Ne mélangez pas non plus les options appartenant à des fichiers différents. Toutes les options s'appliquent UNIQUEMENT au fichier d'entrée ou de sortie suivant et sont réinitialisées entre les fichiers.

Voici quelques exemples simples.

  • Convertir un fichier multimédia d'entrée vers un format différent, en réencodant les flux multimédias :

    ffmpeg -i input.avi output.mp4
    
  • Définir le débit binaire vidéo du fichier de sortie à 64 kbit/s :

    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
    
  • Forcer la fréquence d'images du fichier de sortie à 24 fps :

    ffmpeg -i input.avi -r 24 output.mp4
    
  • Forcer la fréquence d'images du fichier d'entrée (valable uniquement pour les formats bruts) à 1 fps et la fréquence d'images du fichier de sortie à 24 fps :

    ffmpeg -r 1 -i input.m2v -r 24 output.mp4
    

L'option de format peut être nécessaire pour les fichiers d'entrée bruts.

3 Description détaillée

ffmpeg construit un pipeline de transcodage à partir des composants énumérés ci-dessous. Le fonctionnement du programme consiste alors en des blocs de données d'entrée circulant depuis les sources, à travers les tubes, vers les puits, tout en étant transformés par les composants rencontrés en chemin.

Les types de composants suivants sont disponibles :

  • Les Demuxers (abréviation de "démultiplexeurs") lisent une source d'entrée afin d'en extraire
    • les propriétés globales telles que les métadonnées ou les chapitres ;
    • la liste des flux élémentaires d'entrée et leurs propriétés

Une instance de demuxer est créée pour chaque option -i, et envoie des paquets encodés aux decoders ou aux muxers.

Dans d'autres ouvrages, les demuxers sont parfois appelés splitters, car leur fonction principale est de scinder un fichier en flux élémentaires (même si certains fichiers ne contiennent qu'un seul flux élémentaire).

Une représentation schématique d'un demuxer ressemble à ceci :

┌──────────┬───────────────────────┐
│ demuxer  │                       │ packets for stream 0
╞══════════╡ elementary stream 0   ├──────────────────────►
│          │                       │
│  global  ├───────────────────────┤
│properties│                       │ packets for stream 1
│   and    │ elementary stream 1   ├──────────────────────►
│ metadata │                       │
│          ├───────────────────────┤
│          │                       │
│          │     ...........       │
│          │                       │
│          ├───────────────────────┤
│          │                       │ packets for stream N
│          │ elementary stream N   ├──────────────────────►
│          │                       │
└──────────┴───────────────────────┘
     ▲
     │
     │ read from file, network stream,
     │     grabbing device, etc.
     │
  • Les Decoders reçoivent des paquets encodés (compressés) d'un flux élémentaire audio, vidéo ou sous-titre, et les décodent en images brutes (des tableaux de pixels pour la vidéo, du PCM pour l'audio). Un decoder est généralement associé à un flux élémentaire d'un demuxer (et reçoit son entrée de celui-ci), mais il peut parfois aussi exister seul (voir Decoders de bouclage).

Une représentation schématique d'un decoder ressemble à ceci :

    ┌─────────┐
     packets  │         │ raw frames
    ─────────►│ decoder ├────────────►
              │         │
              └─────────┘
  • Les Filtergraphs traitent et transforment des images audio ou vidéo brutes. Un filtergraph se compose d'un ou plusieurs filtres individuels reliés en graphe. Il existe deux types de filtergraphs - simples et complexes -, configurés respectivement avec les options -filter et -filter_complex.

Un filtergraph simple est associé à un flux élémentaire de sortie ; il reçoit l'entrée à filtrer d'un decoder et envoie la sortie filtrée à l'encoder de ce flux de sortie.

Un filtergraph vidéo simple qui effectue un désentrelacement (à l'aide du désentrelaceur yadif) suivi d'un redimensionnement (à l'aide du filtre scale) peut ressembler à ceci :

    ┌────────────────────────┐
                 │  simple filtergraph    │
     frames from ╞════════════════════════╡ frames for
     a decoder   │  ┌───────┐  ┌───────┐  │ an encoder
    ────────────►├─►│ yadif ├─►│ scale ├─►│────────────►
                 │  └───────┘  └───────┘  │
                 └────────────────────────┘

Un filtergraph complexe est autonome et n'est associé à aucun flux particulier. Il peut avoir plusieurs entrées (ou aucune), potentiellement de types différents (audio ou vidéo), chacune recevant des données soit d'un decoder, soit de la sortie d'un autre filtergraph complexe. Il possède également une ou plusieurs sorties qui alimentent soit un encoder, soit l'entrée d'un autre filtergraph complexe.

Le schéma d'exemple suivant représente un filtergraph complexe avec 3 entrées et 2 sorties (toutes vidéo) :

    ┌─────────────────────────────────────────────────┐
              │               complex filtergraph               │
              ╞═════════════════════════════════════════════════╡
     frames   ├───────┐  ┌─────────┐      ┌─────────┐  ┌────────┤ frames
    ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────►
              ├───────┘  │         │      │         │  └────────┤
     frames   ├───────┐╭►│         │    ╭►│         │           │
    ─────────►│input 1├╯ └─────────┘    │ └─────────┘           │
              ├───────┘                 │                       │
     frames   ├───────┐ ┌─────┐ ┌─────┬─╯              ┌────────┤ frames
    ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────►
              ├───────┘ └─────┘ └─────┘                └────────┤
              └─────────────────────────────────────────────────┘

Les images de la seconde entrée sont superposées à celles de la première. Les images de la troisième entrée sont redimensionnées, puis dupliquées en deux flux identiques. L'un d'eux est superposé à la combinaison des deux premières entrées, le résultat étant exposé comme première sortie du filtergraph. L'autre copie devient la seconde sortie du filtergraph.

  • Les Encoders reçoivent des images audio, vidéo ou sous-titre brutes et les encodent en paquets encodés. Le processus d'encodage (compression) est généralement avec perte - il dégrade la qualité du flux pour réduire la taille de la sortie ; certains encoders sont sans perte, mais au prix d'une taille de sortie bien plus élevée. Un encoder vidéo ou audio reçoit son entrée de la sortie d'un filtergraph, tandis que les encoders de sous-titres reçoivent leur entrée d'un decoder (le filtrage des sous-titres n'étant pas encore pris en charge). Chaque encoder est associé au flux élémentaire de sortie d'un muxer et lui envoie sa sortie.

Une représentation schématique d'un encoder ressemble à ceci :

    ┌─────────┐
     raw frames  │         │ packets
    ────────────►│ encoder ├─────────►
                 │         │
                 └─────────┘
  • Les Muxers (abréviation de "multiplexeurs") reçoivent, pour leurs flux élémentaires, des paquets encodés provenant des encoders (chemin de transcodage) ou directement des demuxers (chemin de copie de flux), les entrelacent (lorsqu'il y a plus d'un flux élémentaire), puis écrivent les octets résultants dans le fichier de sortie (ou un tube, un flux réseau, etc.).

Une représentation schématique d'un muxer ressemble à ceci :

    ┌──────────────────────┬───────────┐
     packets for stream 0  │                      │   muxer   │
    ──────────────────────►│  elementary stream 0 ╞═══════════╡
                           │                      │           │
                           ├──────────────────────┤  global   │
     packets for stream 1  │                      │properties │
    ──────────────────────►│  elementary stream 1 │   and     │
                           │                      │ metadata  │
                           ├──────────────────────┤           │
                           │                      │           │
                           │     ...........      │           │
                           │                      │           │
                           ├──────────────────────┤           │
     packets for stream N  │                      │           │
    ──────────────────────►│  elementary stream N │           │
                           │                      │           │
                           └──────────────────────┴─────┬─────┘
                                                        │
                         write to file, network stream, │
                             grabbing device, etc.      │
                                                        │
                                                        ▼

3.1 Copie de flux

Le pipeline le plus simple dans ffmpeg est la copie de flux mono-flux, c'est-à-dire la copie des paquets d'un flux élémentaire d'entrée sans les décoder, les filtrer ni les encoder. Par exemple, considérons un fichier d'entrée nommé INPUT.mkv comportant 3 flux élémentaires, dont on prend le second pour l'écrire dans le fichier OUTPUT.mp4. Une représentation schématique d'un tel pipeline ressemble à ceci :

┌──────────┬─────────────────────┐
│ demuxer  │                     │ unused
╞══════════╡ elementary stream 0 ├────────╳
│          │                     │
│INPUT.mkv ├─────────────────────┤          ┌──────────────────────┬───────────┐
│          │                     │ packets  │                      │   muxer   │
│          │ elementary stream 1 ├─────────►│  elementary stream 0 ╞═══════════╡
│          │                     │          │                      │OUTPUT.mp4 │
│          ├─────────────────────┤          └──────────────────────┴───────────┘
│          │                     │ unused
│          │ elementary stream 2 ├────────╳
│          │                     │
└──────────┴─────────────────────┘

Le pipeline ci-dessus peut être construit avec la ligne de commande suivante :

ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4

Dans cette ligne de commande

  • il y a une seule entrée, INPUT.mkv ;
  • il n'y a aucune option d'entrée pour cette entrée ;
  • il y a une seule sortie, OUTPUT.mp4 ;
  • il y a deux options de sortie pour cette sortie :
    • -map 0:1 sélectionne le flux d'entrée à utiliser - à partir de l'entrée d'indice 0 (c'est-à-dire la première), le flux d'indice 1 (c'est-à-dire le second) ;
    • -c copy sélectionne l'encoder copy, c'est-à-dire une copie de flux sans décodage ni encodage.

La copie de flux est utile pour modifier le nombre de flux élémentaires, le format de container, ou pour modifier les métadonnées au niveau du container. Comme il n'y a ni décodage ni encodage, elle est très rapide et n'entraîne aucune perte de qualité. Elle peut néanmoins échouer dans certains cas, pour diverses raisons (par exemple lorsque certaines informations requises par le container cible ne sont pas disponibles dans la source). L'application de filtres est bien sûr également impossible, puisque les filtres opèrent sur des images décodées.

Des scénarios de copie de flux plus complexes peuvent être construits - par exemple en combinant les flux de deux fichiers d'entrée en une seule sortie :

┌──────────┬────────────────────┐         ┌────────────────────┬───────────┐
│ demuxer 0│                    │ packets │                    │   muxer   │
╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡
│INPUT0.mkv│                    │         │                    │OUTPUT.mp4 │
└──────────┴────────────────────┘         ├────────────────────┤           │
┌──────────┬────────────────────┐         │                    │           │
│ demuxer 1│                    │ packets │elementary stream 1 │           │
╞══════════╡elementary stream 0 ├────────►│                    │           │
│INPUT1.aac│                    │         └────────────────────┴───────────┘
└──────────┴────────────────────┘

que l'on peut construire avec la ligne de commande

ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4

L'option de sortie -map est utilisée ici deux fois, créant deux flux dans le fichier de sortie - l'un alimenté par la première entrée, l'autre par la seconde. L'unique occurrence de l'option -c sélectionne la copie de flux pour ces deux flux. Vous pourriez également utiliser plusieurs occurrences de cette option combinées à des spécificateurs de flux pour appliquer des valeurs différentes à chaque flux, comme le montreront les sections suivantes.

Un scénario inverse consiste à répartir plusieurs flux d'une seule entrée vers plusieurs sorties :

┌──────────┬─────────────────────┐          ┌───────────────────┬───────────┐
│ demuxer  │                     │ packets  │                   │ muxer 0   │
╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡
│          │                     │          │                   │OUTPUT0.mp4│
│INPUT.mkv ├─────────────────────┤          └───────────────────┴───────────┘
│          │                     │ packets  ┌───────────────────┬───────────┐
│          │ elementary stream 1 ├─────────►│                   │ muxer 1   │
│          │                     │          │elementary stream 0╞═══════════╡
└──────────┴─────────────────────┘          │                   │OUTPUT1.mp4│
                                            └───────────────────┴───────────┘

construit avec

ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4

Remarquez qu'une instance distincte de l'option -c est nécessaire pour chaque fichier de sortie, même si leurs valeurs sont identiques. C'est parce que les options non globales (qui constituent la majorité d'entre elles) ne s'appliquent que dans le contexte du fichier devant lequel elles sont placées.

Ces exemples peuvent bien sûr être généralisés davantage vers des réaffectations arbitraires d'un nombre quelconque d'entrées vers un nombre quelconque de sorties.

3.2 Transcodage

Le transcodage est le processus consistant à décoder un flux puis à l'encoder à nouveau. Comme l'encodage tend à être coûteux en calcul et dégrade dans la plupart des cas la qualité du flux (c'est-à-dire qu'il est avec perte), vous ne devriez transcoder que lorsque c'est nécessaire, et effectuer une copie de flux dans les autres cas. Les raisons habituelles de transcoder sont :

  • appliquer des filtres - par exemple redimensionner, désentrelacer ou superposer de la vidéo ; rééchantillonner ou mixer de l'audio ;
  • vouloir envoyer le flux vers quelque chose qui ne peut pas décoder le codec d'origine.

Notez que ffmpeg transcode tous les flux audio, vidéo et sous-titre à moins que vous ne spécifiiez -c copy pour eux.

Considérons un exemple de pipeline qui lit un fichier d'entrée avec un flux audio et un flux vidéo, transcode la vidéo et copie l'audio dans un seul fichier de sortie. Cela peut être représenté schématiquement comme suit

┌──────────┬─────────────────────┐
│ demuxer  │                     │       audio packets
╞══════════╡ stream 0 (audio)    ├─────────────────────────────────────╮
│          │                     │                                     │
│INPUT.mkv ├─────────────────────┤ video    ┌─────────┐     raw        │
│          │                     │ packets  │  video  │ video frames   │
│          │ stream 1 (video)    ├─────────►│ decoder ├──────────────╮ │
│          │                     │          │         │              │ │
└──────────┴─────────────────────┘          └─────────┘              │ │
                                                                     ▼ ▼
                                                                     │ │
┌──────────┬─────────────────────┐ video    ┌─────────┐              │ │
│ muxer    │                     │ packets  │  video  │              │ │
╞══════════╡ stream 0 (video)    │◄─────────┤ encoder ├──────────────╯ │
│          │                     │          │(libx264)│                │
│OUTPUT.mp4├─────────────────────┤          └─────────┘                │
│          │                     │                                     │
│          │ stream 1 (audio)    │◄────────────────────────────────────╯
│          │                     │
└──────────┴─────────────────────┘

et mis en œuvre avec la ligne de commande suivante :

ffmpeg -i INPUT.mkv -map 0:v -map 0:a -c:v libx264 -c:a copy OUTPUT.mp4

Remarquez l'utilisation des spécificateurs de flux :v et :a pour sélectionner les flux d'entrée et appliquer des valeurs différentes de l'option -c ; voir la section Spécificateurs de flux pour plus de détails.

3.3 Filtrage

Lors du transcodage, les flux audio et vidéo peuvent être filtrés avant l'encodage, avec un filtergraph simple ou complexe.

3.3.1 Filtergraphs simples

Les filtergraphs simples sont ceux qui ont exactement une entrée et une sortie, toutes deux de même type (audio ou vidéo). Ils se configurent avec l'option -filter par flux (avec les alias -vf et -af pour respectivement -filter:v (vidéo) et -filter:a (audio)). Notez que les filtergraphs simples sont liés à leur flux de sortie ; ainsi, par exemple, si vous avez plusieurs flux audio, -af créera un filtergraph distinct pour chacun d'eux.

En reprenant l'exemple de transcodage ci-dessus et en y ajoutant du filtrage (l'audio étant omis pour plus de clarté), on obtient ceci :

┌──────────┬───────────────┐
│ demuxer  │               │          ┌─────────┐
╞══════════╡ video stream  │ packets  │  video  │ frames
│INPUT.mkv │               ├─────────►│ decoder ├─────►───╮
│          │               │          └─────────┘         │
└──────────┴───────────────┘                              │
                                  ╭───────────◄───────────╯
                                  │   ┌────────────────────────┐
                                  │   │  simple filtergraph    │
                                  │   ╞════════════════════════╡
                                  │   │  ┌───────┐  ┌───────┐  │
                                  ╰──►├─►│ yadif ├─►│ scale ├─►├╮
                                      │  └───────┘  └───────┘  ││
                                      └────────────────────────┘│
                                                                │
                                                                │
┌──────────┬───────────────┐ video    ┌─────────┐               │
│ muxer    │               │ packets  │  video  │               │
╞══════════╡ video stream  │◄─────────┤ encoder ├───────◄───────╯
│OUTPUT.mp4│               │          │         │
│          │               │          └─────────┘
└──────────┴───────────────┘

3.3.2 Filtergraphs complexes

Les filtergraphs complexes sont ceux qui ne peuvent pas être décrits comme une simple chaîne de traitement linéaire appliquée à un flux. C'est le cas, par exemple, lorsque le graphe a plusieurs entrées et/ou sorties, ou lorsque le type du flux de sortie diffère de celui de l'entrée. Les filtergraphs complexes se configurent avec l'option -filter_complex. Notez que cette option est globale, car un filtergraph complexe, de par sa nature, ne peut pas être associé sans ambiguïté à un flux ou un fichier unique. Chaque occurrence de -filter_complex crée un nouveau filtergraph complexe, et il peut y en avoir un nombre quelconque.

Un exemple trivial de filtergraph complexe est le filtre overlay, qui a deux entrées vidéo et une sortie vidéo, et superpose une vidéo sur l'autre. Son équivalent audio est le filtre amix.

3.4 Decoders de bouclage

Bien que les decoders soient normalement associés à des flux de demuxer, il est également possible de créer des decoders "de bouclage" qui décodent la sortie d'un encoder et permettent de la réinjecter dans des filtergraphs complexes. Cela se fait avec la directive -dec, qui prend en paramètre l'indice du flux de sortie à décoder. Chaque directive de ce type crée un nouveau decoder de bouclage, indexé par des entiers successifs à partir de zéro. Ces indices doivent ensuite être utilisés pour désigner les decoders de bouclage dans les étiquettes de liaison des filtergraphs complexes, comme décrit dans la documentation de -filter_complex.

Les AVOptions de décodage peuvent être transmises aux decoders de bouclage en les plaçant avant -dec, de façon analogue aux options d'entrée/sortie.

Prenons l'exemple suivant :

ffmpeg -i INPUT                                        \
  -map 0:v:0 -c:v libx264 -crf 45 -f null -            \
  -threads 3 -dec 0:0                                  \
  -filter_complex '[0:v][dec:0]hstack[stack]'          \
  -map '[stack]' -c:v ffv1 OUTPUT

lit une vidéo d'entrée et

  • (ligne 2) l'encode avec libx264 à faible qualité ;
  • (ligne 3) décode ce flux encodé en utilisant 3 threads ;
  • (ligne 4) place la vidéo décodée côte à côte avec la vidéo d'entrée d'origine ;
  • (ligne 5) la vidéo combinée est ensuite encodée sans perte et écrite dans OUTPUT.

Un tel pipeline de transcodage peut être représenté par le diagramme suivant :

┌──────────┬───────────────┐
│ demuxer  │               │   ┌─────────┐            ┌─────────┐    ┌────────────────────┐
╞══════════╡ video stream  │   │  video  │            │  video  │    │ null muxer         │
│   INPUT  │               ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│
│          │               │   └─────────┘  │         │(libx264)│ │  └────────────────────┘
└──────────┴───────────────┘                │         └─────────┘ │
                                 ╭───────◄──╯   ┌─────────┐       │
                                 │              │loopback │       │
                                 │ ╭─────◄──────┤ decoder ├────◄──╯
                                 │ │            └─────────┘
                                 │ │
                                 │ │
                                 │ │  ┌───────────────────┐
                                 │ │  │complex filtergraph│
                                 │ │  ╞═══════════════════╡
                                 │ │  │  ┌─────────────┐  │
                                 ╰─╫─►├─►│   hstack    ├─►├╮
                                   ╰─►├─►│             │  ││
                                      │  └─────────────┘  ││
                                      └───────────────────┘│
                                                           │
┌──────────┬───────────────┐  ┌─────────┐                  │
│ muxer    │               │  │  video  │                  │
╞══════════╡ video stream  │◄─┤ encoder ├───────◄──────────╯
│  OUTPUT  │               │  │ (ffv1)  │
│          │               │  └─────────┘
└──────────┴───────────────┘

4 Sélection de flux

ffmpeg fournit l'option -map pour contrôler manuellement la sélection des flux dans chaque fichier de sortie. Les utilisateurs peuvent omettre -map et laisser ffmpeg effectuer la sélection automatique des flux décrite ci-dessous. Les options -vn / -an / -sn / -dn permettent d'exclure respectivement les flux vidéo, audio, sous-titre et données, qu'ils soient mappés manuellement ou sélectionnés automatiquement, à l'exception des flux issus de filtergraphs complexes.

4.1 Description

Les sous-sections suivantes décrivent les différentes règles impliquées dans la sélection de flux. Les exemples qui suivent ensuite montrent comment ces règles s'appliquent en pratique.

Bien que tous les efforts soient faits pour refléter fidèlement le comportement du programme, FFmpeg est en développement continu et le code a pu changer depuis la rédaction de ce texte.

4.1.1 Sélection automatique de flux

En l'absence d'options map pour un fichier de sortie donné, ffmpeg examine le format de sortie afin de déterminer quel type de flux peut y être inclus, à savoir vidéo, audio et/ou sous-titres. Pour chaque type de flux acceptable, ffmpeg choisit un flux, lorsque c'est possible, parmi toutes les entrées.

Il sélectionne ce flux selon les critères suivants :

  • pour la vidéo, le flux ayant la résolution la plus élevée,
  • pour l'audio, le flux ayant le plus grand nombre de canaux,
  • pour les sous-titres, le premier flux de sous-titres trouvé, avec toutefois une réserve : l'encoder de sous-titres par défaut du format de sortie peut être textuel ou basé sur l'image, et seul un flux de sous-titres du même type sera choisi.

Lorsque plusieurs flux de même type obtiennent le même score, le flux ayant l'indice le plus bas est choisi.

Les flux de données ou de pièces jointes ne sont pas sélectionnés automatiquement et ne peuvent être inclus qu'à l'aide de -map.

4.1.2 Sélection manuelle de flux

Lorsque -map est utilisé, seuls les flux mappés par l'utilisateur sont inclus dans ce fichier de sortie, à une exception près concernant les sorties de filtergraph décrite ci-dessous.

4.1.3 Filtergraphs complexes

S'il existe des flux de sortie de filtergraph complexe dotés de pads sans étiquette, ils sont ajoutés au premier fichier de sortie. Cela entraîne une erreur fatale si le type de flux n'est pas pris en charge par le format de sortie. En l'absence de l'option map, l'inclusion de ces flux entraîne l'omission de la sélection automatique de flux pour leur type. Si des options map sont présentes, ces flux de filtergraph sont inclus en plus des flux mappés.

Les flux de sortie de filtergraph complexe dotés de pads étiquetés doivent être mappés une fois, et une seule.

4.1.4 Gestion des flux

La gestion des flux est indépendante de la sélection de flux, à l'exception des sous-titres décrite ci-dessous. Elle se règle via l'option -codec adressée aux flux d'un fichier de sortie spécifique. En particulier, les options de codec sont appliquées par ffmpeg après le processus de sélection de flux et n'influencent donc pas ce dernier. Si aucune option -codec n'est spécifiée pour un type de flux, ffmpeg sélectionne l'encoder par défaut enregistré par le muxer du fichier de sortie.

Les sous-titres font exception. Si un encoder de sous-titres est spécifié pour un fichier de sortie, le premier flux de sous-titres trouvé, quel que soit son type, texte ou image, est inclus. ffmpeg ne vérifie pas si l'encoder spécifié peut convertir le flux sélectionné, ni si le flux converti est acceptable dans le format de sortie. Cela vaut plus généralement : lorsque l'utilisateur définit un encoder manuellement, le processus de sélection de flux ne peut pas vérifier si le flux encodé pourra être muxé dans le fichier de sortie. Si ce n'est pas le cas, ffmpeg s'interrompt et le traitement de tous les fichiers de sortie échoue.

4.2 Exemples

Les exemples suivants illustrent le comportement, les particularités et les limites des méthodes de sélection de flux de ffmpeg.

Ils supposent les trois fichiers d'entrée suivants.

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels

input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)

input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)

Exemple : sélection automatique de flux

ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

Trois fichiers de sortie sont spécifiés ; pour les deux premiers, aucune option -map n'est définie, donc ffmpeg sélectionnera automatiquement les flux de ces deux fichiers.

out1.mkv est un fichier container Matroska et accepte les flux vidéo, audio et sous-titre, donc ffmpeg va essayer d'en sélectionner un de chaque type.
Pour la vidéo, il sélectionnera le stream 0 de B.mp4, qui a la résolution la plus élevée parmi tous les flux vidéo d'entrée.
Pour l'audio, il sélectionnera le stream 3 de B.mp4, car il a le plus grand nombre de canaux.
Pour les sous-titres, il sélectionnera le stream 2 de B.mp4, qui est le premier flux de sous-titres parmi A.avi et B.mp4.

out2.wav n'accepte que les flux audio, donc seul le stream 3 de B.mp4 est sélectionné.

Pour out3.mov, comme une option -map est définie, aucune sélection automatique de flux n'a lieu. L'option -map 1:a sélectionne tous les flux audio de la seconde entrée B.mp4. Aucun autre flux n'est inclus dans ce fichier de sortie.

Pour les deux premières sorties, tous les flux inclus seront transcodés. Les encoders choisis seront ceux enregistrés par défaut par chaque format de sortie, qui peuvent ne pas correspondre au codec des flux d'entrée sélectionnés.

Pour la troisième sortie, l'option de codec des flux audio a été définie sur copy, donc aucune opération de décodage-filtrage-encodage n'aura lieu, ni ne peut avoir lieu. Les paquets des flux sélectionnés sont transportés depuis le fichier d'entrée et muxés dans le fichier de sortie.

Exemple : sélection automatique des sous-titres

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

Bien que out1.mkv soit un fichier container Matroska qui accepte les flux de sous-titres, seuls un flux vidéo et un flux audio sont sélectionnés. Le flux de sous-titres de C.mkv est basé sur l'image, tandis que l'encoder de sous-titres par défaut du muxer Matroska est textuel ; le transcodage des sous-titres devrait donc échouer, et ce flux n'est par conséquent pas sélectionné. Dans out2.mkv en revanche, un encoder de sous-titres est spécifié dans la commande, si bien que le flux de sous-titres est sélectionné, en plus du flux vidéo. La présence de -an désactive la sélection du flux audio pour out2.mkv.

Exemple : sorties de filtergraph sans étiquette

ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

Un filtergraph est configuré ici à l'aide de l'option -filter_complex et se compose d'un unique filtre vidéo. Le filtre overlay nécessite exactement deux entrées vidéo, mais aucune n'est spécifiée ; les deux premiers flux vidéo disponibles sont donc utilisés, ceux de A.avi et C.mkv. Le pad de sortie du filtre n'a pas d'étiquette et est donc envoyé au premier fichier de sortie out1.mp4. De ce fait, la sélection automatique du flux vidéo est ignorée, alors qu'elle aurait sélectionné le flux de B.mp4. Le flux audio ayant le plus de canaux, à savoir le stream 3 de B.mp4, est choisi automatiquement. Aucun flux de sous-titres n'est choisi en revanche, car le format MP4 n'a aucun encoder de sous-titres par défaut enregistré, et l'utilisateur n'en a pas spécifié non plus.

Le second fichier de sortie, out2.srt, n'accepte que les flux de sous-titres textuels. Ainsi, même si le premier flux de sous-titres disponible appartient à C.mkv, il est basé sur l'image et donc ignoré. Le flux sélectionné, le stream 2 de B.mp4, est le premier flux de sous-titres textuel.

Exemple : sorties de filtergraph étiquetées

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -map '[outv]' -an        out1.mp4 \
                                out2.mkv \
       -map '[outv]' -map 1:a:0 out3.mkv

La commande ci-dessus échoue, car le pad de sortie étiqueté [outv] a été mappé deux fois. Aucun des fichiers de sortie n'est traité.

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -an        out1.mp4 \
                  out2.mkv \
       -map 1:a:0 out3.mkv

Cette commande échoue également, car la sortie du filtre hue porte une étiquette, [outv], qui n'est mappée nulle part.

Il faut modifier la commande comme suit,

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

Le flux vidéo de B.mp4 est envoyé au filtre hue, dont la sortie est clonée une fois à l'aide du filtre split, et les deux sorties sont étiquetées. Une copie de chacune est ensuite mappée vers le premier et le troisième fichier de sortie.

Le filtre overlay, qui nécessite deux entrées vidéo, utilise les deux premiers flux vidéo non encore utilisés. Ce sont les flux de A.avi et C.mkv. La sortie d'overlay n'est pas étiquetée, elle est donc envoyée au premier fichier de sortie out1.mp4, indépendamment de la présence de l'option -map.

Le filtre aresample reçoit le premier flux audio non encore utilisé, celui de A.avi. Comme la sortie de ce filtre n'est pas non plus étiquetée, elle est elle aussi mappée vers le premier fichier de sortie. La présence de -an ne fait que supprimer la sélection automatique ou manuelle des flux audio, pas les sorties envoyées par les filtergraphs. Ces deux flux mappés sont ordonnés avant le flux mappé dans out1.mp4.

Les flux vidéo, audio et sous-titre mappés vers out2.mkv sont entièrement déterminés par la sélection automatique de flux.

out3.mkv se compose de la sortie vidéo clonée du filtre hue et du premier flux audio de B.mp4.

5 Options

Toutes les options numériques, sauf indication contraire, acceptent en entrée une chaîne représentant un nombre, qui peut être suivie de l'un des préfixes d'unité SI, par exemple : ’K’, ’M’ ou ’G’.

Si ’i’ est ajouté au préfixe d'unité SI, le préfixe complet est interprété comme un préfixe d'unité pour les multiples binaires, basés sur des puissances de 1024 plutôt que des puissances de 1000. Ajouter ’B’ au préfixe d'unité SI multiplie la valeur par 8. Cela permet d'utiliser, par exemple, ’KB’, ’MiB’, ’G’ et ’B’ comme suffixes numériques.

Les options qui ne prennent pas d'argument sont des options booléennes et définissent la valeur correspondante à true. Elles peuvent être définies à false en préfixant le nom de l'option par "no". Par exemple, utiliser "-nofoo" définit à false l'option booléenne nommée "foo".

Les options qui prennent des arguments prennent en charge une syntaxe spéciale où l'argument donné sur la ligne de commande est interprété comme le chemin du fichier depuis lequel la valeur réelle de l'argument est chargée. Pour utiliser cette fonctionnalité, ajoutez une barre oblique ’/’ immédiatement avant le nom de l'option (après le tiret initial). Par exemple

ffmpeg -i INPUT -/filter:v filter.script OUTPUT

charge une description de filtergraph depuis le fichier nommé filter.script.

5.1 Spécificateurs de flux

Certaines options s'appliquent par flux, par exemple le débit binaire ou le codec. Les spécificateurs de flux servent à préciser exactement à quel(s) flux une option donnée s'applique.

Un spécificateur de flux est une chaîne généralement ajoutée après le nom de l'option et séparée de celui-ci par un deux-points. Par exemple, -codec:a:1 ac3 contient le spécificateur de flux a:1, qui correspond au second flux audio. Il sélectionne donc le codec ac3 pour le second flux audio.

Un spécificateur de flux peut correspondre à plusieurs flux, auquel cas l'option s'applique à tous. Par exemple, le spécificateur de flux dans -b:a 128k correspond à tous les flux audio.

Un spécificateur de flux vide correspond à tous les flux. Par exemple, -codec copy ou -codec: copy copierait tous les flux sans les réencoder.

Les formes possibles des spécificateurs de flux sont :

stream_index

Correspond au flux ayant cet indice. Par exemple, -threads:1 4 définirait à 4 le nombre de threads pour le second flux. Si stream_index est utilisé comme spécificateur de flux additionnel (voir plus bas), il sélectionne alors le flux numéro stream_index parmi les flux correspondants. La numérotation des flux se base sur l'ordre des flux tel que détecté par libavformat, sauf lorsqu'un spécificateur de groupe de flux ou un ID de programme est également spécifié. Dans ce cas, elle se base sur l'ordre des flux au sein du groupe ou du programme.

stream_type[:additional_stream_specifier]

stream_type est l'un des suivants : ’v’ ou ’V’ pour la vidéo, ’a’ pour l'audio, ’s’ pour les sous-titres, ’d’ pour les données, et ’t’ pour les pièces jointes. ’v’ correspond à tous les flux vidéo, ’V’ ne correspond qu'aux flux vidéo qui ne sont pas des images jointes, des miniatures vidéo ou des pochettes. Si additional_stream_specifier est utilisé, il correspond alors aux flux qui ont à la fois ce type et correspondent à additional_stream_specifier. Sinon, il correspond à tous les flux du type spécifié.

g:group_specifier[:additional_stream_specifier]

Correspond aux flux appartenant au groupe désigné par group_specifier. Si additional_stream_specifier est utilisé, il correspond alors aux flux qui appartiennent à la fois au groupe et correspondent à additional_stream_specifier. group_specifier peut être l'un des suivants :

group_index

Correspond au flux ayant cet indice de groupe.

#group_id ou i:group_id

Correspond au flux ayant cet ID de groupe.

p:program_id[:additional_stream_specifier]

Correspond aux flux appartenant au programme dont l'ID est program_id. Si additional_stream_specifier est utilisé, il correspond alors aux flux qui appartiennent à la fois au programme et correspondent à additional_stream_specifier.

#stream_id ou i:stream_id

Correspond au flux par son ID de flux (par exemple le PID dans un container MPEG-TS).

m:key[:value]

Correspond aux flux dont la balise de métadonnée key a la valeur spécifiée. Si value n'est pas donné, correspond aux flux qui contiennent cette balise avec n'importe quelle valeur. Le caractère deux-points ’:’ dans key ou value doit être échappé par une barre oblique inverse.

disp:dispositions[:additional_stream_specifier]

Correspond aux flux ayant la ou les dispositions données. dispositions est une liste d'une ou plusieurs dispositions (telles qu'affichées par l'option -dispositions) jointes par ’+’.

u

Correspond aux flux ayant une configuration utilisable : le codec doit être défini et les informations essentielles, comme les dimensions vidéo ou la fréquence d'échantillonnage audio, doivent être présentes.

Notez que dans ffmpeg, la correspondance par métadonnées ne fonctionne correctement que pour les fichiers d'entrée.

5.2 Options génériques

Ces options sont partagées entre les outils ff*.

-L, -license

Affiche la licence.

-h, -?, -help, --help [arg]

Affiche l'aide. Un paramètre optionnel peut être spécifié pour afficher l'aide sur un élément particulier. Si aucun argument n'est spécifié, seules les options de base (non avancées) de l'outil sont affichées.

Les valeurs possibles pour arg sont :

long

Affiche les options avancées de l'outil en plus des options de base.

full

Affiche la liste complète des options, y compris les options partagées et privées des encoders, decoders, demuxers, muxers, filtres, etc.

decoder=decoder_name

Affiche des informations détaillées sur le decoder nommé decoder_name. Utilisez l'option -decoders pour obtenir la liste de tous les decoders.

encoder=encoder_name

Affiche des informations détaillées sur l'encoder nommé encoder_name. Utilisez l'option -encoders pour obtenir la liste de tous les encoders.

demuxer=demuxer_name

Affiche des informations détaillées sur le demuxer nommé demuxer_name. Utilisez l'option -formats pour obtenir la liste de tous les demuxers et muxers.

muxer=muxer_name

Affiche des informations détaillées sur le muxer nommé muxer_name. Utilisez l'option -formats pour obtenir la liste de tous les muxers et demuxers.

filter=filter_name

Affiche des informations détaillées sur le filtre nommé filter_name. Utilisez l'option -filters pour obtenir la liste de tous les filtres.

bsf=bitstream_filter_name

Affiche des informations détaillées sur le bitstream filter nommé bitstream_filter_name. Utilisez l'option -bsfs pour obtenir la liste de tous les bitstream filters.

protocol=protocol_name

Affiche des informations détaillées sur le protocole nommé protocol_name. Utilisez l'option -protocols pour obtenir la liste de tous les protocoles.

-version

Affiche la version.

-buildconf

Affiche la configuration de compilation, une option par ligne.

-formats

Affiche les formats disponibles (y compris les périphériques).

-demuxers

Affiche les demuxers disponibles.

-muxers

Affiche les muxers disponibles.

-devices

Affiche les périphériques disponibles.

-codecs

Affiche tous les codecs connus de libavcodec.

Notez que le terme ’codec’ est utilisé dans toute cette documentation comme raccourci pour ce que l'on devrait plus justement appeler un format de bitstream média.

-decoders

Affiche les decoders disponibles.

-encoders

Affiche tous les encoders disponibles.

-bsfs

Affiche les bitstream filters disponibles.

-protocols

Affiche les protocoles disponibles.

-filters

Affiche les filtres libavfilter disponibles.

-pix_fmts

Affiche les pixel formats disponibles.

-sample_fmts

Affiche les sample formats disponibles.

-layouts

Affiche les noms de canaux et les dispositions de canaux standard.

-dispositions

Affiche les dispositions de flux.

-colors

Affiche les noms de couleurs reconnus.

-sources device[,opt1=val1[,opt2=val2]...]

Affiche les sources détectées automatiquement du périphérique d'entrée. Certains périphériques peuvent fournir des noms de sources dépendant du système, qui ne peuvent pas être détectés automatiquement. La liste renvoyée ne peut pas être supposée toujours complète.

ffmpeg -sources pulse,server=192.168.0.4

-sinks device[,opt1=val1[,opt2=val2]...]

Affiche les destinations (sinks) détectées automatiquement du périphérique de sortie. Certains périphériques peuvent fournir des noms de destinations dépendant du système, qui ne peuvent pas être détectés automatiquement. La liste renvoyée ne peut pas être supposée toujours complète.

ffmpeg -sinks pulse,server=192.168.0.4

-loglevel [flags+]loglevel | -v [flags+]loglevel

Définit le niveau de journalisation et les indicateurs utilisés par la bibliothèque.

Le préfixe optionnel flags peut comprendre les valeurs suivantes :

‘repeat’

Indique que la sortie de journal répétée ne doit pas être compressée en une seule ligne, et que la ligne "Last message repeated n times" est omise.

‘level’

Indique que la sortie de journal doit ajouter un préfixe [level] à chaque ligne de message. Cela peut servir d'alternative à la coloration du journal, par exemple lors du déversement du journal dans un fichier.

‘time’

Indique que les lignes de journal doivent être préfixées par des informations d'heure.

‘datetime’

Indique que les lignes de journal doivent être préfixées par des informations de date et d'heure.

Les indicateurs peuvent aussi être utilisés seuls, en ajoutant un préfixe ’+’/’-’ pour activer/désactiver un seul indicateur sans affecter les autres ni changer le loglevel. Lorsque l'on définit à la fois des indicateurs et le loglevel, un séparateur ’+’ est attendu entre la dernière valeur d'indicateur et le loglevel.

loglevel est une chaîne ou un nombre contenant l'une des valeurs suivantes :

‘quiet, -8’

N'affiche absolument rien ; reste silencieux.

‘panic, 0’

N'affiche que les erreurs fatales susceptibles de provoquer un plantage du processus, comme un échec d'assertion. Ceci n'est utilisé pour rien à ce jour.

‘fatal, 8’

N'affiche que les erreurs fatales. Ce sont des erreurs après lesquelles le processus ne peut absolument pas continuer.

‘error, 16’

Affiche toutes les erreurs, y compris celles dont on peut se remettre.

‘warning, 24’

Affiche tous les avertissements et toutes les erreurs. Tout message lié à un événement potentiellement incorrect ou inattendu est affiché.

‘info, 32’

Affiche des messages informatifs pendant le traitement. Ceci s'ajoute aux avertissements et aux erreurs. C'est la valeur par défaut.

‘verbose, 40’

Identique à info, mais plus détaillé.

‘debug, 48’

Affiche tout, y compris les informations de débogage.

‘trace, 56’

Par exemple, pour activer la sortie de journal répétée, ajouter le préfixe level, et définir loglevel à verbose :

ffmpeg -loglevel repeat+level+verbose -i input output

Un autre exemple qui active la sortie de journal répétée sans affecter l'état actuel de l'indicateur de préfixe level ni du loglevel :

ffmpeg [...] -loglevel +repeat

Par défaut, le programme journalise vers stderr. Si le terminal prend en charge la coloration, des couleurs sont utilisées pour signaler les erreurs et les avertissements. La coloration du journal peut être désactivée en définissant la variable d'environnement AV_LOG_FORCE_NOCOLOR, ou forcée en définissant la variable d'environnement AV_LOG_FORCE_COLOR.

-report

Déverse la ligne de commande complète et la sortie du journal dans un fichier nommé program-YYYYMMDD-HHMMSS.log dans le répertoire courant. Ce fichier peut être utile pour les rapports de bug. Cela active également implicitement -loglevel debug.

Définir la variable d'environnement FFREPORT à n'importe quelle valeur a le même effet. Si la valeur est une suite key=value séparée par ’:’, ces options affectent le rapport ; les valeurs d'option doivent être échappées si elles contiennent des caractères spéciaux ou le séparateur d'options ’:’ (voir la section “Quoting and escaping” du manuel ffmpeg-utils).

Les options reconnues sont les suivantes :

file

définit le nom de fichier à utiliser pour le rapport ; %p est remplacé par le nom du programme, %t par un horodatage, %% par un simple %

level

définit le niveau de verbosité du journal à l'aide d'une valeur numérique (voir -loglevel).

Par exemple, pour écrire un rapport dans un fichier nommé ffreport.log avec un niveau de journalisation de 32 (alias du niveau de journalisation info) :

FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

Les erreurs d'analyse de la variable d'environnement ne sont pas fatales et n'apparaissent pas dans le rapport.

-hide_banner

Supprime l'affichage de la bannière.

Tous les outils FFmpeg affichent normalement un avis de copyright, les options de compilation et les versions des bibliothèques. Cette option permet de supprimer cet affichage.

-cpuflags flags (global)

Permet de définir et d'effacer des indicateurs cpu. Cette option est destinée aux tests. Ne l'utilisez pas si vous ne savez pas ce que vous faites.

ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...

Les indicateurs possibles pour cette option sont :

‘x86’

‘mmx’ ‘mmxext’ ‘sse’ ‘sse2’ ‘sse2slow’ ‘sse3’ ‘sse3slow’ ‘ssse3’ ‘atom’ ‘sse4.1’ ‘sse4.2’ ‘avx’ ‘avx2’ ‘xop’ ‘fma3’ ‘fma4’ ‘3dnow’ ‘3dnowext’ ‘bmi1’ ‘bmi2’ ‘cmov’ ‘ARM’

‘armv5te’ ‘armv6’ ‘armv6t2’ ‘vfp’ ‘vfpv3’ ‘neon’ ‘setend’ ‘AArch64’

‘armv8’ ‘vfp’ ‘neon’ ‘PowerPC’

‘altivec’ ‘Specific Processors’

‘pentium2’ ‘pentium3’ ‘pentium4’ ‘k6’ ‘k62’ ‘athlon’ ‘athlonxp’ ‘k8’ -cpucount count (global)

Remplace la détection automatique du nombre de CPU. Cette option est destinée aux tests. Ne l'utilisez pas si vous ne savez pas ce que vous faites.

ffmpeg -cpucount 2

-max_alloc bytes

Définit la limite de taille maximale pour l'allocation d'un bloc sur le tas par la famille de fonctions malloc de ffmpeg. Faites preuve d'une extrême prudence en utilisant cette option. Ne l'utilisez pas si vous ne comprenez pas pleinement les conséquences de son usage. La valeur par défaut est INT_MAX.

5.3 AVOptions

Ces options sont fournies directement par les bibliothèques libavformat, libavdevice et libavcodec. Pour voir la liste des AVOptions disponibles, utilisez l'option -help. Elles sont réparties en deux catégories :

generic

Ces options peuvent être définies pour n'importe quel container, codec ou périphérique. Les options generic sont répertoriées sous les options AVFormatContext pour les containers/périphériques et sous les options AVCodecContext pour les codecs.

private

Ces options sont propres au container, périphérique ou codec donné. Les options private sont répertoriées sous les containers/périphériques/codecs correspondants.

Par exemple, pour écrire un en-tête ID3v2.3 au lieu d'un en-tête ID3v2.4 par défaut dans un fichier MP3, utilisez l'option private id3v2_version du muxer MP3 :

ffmpeg -i input.flac -id3v2_version 3 out.mp3

Toutes les AVOptions de codec sont définies par flux, et il faut donc leur attacher un spécificateur de flux :

ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

Dans l'exemple ci-dessus, un flux audio multicanal est associé deux fois à la sortie. La première instance est encodée avec le codec ac3 et un débit binaire de 640k. La seconde est réduite à 2 canaux (downmix) et encodée avec le codec aac. Pour cette dernière, un débit binaire de 128k est spécifié à l'aide de l'index absolu du flux de sortie.

Remarque : la syntaxe -nooption ne peut pas être utilisée pour les AVOptions booléennes, utilisez -option 0/-option 1.

Remarque : l'ancienne méthode non documentée consistant à préfixer le nom de l'option par v/a/s pour spécifier des AVOptions par flux est désormais obsolète et sera bientôt supprimée.

5.4 Options principales

-f fmt (input/output)

Force le format du fichier d'entrée ou de sortie. Le format est normalement détecté automatiquement pour les fichiers d'entrée et deviné à partir de l'extension du fichier pour les fichiers de sortie ; cette option n'est donc généralement pas nécessaire.

-i url (input)

url du fichier d'entrée

-y (global)

Écrase les fichiers de sortie sans demander de confirmation.

-n (global)

N'écrase pas les fichiers de sortie et quitte immédiatement si un fichier de sortie indiqué existe déjà.

-stream_loop number (input)

Définit le nombre de fois où le flux d'entrée doit être bouclé. Une boucle à 0 signifie aucune boucle, une boucle à -1 signifie une boucle infinie.

-recast_media (global)

Permet de forcer un decoder d'un type de média différent de celui détecté ou désigné par le demuxer. Utile pour décoder des données média multiplexées en tant que flux de données.

-c[:stream_specifier] codec (input/output,per-stream) -codec[:stream_specifier] codec (input/output,per-stream)

Sélectionne un encoder (si utilisé avant un fichier de sortie) ou un decoder (si utilisé avant un fichier d'entrée) pour un ou plusieurs flux. codec est le nom d'un decoder/encoder ou la valeur spéciale copy (sortie uniquement) pour indiquer que le flux ne doit pas être réencodé.

Par exemple

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

encode tous les flux vidéo avec libx264 et copie tous les flux audio.

Pour chaque flux, c'est la dernière option c correspondante qui est appliquée, donc

ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

copie tous les flux sauf la deuxième vidéo, qui est encodée avec libx264, et le 138e flux audio, qui est encodé avec libvorbis.

-t duration (input/output)

Utilisée comme option d'entrée (avant -i), elle limite la durée des données lues depuis le fichier d'entrée.

Utilisée comme option de sortie (avant une url de sortie), elle arrête l'écriture de la sortie une fois que sa durée atteint duration.

duration doit être une spécification de durée, voir (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-to et -t s'excluent mutuellement, et -t est prioritaire.

-to position (input/output)

Arrête l'écriture de la sortie ou la lecture de l'entrée à position. position doit être une spécification de durée, voir (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-to et -t s'excluent mutuellement, et -t est prioritaire.

-fs limit_size (output)

Définit la limite de taille du fichier, exprimée en octets. Aucun bloc d'octets supplémentaire n'est écrit une fois la limite dépassée. La taille du fichier de sortie est légèrement supérieure à la taille demandée.

-ss position (input/output)

Utilisée comme option d'entrée (avant -i), elle se positionne dans ce fichier d'entrée à position. Notez que, dans la plupart des formats, il n'est pas possible de se positionner exactement ; ffmpeg se positionne donc au point de positionnement le plus proche avant position. Lors d'un transcodage, si -accurate_seek est activé (ce qui est le cas par défaut), ce segment supplémentaire entre le point de positionnement et position est décodé puis écarté. Lors d'une copie de flux, ou si -noaccurate_seek est utilisé, il est conservé.

Utilisée comme option de sortie (avant une url de sortie), elle décode l'entrée mais l'écarte jusqu'à ce que les horodatages atteignent position.

position doit être une spécification de durée, voir (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-sseof position (input)

Comme l'option -ss, mais relative à la "fin de fichier". Autrement dit, les valeurs négatives correspondent à un point plus tôt dans le fichier, et 0 correspond à EOF.

-isync input_index (input)

Assigne une entrée comme source de synchronisation.

Cela calcule la différence entre les heures de début de l'entrée cible et de l'entrée de référence, et décale les horodatages du fichier cible de cette différence. Pour obtenir le résultat attendu, les horodatages source des deux entrées doivent provenir de la même source d'horloge. Si copyts est défini, start_at_zero doit également l'être. Si l'une des deux entrées n'a pas d'horodatage de départ, aucun ajustement de synchronisation n'est effectué.

Les valeurs acceptées sont celles qui font référence à un index d'entrée ffmpeg valide. Si la référence de synchronisation est l'index cible lui-même, ou -1, aucun ajustement n'est apporté aux horodatages cibles. Une référence de synchronisation ne peut pas elle-même être synchronisée sur une autre entrée.

La valeur par défaut est -1.

-itsoffset offset (input)

Définit le décalage temporel de l'entrée.

offset doit être une spécification de durée, voir (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

Le décalage est ajouté aux horodatages des fichiers d'entrée. Spécifier un décalage positif signifie que les flux correspondants sont retardés de la durée indiquée dans offset.

-itsscale scale (input,per-stream)

Met à l'échelle les horodatages d'entrée. scale doit être un nombre à virgule flottante.

-timestamp date (output)

Définit l'horodatage d'enregistrement dans le container.

date doit être une spécification de date, voir (ffmpeg-utils)the Date section in the ffmpeg-utils(1) manual.

-metadata[:metadata_specifier] key=value (output,per-metadata)

Définit une paire clé/valeur de métadonnées.

Un metadata_specifier facultatif peut être indiqué pour définir des métadonnées sur des flux, chapitres ou programmes. Voir la documentation de -map_metadata pour plus de détails.

Cette option remplace les métadonnées définies avec -map_metadata. Il est également possible de supprimer des métadonnées en utilisant une valeur vide.

Par exemple, pour définir le titre dans le fichier de sortie :

ffmpeg -i in.avi -metadata title="my title" out.flv

Pour définir la langue du premier flux audio :

ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

-disposition[:stream_specifier] value (output,per-stream)

Définit les indicateurs disposition d'un flux.

Valeur par défaut : par défaut, tous les indicateurs disposition sont copiés depuis le flux d'entrée, sauf si le flux de sortie auquel s'applique cette option est alimenté par un filtergraph complexe - auquel cas aucun indicateur disposition n'est défini par défaut.

value est une suite d'indicateurs disposition séparés par ’+’ ou ’-’. Un préfixe ’+’ ajoute la disposition indiquée, ’-’ la retire. Si le premier indicateur est lui aussi préfixé par ’+’ ou ’-’, la disposition résultante est la valeur par défaut mise à jour par value. Si le premier indicateur n'est pas préfixé, la disposition résultante est value. Il est également possible de réinitialiser la disposition en la définissant à 0.

Si aucune option -disposition n'a été indiquée pour un fichier de sortie, ffmpeg définit automatiquement l'indicateur disposition ’default’ sur le premier flux de chaque type, lorsque le fichier de sortie contient plusieurs flux de ce type et qu'aucun flux de ce type n'est déjà marqué comme default.

L'option -dispositions répertorie les indicateurs disposition connus.

Par exemple, pour faire du deuxième flux audio le flux default :

ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv

Pour faire du deuxième flux de sous-titres le flux default et retirer la disposition default du premier flux de sous-titres :

ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv

Pour ajouter une pochette/miniature intégrée :

ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

Pour ajouter l'indicateur disposition ’original’ et retirer l'indicateur ’comment’ du premier flux audio sans retirer ses autres indicateurs disposition :

ffmpeg -i in.mkv -c copy -disposition:a:0 +original-comment out.mkv

Pour retirer l'indicateur ’original’ et ajouter l'indicateur disposition ’comment’ au premier flux audio sans retirer ses autres indicateurs disposition :

ffmpeg -i in.mkv -c copy -disposition:a:0 -original+comment out.mkv

Pour ne définir que les indicateurs disposition ’original’ et ’comment’ sur le premier flux audio (et retirer ses autres indicateurs disposition) :

ffmpeg -i in.mkv -c copy -disposition:a:0 original+comment out.mkv

Pour retirer tous les indicateurs disposition du premier flux audio :

ffmpeg -i in.mkv -c copy -disposition:a:0 0 out.mkv

Tous les muxers ne prennent pas en charge les miniatures intégrées, et ceux qui le font ne prennent en charge que quelques formats, comme JPEG ou PNG.

-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)

Crée un programme avec le title et le program_num indiqués, et lui ajoute le ou les flux indiqués.

-stream_group [map=input_file_id=stream_group][type=type:]st=stream[:st=stream][:stg=stream_group][:id=stream_group_id...] (output)

Crée un stream_group du type et du stream_group_id indiqués, ou en associant un groupe d'entrée, et lui ajoute le ou les flux et/ou les stream_group déjà définis indiqués.

type peut être l'une des valeurs suivantes :

iamf_audio_element

Regroupe les flux appartenant au même IAMF Audio Element

Pour ce type de groupe, les options suivantes sont disponibles

audio_element_type

Le type d'Audio Element. Les valeurs suivantes sont prises en charge :

channel

Représentation audio par canaux scalable

scene

Représentation ambisonique

demixing

Informations de démixage utilisées pour reconstruire une représentation audio par canaux scalable. Cette option doit être séparée du reste par une ’,’, et prend les options key=value suivantes

parameter_id

Un identifiant que les blocs de paramètres dans les images peuvent référencer

dmixp_mode

Une combinaison prédéfinie de paramètres de démixage

recon_gain

Informations de recon gain utilisées pour reconstruire une représentation audio par canaux scalable. Cette option doit être séparée du reste par une ’,’, et prend les options key=value suivantes

parameter_id

Un identifiant que les blocs de paramètres dans les images peuvent référencer

layer

Un layer définissant la disposition des canaux dans l'Audio Element. Cette option doit être séparée du reste par une ’,’. Plusieurs entrées séparées par des ’,’ peuvent être définies, et au moins une doit être définie.

Elle prend les options key=value suivantes, séparées par ":"

ch_layout

La disposition des canaux du layer

flags

Les indicateurs suivants sont disponibles :

recon_gain

Indique s'il faut signaler la présence de recon_gain en tant que métadonnées dans les blocs de paramètres au sein des images

output_gain output_gain_flags

Les canaux auxquels s'applique output_gain. Les indicateurs suivants sont disponibles :

FL FR BL BR TFL TFR ambisonics_mode

Le mode ambisonique. Cela n'a aucun effet si audio_element_type est défini à channel.

Les valeurs suivantes sont prises en charge :

mono

Chaque canal ambisonique est codé comme un flux mono individuel dans le groupe

default_w

Valeur de poids par défaut

iamf_mix_presentation

Regroupe les flux appartenant à tous les IAMF Audio Element référencés par la même IAMF Mix Presentation

Pour ce type de groupe, les options suivantes sont disponibles

submix

Un sub-mix au sein de la Mix Presentation. Cette option doit être séparée du reste par une ’,’. Plusieurs entrées séparées par des ’,’ peuvent être définies, et au moins une doit être définie.

Elle prend les options key=value suivantes, séparées par ":"

parameter_id

Un identifiant que les blocs de paramètres dans les images peuvent référencer, pour post-traiter le signal audio mixé afin de générer le signal audio de lecture

parameter_rate

Les champs de durée de fréquence d'échantillonnage dans les blocs de paramètres, dans les images qui référencent ce parameter_id, sont exprimés en

default_mix_gain

Valeur de gain de mixage par défaut à appliquer lorsqu'aucun bloc de paramètres ne partage le même parameter_id pour une image donnée

element

Référence un Audio Element utilisé dans cette Mix Presentation pour générer le signal audio de sortie final destiné à la lecture. Cette option doit être séparée du reste par un ’|’. Plusieurs entrées séparées par des ’|’ peuvent être définies, et au moins une doit être définie.

Elle prend les options key=value suivantes, séparées par ":" :

stg

Le stream_group_id de l'Audio Element auquel ce sub-mix fait référence

parameter_id

Un identifiant que les blocs de paramètres dans les images peuvent référencer, pour appliquer un traitement à l'Audio Element référencé et rendu avant de le sommer avec d'autres Audio Element traités

parameter_rate

Les champs de durée de fréquence d'échantillonnage dans les blocs de paramètres, dans les images qui référencent ce parameter_id, sont exprimés en

default_mix_gain

Valeur de gain de mixage par défaut à appliquer lorsqu'aucun bloc de paramètres ne partage le même parameter_id pour une image donnée

annotations

Une chaîne key=value décrivant l'élément du sub-mix, où "key" est une chaîne conforme à BCP-47 qui indique la langue de la chaîne "value". "key" doit être identique à celle figurant dans les annotations du mix

headphones_rendering_mode

Indique si l'Audio Element d'entrée basé sur les canaux est rendu vers des haut-parleurs stéréo ou spatialisé avec un rendu binaural lors de la lecture au casque. Cela n'a aucun effet si l'audio_element_type de l'Audio Element référencé est défini à channel.

Les valeurs suivantes sont prises en charge :

stereo binaural layout

Indique les layouts de ce sub-mix sur lesquels l'information de loudness a été mesurée. Cette option doit être séparée du reste par un ’|’. Plusieurs entrées séparées par des ’|’ peuvent être définies, et au moins une doit être définie.

Elle prend les options key=value suivantes, séparées par ":" :

layout_type

loudspeakers

Le layout suit la convention de sound system de haut-parleurs d'ITU-2051-3.

binaural

Le layout est binaural.

sound_system

Disposition des canaux correspondant à l'un des Sound Systems A à J d'ITU-2051-3, plus 7.1.2 et 3.1.2 Cela n'a aucun effet si layout_type est défini à binaural.

integrated_loudness

L'information de loudness intégrée du programme, telle que définie dans ITU-1770-4.

digital_peak

La valeur de crête numérique (échantillonnée) du signal audio, telle que définie dans ITU-1770-4.

true_peak

La crête réelle du signal audio, telle que définie dans ITU-1770-4.

dialog_anchored_loudness

L'information de loudness du dialogue, telle que définie dans ITU-1770-4.

album_anchored_loudness

L'information de loudness de l'album, telle que définie dans ITU-1770-4.

annotations

Une chaîne key=value décrivant le mix, où "key" est une chaîne conforme à BCP-47 qui indique la langue de la chaîne "value". "key" doit être identique à celles figurant dans les annotations de tous les éléments du sub-mix

Par exemple, pour créer un fichier IAMF 5.1 scalable à partir de plusieurs fichiers d'entrée WAV

ffmpeg -i front.wav -i back.wav -i center.wav -i lfe.wav
-map 0:0 -map 1:0 -map 2:0 -map 3:0 -c:a opus
-stream_group type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3,
demixing=parameter_id=998,
recon_gain=parameter_id=101,
layer=ch_layout=stereo,
layer=ch_layout=5.1(side),
-stream_group type=iamf_mix_presentation:id=2:stg=0:annotations=en-us=Mix_Presentation,
submix=parameter_id=100:parameter_rate=48000|element=stg=0:parameter_id=100:annotations=en-us=Scalable_Submix|layout=sound_system=stereo|layout=sound_system=5.1(side)
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.iamf

Pour copier les deux groupes de flux (Audio Element et Mix Presentation) d'un fichier IAMF d'entrée à quatre flux vers une sortie mp4

ffmpeg -i input.iamf -c:a copy -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.mp4

-target type (output)

Indique le type de fichier cible (vcd, svcd, dvd, dv, dv50). type peut être préfixé par pal-, ntsc- ou film- pour utiliser le standard correspondant. Toutes les options de format (débit binaire, codecs, tailles de tampon) sont alors définies automatiquement. Il suffit alors de saisir :

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

Vous pouvez néanmoins indiquer des options supplémentaires du moment que vous savez qu'elles n'entrent pas en conflit avec le standard, comme ici :

ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

Les paramètres définis pour chaque cible sont les suivants.

VCD

pal:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x288 -r 25
-codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

ntsc:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 30000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

film:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 24000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

SVCD

pal:
-f svcd -packetsize 2324
-s 480x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

ntsc:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

film:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

DVD

pal:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

ntsc:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

film:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

DV

pal:
-f dv
-s 720x576 -pix_fmt yuv420p -r 25
-ar 48000 -ac 2

ntsc:
-f dv
-s 720x480 -pix_fmt yuv411p -r 30000/1001
-ar 48000 -ac 2

film:
-f dv
-s 720x480 -pix_fmt yuv411p -r 24000/1001
-ar 48000 -ac 2

La cible dv50 est identique à la cible dv, à ceci près que le pixel format défini est yuv422p pour les trois standards.

Toute valeur définie par l'utilisateur pour un paramètre ci-dessus remplace la valeur du preset de la cible. Dans ce cas, la sortie peut ne pas être conforme au standard cible.

-dn (input/output)

Utilisée comme option d'entrée, elle empêche tous les flux de données d'un fichier d'être filtrés ou automatiquement sélectionnés ou associés à une sortie quelconque. Voir l'option -discard pour désactiver les flux individuellement.

Utilisée comme option de sortie, elle désactive l'enregistrement des données, c'est-à-dire la sélection ou l'association automatique de tout flux de données. Pour un contrôle manuel complet, voir l'option -map.

-dframes number (output)

Définit le nombre d'images de données à produire en sortie. C'est un alias obsolète de -frames:d, qu'il convient d'utiliser à la place.

-frames[:stream_specifier] framecount (output,per-stream)

Arrête l'écriture dans le flux après framecount images.

-q[:stream_specifier] q (output,per-stream) -qscale[:stream_specifier] q (output,per-stream)

Utilise une échelle de qualité fixe (VBR). Le sens de q/qscale dépend du codec. Si qscale est utilisé sans spécificateur de flux, il s'applique uniquement au flux vidéo ; cela permet de conserver la compatibilité avec le comportement précédent, car indiquer la même valeur spécifique à un codec pour 2 codecs différents, à savoir audio et vidéo, n'est généralement pas ce qui est souhaité lorsqu'aucun spécificateur de flux n'est utilisé.

-filter[:stream_specifier] filtergraph (output,per-stream)

Crée le filtergraph indiqué par filtergraph et l'utilise pour filtrer le flux.

filtergraph est une description du filtergraph à appliquer au flux ; il doit avoir une seule entrée et une seule sortie, du même type que le flux. Dans le filtergraph, l'entrée est associée à l'étiquette in, et la sortie à l'étiquette out. Voir le manuel ffmpeg-filters pour plus d'informations sur la syntaxe du filtergraph.

Voir l'option -filter_complex si vous voulez créer des filtergraphs à entrées et/ou sorties multiples.

-reinit_filter[:stream_specifier] integer (input,per-stream)

Cette option booléenne détermine si le ou les filtergraphs auxquels ce flux est fourni sont réinitialisés lorsque les paramètres des images d'entrée changent en cours de flux. Cette option est activée par défaut, car la plupart des filtres vidéo et tous les filtres audio ne peuvent pas gérer une déviation des propriétés des images d'entrée. Lors de la réinitialisation, l'état existant du filtre est perdu, comme par exemple la référence de comptage d'images n disponible dans certains filtres. Toute image mise en tampon au moment de la réinitialisation est perdue. Les propriétés dont un changement déclenche une réinitialisation sont, pour la vidéo, la résolution d'image ou le pixel format ; pour l'audio, le sample format, la fréquence d'échantillonnage, le nombre de canaux ou la disposition des canaux.

-drop_changed[:stream_specifier] integer (input,per-stream)

Cette option booléenne détermine si une image dont les paramètres diffèrent en cours de flux est abandonnée plutôt que de provoquer une réinitialisation du filtergraph, ce qui entraînerait une perte de l'état du filtre. Généralement utile pour éviter des paquets corrompus mais néanmoins décodables dans des entrées de diffusion en direct. La valeur par défaut est false.

-filter_threads nb_threads (global)

Définit le nombre de threads utilisés pour traiter un pipeline de filtres. Chaque pipeline crée un pool de threads comportant ce nombre de threads disponibles pour le traitement parallèle. La valeur par défaut est le nombre de CPU disponibles.

-filter_buffered_frames nb_frames (global)

Définit le nombre maximal d'images mises en tampon autorisées dans un filtergraph. En temps normal, un filtergraph ne devrait pas mettre en tampon plus de quelques images, surtout si les images lui sont fournies et en sont lues de façon équilibrée (ce qui est le comportement prévu dans ffmpeg). Cela dit, cette option permet de limiter le nombre total d'images mises en tampon sur l'ensemble des liens d'un filtergraph. Si davantage d'images sont générées, le filtrage est interrompu et une erreur est renvoyée. La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de limite.

-pre[:stream_specifier] preset_name (output,per-stream)

Indique le preset pour le ou les flux correspondants.

-stats (global)

Journalise la progression/les statistiques d'encodage au niveau de journalisation "info" (voir -loglevel). C'est activé par défaut ; pour le désactiver explicitement, vous devez indiquer -nostats.

-stats_period time (global)

Définit la période à laquelle la progression/les statistiques d'encodage sont mises à jour. La valeur par défaut est 0.5 seconde.

-print_graphs (global)

Affiche les détails du graphe d'exécution vers la sortie d'erreur, dans le format défini via -print_graphs_format.

-print_graphs_file filename (global)

Écrit les détails du graphe d'exécution dans le fichier indiqué, dans le format défini via -print_graphs_format.

-print_graphs_format format (global)

Définit le format de sortie (les formats disponibles sont : default, compact, csv, flat, ini, json, xml, mermaid, mermaidhtml) Le format par défaut est json.

-progress url (global)

Envoie des informations de progression exploitables par un programme à url.

Les informations de progression sont écrites périodiquement et à la fin du processus d'encodage. Elles se composent de lignes "key=value". key n'est constitué que de caractères alphanumériques. La dernière key d'une séquence d'informations de progression est toujours "progress", avec la valeur "continue" ou "end".

La période de mise à jour est définie à l'aide de -stats_period.

Par exemple, pour journaliser les informations de progression vers la sortie standard :

ffmpeg -progress pipe:1 -i in.mkv out.mkv

-stdin

Active l'interaction sur l'entrée standard. Activé par défaut, sauf si l'entrée standard est utilisée comme entrée. Pour désactiver explicitement l'interaction, vous devez indiquer -nostdin.

Désactiver l'interaction sur l'entrée standard est utile, par exemple, si ffmpeg se trouve dans le groupe de processus d'arrière-plan. Un résultat à peu près identique peut être obtenu avec ffmpeg ... < /dev/null, mais cela nécessite un shell.

-debug_ts (global)

Affiche les informations d'horodatage/de latence. Désactivé par défaut. Cette option est surtout utile à des fins de test et de débogage ; le format de sortie peut changer d'une version à l'autre, elle ne devrait donc pas être utilisée dans des scripts portables.

Voir aussi l'option -fdebug ts.

-attach filename (output)

Ajoute une pièce jointe au fichier de sortie. Cela est pris en charge par quelques formats comme Matroska, par exemple pour les polices utilisées dans le rendu des sous-titres. Les pièces jointes sont implémentées comme un type de flux particulier ; cette option ajoute donc un nouveau flux au fichier. Il est alors possible d'utiliser des options par flux sur ce flux de la façon habituelle. Les flux de pièce jointe créés avec cette option sont créés après tous les autres flux (c'est-à-dire ceux créés avec -map ou par association automatique).

Notez que pour Matroska, vous devez également définir l'étiquette de métadonnées mimetype :

ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

(en supposant que le flux de pièce jointe est le troisième du fichier de sortie).

-dump_attachment[:stream_specifier] filename (input,per-stream)

Extrait le flux de pièce jointe correspondant dans un fichier nommé filename. Si filename est vide, la valeur de l'étiquette de métadonnées filename est utilisée.

Par exemple, pour extraire la première pièce jointe vers un fichier nommé ’out.ttf’ :

ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

Pour extraire toutes les pièces jointes vers des fichiers déterminés par l'étiquette filename :

ffmpeg -dump_attachment:t "" -i INPUT

Remarque technique : les pièces jointes sont implémentées comme des extradata de codec ; cette option peut donc en réalité être utilisée pour extraire les extradata de n'importe quel flux, pas seulement des pièces jointes.

5.5 Options vidéo

-vframes number (output)

Définit le nombre d'images vidéo à produire en sortie. C'est un alias obsolète de -frames:v, qu'il convient d'utiliser à la place.

-r[:stream_specifier] fps (input/output,per-stream)

Définit la fréquence d'images (valeur en Hz, fraction ou abréviation).

Utilisée comme option d'entrée, elle ignore les horodatages stockés dans le fichier et génère à la place des horodatages en supposant une fréquence d'images constante fps. Ce n'est pas la même chose que l'option -framerate utilisée pour certains formats d'entrée comme image2 ou v4l2 (c'était le cas dans les anciennes versions de FFmpeg). En cas de doute, utilisez -framerate plutôt que l'option d'entrée -r.

Utilisée comme option de sortie :

encodage vidéo

Duplique ou abandonne des images juste avant de les encoder, afin d'obtenir une fréquence d'images de sortie fps constante.

copie de flux vidéo

Indique au muxer que fps est la fréquence d'images du flux. Dans ce cas, aucune donnée n'est abandonnée ni dupliquée. Cela peut produire des fichiers non valides si fps ne correspond pas à la fréquence d'images réelle du flux, telle que déterminée par les horodatages des paquets. Voir aussi le filtre bitstream setts.

-fpsmax[:stream_specifier] fps (output,per-stream)

Définit la fréquence d'images maximale (valeur en Hz, fraction ou abréviation).

Limite la fréquence d'images de sortie lorsque celle-ci est définie automatiquement et dépasse cette valeur. Utile lors d'un traitement par lots ou lorsque la fréquence d'images d'entrée est détectée à tort comme très élevée. Elle ne peut pas être définie en même temps que -r. Elle est ignorée lors d'une copie de flux.

-s[:stream_specifier] size (input/output,per-stream)

Définit la taille des images.

Utilisée comme option d'entrée, il s'agit d'un raccourci pour l'option private video_size, reconnue par certains demuxers pour lesquels la taille des images n'est pas stockée dans le fichier ou est configurable – par exemple les flux vidéo bruts ou les périphériques de capture vidéo.

Utilisée comme option de sortie, elle insère le filtre vidéo scale à la fin du filtergraph correspondant. Veuillez utiliser directement le filtre scale pour l'insérer au début ou à un autre endroit.

Le format est ‘wxh’ (par défaut - identique à la source).

-aspect[:stream_specifier] aspect (output,per-stream)

Définit le rapport d'aspect d'affichage vidéo indiqué par aspect.

aspect peut être une chaîne représentant un nombre à virgule flottante, ou une chaîne de la forme num:den, où num et den sont le numérateur et le dénominateur du rapport d'aspect. Par exemple, "4:3", "16:9", "1.3333" et "1.7777" sont des valeurs d'argument valides.

Utilisée avec -vcodec copy, elle affecte le rapport d'aspect stocké au niveau du container, mais pas celui stocké dans les images encodées, s'il existe.

-display_rotation[:stream_specifier] rotation (input,per-stream)

Définit les métadonnées de rotation vidéo.

rotation est un nombre décimal indiquant l'angle, en degrés, dont la vidéo doit être pivotée dans le sens antihoraire avant d'être affichée.

Cette option remplace les métadonnées de rotation/transformation d'affichage stockées dans le fichier, le cas échéant. Lorsque la vidéo est transcodée (plutôt que copiée) et que -autorotate est activé, la vidéo est pivotée à l'étape de filtrage. Sinon, les métadonnées sont écrites dans le fichier de sortie si le muxer le prend en charge.

Si les options -display_hflip et/ou -display_vflip sont indiquées, elles sont appliquées après la rotation indiquée par cette option.

-display_hflip[:stream_specifier] (input,per-stream)

Définit si l'image doit être retournée horizontalement à l'affichage.

Voir l'option -display_rotation pour plus de détails.

-display_vflip[:stream_specifier] (input,per-stream)

Définit si l'image doit être retournée verticalement à l'affichage.

Voir l'option -display_rotation pour plus de détails.

-mastering_display[:stream_specifier] G(%u,%u)B(%u,%u)R(%u,%u)WP(%u,%u)L(%u,%u) (input,per-stream)

Définit les métadonnées de mastering display vidéo.

G(%u,%u)B(%u,%u)R(%u,%u)WP(%u,%u)L(%u,%u) est une chaîne indiquant les primaires d'affichage X,Y pour les canaux GBR et le point blanc (WP) en unités de 0.00002, ainsi que les valeurs de luminance max-min (L) en unités de 0.0001 candela par mètre carré. Les valeurs sont des entiers non signés représentant le numérateur d'un rationnel dont le dénominateur implicite est 50000 pour GBR et (WP), et 10000 pour (L).

Cette option remplace les métadonnées de mastering display stockées dans le fichier, le cas échéant.

-content_light[:stream_specifier] %u,%u (input,per-stream)

Définit les métadonnées de content light vidéo.

%u,%u est une chaîne indiquant le niveau maximal de content light et le niveau moyen maximal de lumière de l'image.

Cette option remplace les métadonnées de content light stockées dans le fichier, le cas échéant.

-vn (input/output)

Utilisée comme option d'entrée, elle empêche tous les flux vidéo d'un fichier d'être filtrés ou automatiquement sélectionnés ou associés à une sortie quelconque. Voir l'option -discard pour désactiver les flux individuellement.

Utilisée comme option de sortie, elle désactive l'enregistrement vidéo, c'est-à-dire la sélection ou l'association automatique de tout flux vidéo. Pour un contrôle manuel complet, voir l'option -map.

-vcodec codec (output)

Définit le codec vidéo. C'est un alias de -codec:v.

-pass[:stream_specifier] n (output,per-stream)

Sélectionne le numéro de passe (1 ou 2). Cela sert à faire un encodage vidéo en deux passes. Les statistiques de la vidéo sont enregistrées lors de la première passe dans un fichier journal (voir aussi l'option -passlogfile), et lors de la seconde passe, ce fichier journal est utilisé pour générer la vidéo au débit binaire exact demandé. Lors de la passe 1, vous pouvez simplement désactiver l'audio et régler la sortie sur null ; exemples pour Windows et Unix :

ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

-passlogfile[:stream_specifier] prefix (output,per-stream)

Définit le préfixe du nom de fichier journal deux passes à prefix ; le préfixe de nom de fichier par défaut est "ffmpeg2pass". Le nom de fichier complet est PREFIX-N.log, où N est un numéro propre au flux de sortie

-vf filtergraph (output)

Crée le filtergraph indiqué par filtergraph et l'utilise pour filtrer le flux.

C'est un alias de -filter:v, voir l'option -filter.

-autorotate

Pivote automatiquement la vidéo selon les métadonnées du fichier. Activé par défaut, utilisez -noautorotate pour le désactiver.

-autoscale

Met automatiquement à l'échelle la vidéo selon la résolution de la première image. Activé par défaut, utilisez -noautoscale pour le désactiver. Lorsque autoscale est désactivé, il se peut que toutes les images de sortie du graphe de filtres n'aient pas la même résolution, ce qui peut être inadéquat pour certains encoders/muxers. Il est donc déconseillé de le désactiver, sauf si vous savez vraiment ce que vous faites. Désactivez autoscale à vos propres risques.

5.6 Options vidéo avancées

-pix_fmt[:stream_specifier] format (input/output,per-stream)

Définit le pixel format. Utilisez -pix_fmts pour afficher tous les pixel formats pris en charge. Si le pixel format sélectionné ne peut pas être choisi, ffmpeg affiche un avertissement et sélectionne le meilleur pixel format pris en charge par l'encoder. Si pix_fmt est préfixé par +, ffmpeg quitte avec une erreur si le pixel format demandé ne peut pas être choisi, et les conversions automatiques à l'intérieur des filtergraphs sont désactivées. Si pix_fmt est un simple +, ffmpeg sélectionne le même pixel format que l'entrée (ou la sortie du graphe), et les conversions automatiques sont désactivées.

-sws_flags flags (input/output)

Définit les indicateurs par défaut pour la bibliothèque libswscale. Ces indicateurs sont utilisés par les filtres scale insérés automatiquement et ceux des filtergraphs simples, s'ils ne sont pas remplacés dans la définition du filtergraph.

Voir le (ffmpeg-scaler)ffmpeg-scaler manual pour la liste des options du scaler.

-rc_override[:stream_specifier] override (output,per-stream)

Force le contrôle de débit pour des intervalles spécifiques, sous la forme d'une liste "int,int,int" séparée par des barres obliques. Les deux premières valeurs sont les numéros de la première et de la dernière image ; la dernière valeur est le quantizer à utiliser si elle est positive, ou le facteur de qualité si elle est négative.

-vstats

Enregistre les statistiques de codage vidéo dans vstats_HHMMSS.log. Voir la section sur le format de fichier vstats pour la description du format.

-vstats_file file

Enregistre les statistiques de codage vidéo dans file. Voir la section sur le format de fichier vstats pour la description du format.

-vstats_version file

Indique la version du format vstats à utiliser. La valeur par défaut est 2. Voir la section sur le format de fichier vstats pour la description du format.

-vtag fourcc/tag (output)

Force le tag/fourcc vidéo. C'est un alias de -tag:v.

-force_key_frames[:stream_specifier] time[,time...] (output,per-stream) -force_key_frames[:stream_specifier] expr:expr (output,per-stream) -force_key_frames[:stream_specifier] source (output,per-stream) -force_key_frames[:stream_specifier] scd_metadata (output,per-stream)

force_key_frames peut prendre des arguments de la forme suivante :

time[,time...]

Si l'argument se compose d'horodatages, ffmpeg arrondit les temps indiqués à l'horodatage de sortie le plus proche selon la time base de l'encoder, et force un keyframe sur la première image dont l'horodatage est supérieur ou égal à l'horodatage calculé. Notez que si la time base de l'encoder est trop grossière, les keyframes peuvent être forcés sur des images dont l'horodatage est inférieur au temps indiqué. La time base par défaut de l'encoder est l'inverse de la fréquence d'images de sortie, mais elle peut être définie autrement via -enc_time_base.

Si l'un des temps est "chapters[delta]", il est développé en l'heure de début de tous les chapitres du fichier, décalée de delta, exprimé en secondes. Cette option peut être utile pour garantir la présence d'un point de positionnement à une marque de chapitre ou à tout autre endroit indiqué du fichier de sortie.

Par exemple, pour insérer un keyframe à 5 minutes, plus des keyframes 0.1 seconde avant le début de chaque chapitre :

-force_key_frames 0:05:00,chapters-0.1

expr:expr

Si l'argument est préfixé par expr:, la chaîne expr est interprétée comme une expression et est évaluée pour chaque image. Un keyframe est forcé si l'évaluation est non nulle.

L'expression dans expr peut contenir les constantes suivantes :

n

le numéro de l'image en cours de traitement, à partir de 0

n_forced

le nombre d'images forcées

prev_forced_n

le numéro de la précédente image forcée, il vaut NAN si aucun keyframe n'a encore été forcé

prev_forced_t

l'heure de la précédente image forcée, elle vaut NAN si aucun keyframe n'a encore été forcé

t

l'heure de l'image en cours de traitement

Par exemple, pour forcer un keyframe toutes les 5 secondes, vous pouvez indiquer :

-force_key_frames expr:gte(t,n_forced*5)

Pour forcer un keyframe 5 secondes après l'heure du dernier forcé, à partir de la seconde 13 :

-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))

source

Si l'argument est source, ffmpeg force un keyframe si l'image en cours d'encodage est marquée comme keyframe dans sa source. Si cette image source particulière doit être abandonnée, l'image disponible suivante devient un keyframe à la place.

scd_metadata

Si l'argument est scd_metadata, ffmpeg force un keyframe si l'image en cours contient une entrée de métadonnées avec la clé lavfi.scd.time. Ces métadonnées peuvent être ajoutées par des filtres comme scdet et scdet_vulkan. Évitez d'insérer des filtres qui dupliquent des images après scdet, car cela peut entraîner des métadonnées dupliquées pour plusieurs images et une insertion répétée de keyframes.

Notez que forcer trop de keyframes est très néfaste pour les algorithmes de lookahead de certains encoders : utiliser des options fixed-GOP ou similaires serait plus efficace.

-apply_cropping[:stream_specifier] source (input,per-stream)

Rogne automatiquement la vidéo après décodage selon les métadonnées du fichier. La valeur par défaut est all.

none (0)

N'applique aucune métadonnée de rognage.

all (1)

Applique le rognage à la fois au niveau du codec et du container. C'est le mode par défaut.

codec (2)

Applique le rognage au niveau du codec.

container (3)

Applique le rognage au niveau du container.

-copyinkf[:stream_specifier] (output,per-stream)

Lors d'une copie de flux, copie également les images non-keyframe trouvées au début.

-init_hw_device type[=name][:device[,key=value...]]

Initialise un nouveau périphérique matériel de type type nommé name, en utilisant les paramètres de périphérique indiqués. Si aucun name n'est indiqué, il reçoit un nom par défaut de la forme "type%d".

La signification de device et des arguments suivants dépend du type de périphérique :

cuda

device est le numéro du périphérique CUDA.

Les options suivantes sont reconnues :

primary_ctx

Si elle est définie à 1, utilise le contexte de périphérique principal au lieu d'en créer un nouveau.

Exemples :

-init_hw_device cuda:1

Choisit le deuxième périphérique du système.

-init_hw_device cuda:0,primary_ctx=1

Choisit le premier périphérique et utilise le contexte de périphérique principal.

dxva2

device est le numéro de l'adaptateur d'affichage Direct3D 9.

d3d11va

device est le numéro de l'adaptateur d'affichage Direct3D 11. S'il n'est pas indiqué, on tente d'utiliser l'adaptateur d'affichage Direct3D 11 par défaut ou le premier adaptateur d'affichage Direct3D 11 dont le VendorId matériel est indiqué par ‘vendor_id’.

Exemples :

-init_hw_device d3d11va

Crée un périphérique d3d11va sur l'adaptateur d'affichage Direct3D 11 par défaut.

-init_hw_device d3d11va:1

Crée un périphérique d3d11va sur l'adaptateur d'affichage Direct3D 11 indiqué par l'index 1.

-init_hw_device d3d11va:,vendor_id=0x8086

Crée un périphérique d3d11va sur le premier adaptateur d'affichage Direct3D 11 dont le VendorId matériel est 0x8086.

vaapi

device est soit un nom d'affichage X11, soit un DRM render node, soit un index d'adaptateur DirectX. S'il n'est pas indiqué, on tente d'ouvrir l'affichage X11 par défaut ($DISPLAY), puis le premier DRM render node (/dev/dri/renderD128), ou l'adaptateur DirectX par défaut sous Windows.

Les options suivantes sont reconnues :

kernel_driver

Lorsque device n'est pas spécifié, cette option permet de spécifier le nom du pilote noyau associé au périphérique souhaité. Cette option est disponible uniquement lorsque la méthode d'accélération matérielle drm et vaapi sont activées.

vendor_id

Lorsque device et kernel_driver ne sont pas spécifiés, cette option permet de spécifier le vendor id associé au périphérique souhaité. Cette option est disponible uniquement lorsque la méthode d'accélération matérielle drm et vaapi sont activées et que kernel_driver n'est pas spécifié.

Exemples :

-init_hw_device vaapi

Crée un périphérique vaapi sur le périphérique par défaut.

-init_hw_device vaapi:/dev/dri/renderD129

Crée un périphérique vaapi sur le nœud de rendu DRM /dev/dri/renderD129.

-init_hw_device vaapi:1

Crée un périphérique vaapi sur l'adaptateur DirectX 1.

-init_hw_device vaapi:,kernel_driver=i915

Crée un périphérique vaapi sur un périphérique associé au pilote noyau ‘i915’.

-init_hw_device vaapi:,vendor_id=0x8086

Crée un périphérique vaapi sur un périphérique associé au vendor id ‘0x8086’.

vdpau

device est un nom d'affichage X11. Si ce paramètre n'est pas spécifié, ffmpeg tente d'ouvrir l'affichage X11 par défaut ($DISPLAY).

qsv

device sélectionne une valeur parmi ‘MFX_IMPL_*’. Les valeurs autorisées sont :

auto sw hw auto_any hw_any hw2 hw3 hw4

Si ce paramètre n'est pas spécifié, ‘auto_any’ est utilisé. (Notez qu'il peut être plus simple d'obtenir le résultat souhaité pour QSV en créant le sous-périphérique adapté à la plateforme (‘dxva2’, ‘d3d11va’ ou ‘vaapi’), puis en dérivant un périphérique QSV à partir de celui-ci.)

Les options suivantes sont reconnues :

child_device

Spécifie un nœud de rendu DRM sous Linux ou un adaptateur DirectX sous Windows.

child_device_type

Choisit le type de sous-périphérique adapté à la plateforme. Sous Windows, ‘d3d11va’ est utilisé comme type de sous-périphérique par défaut lorsque --enable-libvpl est spécifié à la configuration, et ‘dxva2’ est utilisé comme type par défaut lorsque --enable-libmfx est spécifié à la configuration. Sous Linux, seul ‘vaapi’ peut être utilisé comme type de sous-périphérique.

Exemples :

-init_hw_device qsv:hw,child_device=/dev/dri/renderD129

Crée un périphérique QSV avec ‘MFX_IMPL_HARDWARE’ sur le nœud de rendu DRM /dev/dri/renderD129.

-init_hw_device qsv:hw,child_device=1

Crée un périphérique QSV avec ‘MFX_IMPL_HARDWARE’ sur l'adaptateur DirectX 1.

-init_hw_device qsv:hw,child_device_type=d3d11va

Choisit le sous-périphérique GPU de type ‘d3d11va’ et crée un périphérique QSV avec ‘MFX_IMPL_HARDWARE’.

-init_hw_device qsv:hw,child_device_type=dxva2

Choisit le sous-périphérique GPU de type ‘dxva2’ et crée un périphérique QSV avec ‘MFX_IMPL_HARDWARE’.

-init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va

Crée un périphérique QSV avec ‘MFX_IMPL_HARDWARE’ sur l'adaptateur DirectX 1 avec le type de sous-périphérique ‘d3d11va’.

-init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@ va

Crée un périphérique VAAPI nommé ‘va’ sur /dev/dri/renderD129, puis dérive de ce périphérique ‘va’ un périphérique QSV nommé ‘hw1’.

opencl

device sélectionne la plateforme et le périphérique sous la forme platform_index.device_index.

L'ensemble des périphériques peut aussi être filtré à l'aide de paires clé-valeur, afin de ne trouver que les périphériques correspondant à des chaînes de plateforme ou de périphérique particulières.

Les chaînes utilisables comme filtres sont les suivantes :

platform_profile platform_version platform_name platform_vendor platform_extensions device_name device_vendor driver_version device_version device_profile device_extensions device_type

Les indices et les filtres doivent, ensemble, sélectionner un périphérique de façon unique.

Exemples :

-init_hw_device opencl:0.1

Choisit le deuxième périphérique de la première plateforme.

-init_hw_device opencl:,device_name=Foo9000

Choisit le périphérique dont le nom contient la chaîne Foo9000.

-init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16

Choisit le périphérique GPU de la deuxième plateforme prenant en charge l'extension cl_khr_fp16.

vulkan

Si device est un entier, il sélectionne le périphérique par son index dans une liste de périphériques dépendante du système. Si device est toute autre chaîne, il sélectionne le premier périphérique dont le nom contient cette chaîne comme sous-chaîne.

Les options suivantes sont reconnues :

debug

S'il est réglé sur 1, active la couche de validation, si elle est installée.

linear_images

S'il est réglé sur 1, les images allouées par le hwcontext sont linéaires et localement adressables.

instance_extensions

Liste d'extensions d'instance supplémentaires à activer, séparées par des signes plus.

device_extensions

Liste d'extensions de périphérique supplémentaires à activer, séparées par des signes plus.

Exemples :

-init_hw_device vulkan:1

Choisit le deuxième périphérique du système.

-init_hw_device vulkan:RADV

Choisit le premier périphérique dont le nom contient la chaîne RADV.

-init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

Choisit le premier périphérique et active les extensions d'instance Wayland et XCB.

-init_hw_device type[=name]@source

Initialise un nouveau périphérique matériel de type type nommé name, en le dérivant du périphérique existant nommé source.

-init_hw_device list

Liste tous les types de périphériques matériels pris en charge par cette version compilée de ffmpeg.

-filter_hw_device name

Transmet le périphérique matériel nommé name à tous les filtres de tout graphe de filtres. Cela permet de définir le périphérique de destination pour le téléversement effectué par le filtre hwupload, ou le périphérique de destination pour l'association effectuée par le filtre hwmap. D'autres filtres peuvent également utiliser ce paramètre lorsqu'ils nécessitent un périphérique matériel. Notez que cela n'est généralement requis que lorsque l'entrée n'est pas déjà sous forme d'images matérielles - lorsque c'est le cas, les filtres déterminent le périphérique dont ils ont besoin à partir du contexte des images qu'ils reçoivent en entrée.

Il s'agit d'un réglage global, si bien que tous les filtres reçoivent le même périphérique.

-hwaccel[:stream_specifier] hwaccel (input,per-stream)

Utilise l'accélération matérielle pour décoder le ou les flux correspondants. Les valeurs autorisées pour hwaccel sont :

none

N'utilise aucune accélération matérielle (valeur par défaut).

auto

Sélectionne automatiquement la méthode d'accélération matérielle.

vdpau

Utilise l'accélération matérielle VDPAU (Video Decode and Presentation API for Unix).

dxva2

Utilise l'accélération matérielle DXVA2 (DirectX Video Acceleration).

d3d11va

Utilise l'accélération matérielle D3D11VA (DirectX Video Acceleration).

vaapi

Utilise l'accélération matérielle VAAPI (Video Acceleration API).

qsv

Utilise l'accélération Intel QuickSync Video pour le transcodage vidéo.

Contrairement à la plupart des autres valeurs, cette option n'active pas le décodage accéléré (celui-ci est utilisé automatiquement dès qu'un decoder qsv est sélectionné), mais le transcodage accéléré, sans copier les images en mémoire système.

Pour que cela fonctionne, le decoder et l'encoder doivent tous deux prendre en charge l'accélération QSV, et aucun filtre ne doit être utilisé.

videotoolbox

Utilise l'accélération matérielle Video Toolbox.

Cette option n'a aucun effet si le hwaccel sélectionné n'est pas disponible ou n'est pas pris en charge par le decoder choisi.

Notez que la plupart des méthodes d'accélération sont destinées à la lecture et ne seront pas plus rapides que le décodage logiciel sur les processeurs modernes. De plus, ffmpeg doit généralement copier les images décodées de la mémoire du GPU vers la mémoire système, ce qui entraîne une perte de performance supplémentaire. Cette option est donc surtout utile pour les tests.

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)

Sélectionne un périphérique à utiliser pour l'accélération matérielle.

Cette option n'a de sens que si l'option -hwaccel est également spécifiée. Elle peut soit référencer par son nom un périphérique existant créé avec -init_hw_device, soit créer un nouveau périphérique comme si ‘-init_hw_device’ type:hwaccel_device avait été appelé juste avant.

-hwaccels

Liste tous les composants d'accélération matérielle activés dans cette version compilée de ffmpeg. La disponibilité réelle à l'exécution dépend du matériel et de l'installation du pilote approprié.

-fix_sub_duration_heartbeat[:stream_specifier]

Définit un flux vidéo de sortie spécifique comme flux heartbeat, celui-ci déterminant le moment où scinder et transmettre le sous-titre en cours dès réception d'un paquet à accès aléatoire.

Cela réduit la latence des sous-titres pour lesquels le paquet de fin ou le sous-titre suivant n'a pas encore été reçu. En contrepartie, cela conduit le plus souvent à une duplication des événements de sous-titre afin de couvrir toute la durée ; aussi, dans les cas d'usage où la latence d'émission de l'événement de sous-titre vers la sortie n'a pas d'importance, cette option ne devrait pas être utilisée.

Pour que cette option ait un effet, -fix_sub_duration doit être défini pour le flux de sous-titres d'entrée concerné, et ce flux doit en outre être directement associé (au sens de -map) à la même sortie que celle où se trouve le flux heartbeat.

5.7 Options audio

-aframes number (output)

Définit le nombre d'images audio à produire en sortie. Il s'agit d'un alias obsolète de -frames:a, à utiliser à la place.

-ar[:stream_specifier] freq (input/output,per-stream)

Définit la fréquence d'échantillonnage audio. Pour les flux de sortie, elle correspond par défaut à la fréquence du flux d'entrée correspondant. Pour les flux d'entrée, cette option n'a de sens que pour les périphériques de capture audio et les demuxers bruts, et elle est associée aux options de demuxer correspondantes.

-aq q (output)

Définit la qualité audio (spécifique au codec, VBR). Il s'agit d'un alias de -q:a.

-ac[:stream_specifier] channels (input/output,per-stream)

Définit le nombre de canaux audio. Pour les flux de sortie, il correspond par défaut au nombre de canaux audio d'entrée. Pour les flux d'entrée, cette option n'a de sens que pour les périphériques de capture audio et les demuxers bruts, et elle est associée aux options de demuxer correspondantes.

-an (input/output)

En tant qu'option d'entrée, empêche tous les flux audio d'un fichier d'être filtrés, sélectionnés automatiquement ou associés à une sortie quelconque. Voir l'option -discard pour désactiver les flux individuellement.

En tant qu'option de sortie, désactive l'enregistrement audio, c'est-à-dire la sélection ou l'association automatique de tout flux audio. Pour un contrôle manuel complet, voir l'option -map.

-acodec codec (input/output)

Définit le codec audio. Il s'agit d'un alias de -codec:a.

-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

Définit le sample format audio. Utilisez -sample_fmts pour obtenir la liste des sample formats pris en charge.

-af filtergraph (output)

Crée le filtergraph spécifié par filtergraph et l'utilise pour filtrer le flux.

Il s'agit d'un alias de -filter:a ; voir l'option -filter.

5.8 Options audio avancées

-atag fourcc/tag (output)

Force le tag/fourcc audio. Il s'agit d'un alias de -tag:a.

-ch_layout[:stream_specifier] layout (input/output,per-stream)

Alias de -channel_layout.

-channel_layout[:stream_specifier] layout (input/output,per-stream)

Définit la disposition des canaux audio. Pour les flux de sortie, elle correspond par défaut à la disposition des canaux d'entrée. Pour les flux d'entrée, elle remplace la disposition des canaux de l'entrée. Tous les decoders ne respectent pas la disposition des canaux ainsi remplacée. Cette option définit aussi la disposition des canaux pour les périphériques de capture audio et les demuxers bruts, et elle est associée à l'option de demuxer correspondante.

-guess_layout_max channels (input,per-stream)

Si la disposition des canaux d'une entrée n'est pas connue, tente de la deviner uniquement si elle correspond à au plus le nombre de canaux spécifié. Par exemple, 2 indique à ffmpeg de reconnaître 1 canal comme mono et 2 canaux comme stéréo, mais pas 6 canaux comme 5.1. Par défaut, ffmpeg essaie toujours de deviner. Utilisez 0 pour désactiver toute tentative de déduction. Spécifier explicitement une disposition d'entrée avec l'option -channel_layout désactive également cette déduction.

5.9 Options de sous-titres

-scodec codec (input/output)

Définit le codec de sous-titres. Il s'agit d'un alias de -codec:s.

-sn (input/output)

En tant qu'option d'entrée, empêche tous les flux de sous-titres d'un fichier d'être filtrés, sélectionnés automatiquement ou associés à une sortie quelconque. Voir l'option -discard pour désactiver les flux individuellement.

En tant qu'option de sortie, désactive l'enregistrement des sous-titres, c'est-à-dire la sélection ou l'association automatique de tout flux de sous-titres. Pour un contrôle manuel complet, voir l'option -map.

5.10 Options de sous-titres avancées

-fix_sub_duration

Corrige la durée des sous-titres. Pour chaque sous-titre, attend le paquet suivant du même flux et ajuste la durée du premier afin d'éviter tout chevauchement. Cela est nécessaire avec certains codecs de sous-titres, en particulier les sous-titres DVB, car la durée indiquée dans le paquet d'origine n'est qu'une estimation approximative, la fin étant en réalité marquée par une image de sous-titre vide. Omettre cette option lorsqu'elle est nécessaire peut entraîner des durées exagérées ou des échecs de multiplexage dus à des horodatages non monotones.

Notez que cette option retarde la sortie de toutes les données jusqu'au décodage du paquet de sous-titre suivant : elle peut augmenter considérablement la consommation mémoire et la latence.

-canvas_size size

Définit la taille du canevas utilisé pour le rendu des sous-titres.

5.11 Options avancées

-map [-]input_file_id[:stream_specifier][:view_specifier][:?] | [linklabel] (output)

Crée un ou plusieurs flux dans le fichier de sortie. Cette option dispose de deux formes pour spécifier la ou les sources de données : la première sélectionne un ou plusieurs flux d'un fichier d'entrée (spécifié avec -i), la seconde prend une sortie d'un complex filtergraph (spécifié avec -filter_complex).

Dans la première forme, un flux de sortie est créé pour chaque flux du fichier d'entrée d'index input_file_id. Si stream_specifier est donné, seuls les flux correspondant à ce spécificateur sont utilisés (voir la section Spécificateurs de flux pour la syntaxe de stream_specifier).

Un caractère - avant l'identifiant de flux crée une association "négative". Cela exclut les flux correspondants des associations déjà créées.

Un view_specifier facultatif peut être donné après le spécificateur de flux ; pour une vidéo multivue, il spécifie la vue à utiliser. Le view specifier peut prendre l'un des formats suivants :

view:view_id

sélectionne une vue par son ID ; view_id peut être réglé sur ’all’ pour utiliser toutes les vues entrelacées en un seul flux ;

vidx:view_idx

sélectionne une vue par son index ; c'est-à-dire que 0 est la vue de base, 1 la première vue non basale, etc.

vpos:position

sélectionne une vue par sa position d'affichage ; position peut valoir left ou right

Par défaut, pour le transcodage, seule la vue de base est utilisée, c'est-à-dire l'équivalent de vidx:0. Pour la copie de flux, les view specifiers ne sont pas pris en charge et toutes les vues sont toujours copiées.

Un ? final après l'index de flux permet de rendre le map facultatif : si le map ne correspond à aucun flux, il est ignoré au lieu de provoquer un échec. Notez que le map échoue tout de même si un index de fichier d'entrée invalide est utilisé ; par exemple si le map fait référence à une entrée inexistante.

Une forme alternative [linklabel] permet d'associer des sorties de graphes de filtres complexes (voir l'option -filter_complex) au fichier de sortie. linklabel doit correspondre à un label de lien de sortie défini dans le graphe.

Cette option peut être spécifiée plusieurs fois, chaque occurrence ajoutant des flux supplémentaires au fichier de sortie. Un même flux d'entrée peut également être associé un nombre quelconque de fois comme source pour différents flux de sortie, par exemple afin d'utiliser des options d'encodage et/ou des filtres différents. Les flux sont créés dans la sortie dans le même ordre que celui dans lequel les options -map sont données sur la ligne de commande.

L'utilisation de cette option désactive les associations par défaut pour ce fichier de sortie.

Exemples :

map everything

Pour associer TOUS les flux du premier fichier d'entrée à la sortie :

ffmpeg -i INPUT -map 0 output

select specific stream

Si le premier fichier d'entrée comporte deux flux audio, ceux-ci sont identifiés par 0:0 et 0:1. Vous pouvez utiliser -map pour choisir les flux à placer dans un fichier de sortie. Par exemple :

ffmpeg -i INPUT -map 0:1 out.wav

associe le second flux d'entrée d'INPUT à l'unique flux de sortie d'out.wav.

create multiple streams

Pour sélectionner le flux d'index 2 du fichier d'entrée a.mov (spécifié par l'identifiant 0:2) et le flux d'index 6 de l'entrée b.mov (spécifié par l'identifiant 1:6), puis les copier dans le fichier de sortie out.mov :

ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov

create multiple streams 2

Pour sélectionner toute la vidéo et le troisième flux audio d'un fichier d'entrée :

ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT

negative map

Pour associer tous les flux sauf le deuxième flux audio, utilisez des associations négatives :

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

optional map

Pour associer les flux vidéo et audio du premier fichier d'entrée, en utilisant le ? final pour ignorer l'association audio si le premier fichier d'entrée ne comporte aucun flux audio :

ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT

map by language

Pour choisir le flux audio en anglais :

ffmpeg -i INPUT -map 0:m:language:eng OUTPUT

-ignore_unknown

Ignore les flux d'entrée de type inconnu au lieu d'échouer si une copie de ces flux est tentée.

-copy_unknown

Autorise la copie des flux d'entrée de type inconnu au lieu d'échouer si une copie de ces flux est tentée.

-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)

Définit les informations de métadonnées du prochain fichier de sortie à partir d'infile. Notez qu'il s'agit d'index de fichiers (à partir de zéro), et non de noms de fichiers. Les paramètres facultatifs metadata_spec_in/out indiquent quelles métadonnées copier. Un spécificateur de métadonnées peut prendre les formes suivantes :

g

métadonnées globales, c'est-à-dire les métadonnées qui s'appliquent à l'ensemble du fichier

s[:stream_spec]

métadonnées par flux. stream_spec est un spécificateur de flux tel que décrit dans le chapitre Spécificateurs de flux. Dans un spécificateur de métadonnées d'entrée, la copie s'effectue depuis le premier flux correspondant. Dans un spécificateur de métadonnées de sortie, la copie s'effectue vers tous les flux correspondants.

c:chapter_index

métadonnées par chapitre. chapter_index est l'index de chapitre à partir de zéro.

p:program_index

métadonnées par programme. program_index est l'index de programme à partir de zéro.

Si le spécificateur de métadonnées est omis, il vaut global par défaut.

Par défaut, les métadonnées globales sont copiées depuis le premier fichier d'entrée, et les métadonnées par flux et par chapitre sont copiées avec les flux/chapitres correspondants. Ces associations par défaut sont désactivées dès qu'une association du type concerné est créée. Un index de fichier négatif peut être utilisé pour créer une association factice qui se contente de désactiver la copie automatique.

Par exemple, pour copier les métadonnées du premier flux du fichier d'entrée vers les métadonnées globales du fichier de sortie :

ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

Pour faire l'inverse, c'est-à-dire copier les métadonnées globales vers tous les flux audio :

ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

Notez que le simple 0 fonctionnerait tout aussi bien dans cet exemple, puisque les métadonnées globales sont supposées par défaut.

-map_chapters input_file_index (output)

Copie les chapitres du fichier d'entrée d'index input_file_index vers le prochain fichier de sortie. Si aucune association de chapitres n'est spécifiée, les chapitres sont copiés depuis le premier fichier d'entrée comportant au moins un chapitre. Utilisez un index de fichier négatif pour désactiver toute copie de chapitres.

-benchmark (global)

Affiche les informations de benchmark à la fin d'un encodage. Affiche le temps réel, le temps système et le temps utilisateur utilisés, ainsi que la consommation mémoire maximale. La consommation mémoire maximale n'est pas prise en charge sur tous les systèmes ; si elle ne l'est pas, elle s'affiche généralement comme 0.

-benchmark_all (global)

Affiche les informations de benchmark pendant l'encodage. Affiche le temps réel, le temps système et le temps utilisateur utilisés pour les différentes étapes (encodage/décodage audio/vidéo).

-timelimit duration (global)

Quitte une fois que ffmpeg a tourné pendant duration secondes de temps utilisateur CPU.

-dump (global)

Déverse chaque paquet d'entrée vers la sortie d'erreur.

-hex (global)

Lors du déversement des paquets, déverse également la charge utile.

-readrate speed (input)

Limite la vitesse de lecture de l'entrée.

Sa valeur est un nombre positif à virgule flottante qui représente la durée maximale de média, en secondes, devant être ingérée en une seconde de temps réel (horloge murale). La valeur par défaut est zéro et signifie qu'aucune limite n'est imposée à la vitesse d'ingestion. La valeur 1 représente la vitesse temps réel et équivaut à -re.

Principalement utilisé pour simuler un périphérique de capture ou un flux d'entrée en direct (par exemple lors de la lecture depuis un fichier). Ne devrait pas être utilisé avec une valeur faible lorsque l'entrée est un véritable périphérique de capture ou un flux en direct, car cela peut provoquer des pertes de paquets.

Cela est utile lorsque la vitesse de flux des paquets de sortie est importante, comme dans le cas de la diffusion en direct.

-re (input)

Lit l'entrée à sa fréquence d'images native. Cela équivaut à définir -readrate 1.

-readrate_initial_burst seconds

Définit une durée initiale de lecture en rafale, en secondes, au-delà de laquelle -re/-readrate est appliqué.

-readrate_catchup speed (input)

Si l'entrée ou la sortie est bloquée, entraînant un retard de la vitesse de lecture réelle par rapport au readrate spécifié, ce taux s'applique jusqu'à ce que l'entrée rattrape le readrate spécifié. Ne doit pas être inférieur au readrate principal.

-fps_mode[:stream_specifier] parameter (output,per-stream)

Définit la méthode de synchronisation vidéo / le mode de fréquence d'images.

passthrough

Chaque image est transmise du demuxer au muxer avec son horodatage.

cfr

Les images sont dupliquées et supprimées pour obtenir exactement la fréquence d'images constante demandée.

vfr

Les images sont transmises avec leur horodatage, ou supprimées, de manière à éviter que 2 images n'aient le même horodatage.

auto

Choisit entre cfr et vfr selon les capacités du muxer. Il s'agit de la méthode par défaut.

Notez que les horodatages peuvent ensuite encore être modifiés par le muxer. C'est le cas par exemple lorsque l'option de format avoid_negative_ts est activée.

Avec -map, vous pouvez choisir de quel flux les horodatages doivent être pris. Vous pouvez laisser la vidéo ou l'audio inchangé et synchroniser le ou les flux restants sur celui resté inchangé.

-frame_drop_threshold parameter

Seuil de suppression d'images, qui indique de combien les images vidéo peuvent être en retard avant d'être supprimées. Exprimé en unités de fréquence d'images, donc 1.0 correspond à une image. La valeur par défaut est -1.1. Un cas d'usage possible est d'éviter les suppressions d'images en cas d'horodatages bruités, ou d'augmenter la précision de suppression d'images en cas d'horodatages exacts.

-apad parameters (output,per-stream)

Remplit le ou les flux audio de sortie. Cela équivaut à appliquer -af apad. L'argument est une chaîne de paramètres de filtre composée de la même façon qu'avec le filtre apad. -shortest doit être défini pour cette sortie pour que l'option prenne effet.

-copyts

Ne traite pas les horodatages d'entrée, mais conserve leurs valeurs sans essayer de les normaliser. En particulier, ne supprime pas la valeur de décalage du temps de départ initial.

Notez que, selon l'option fps_mode ou un traitement spécifique du muxer (par exemple si l'option de format avoid_negative_ts est activée), les horodatages de sortie peuvent ne pas correspondre aux horodatages d'entrée même lorsque cette option est sélectionnée.

-start_at_zero

Utilisée avec copyts, décale les horodatages d'entrée pour qu'ils commencent à zéro.

Cela signifie que l'utilisation par exemple de -ss 50 fait démarrer les horodatages de sortie à 50 secondes, quel que soit l'horodatage auquel le fichier d'entrée commençait.

-copytb mode

Spécifie comment définir la timebase de l'encoder lors d'une copie de flux. mode est une valeur numérique entière, et peut prendre l'une des valeurs suivantes :

1

Utilise la timebase du demuxer.

La timebase est copiée du demuxer d'entrée correspondant vers l'encoder de sortie. Cela est parfois nécessaire pour éviter des horodatages non strictement croissants lors de la copie de flux vidéo à fréquence d'images variable.

0

Utilise la timebase du decoder.

La timebase est copiée du decoder d'entrée correspondant vers l'encoder de sortie.

-1

Tente de faire le choix automatiquement, afin de produire une sortie cohérente.

La valeur par défaut est -1.

-enc_time_base[:stream_specifier] timebase (output,per-stream)

Définit la timebase de l'encoder. timebase peut prendre l'une des valeurs suivantes :

0

Attribue une valeur par défaut selon le type de média.

Pour la vidéo, utilise 1/framerate ; pour l'audio, utilise 1/samplerate.

demux

Utilise la timebase du demuxer.

filter

Utilise la timebase du filtergraph.

un nombre positif

Utilise le nombre fourni comme timebase.

Ce champ peut être fourni sous forme d'un rapport de deux entiers (par exemple 1:24, 1:48000) ou d'un nombre décimal (par exemple 0.04166, 2.0833e-5)

La valeur par défaut est 0.

-bitexact (input/output)

Active le mode bitexact pour le (de)muxer et le (de/en)coder

-shortest (output)

Termine l'encodage lorsque le flux de sortie le plus court se termine.

Notez que cette option peut nécessiter la mise en tampon d'images, ce qui introduit une latence supplémentaire. Le montant maximal de cette latence peut être contrôlé avec l'option -shortest_buf_duration.

-shortest_buf_duration duration (output)

L'option -shortest peut nécessiter la mise en tampon de quantités de données potentiellement importantes lorsqu'au moins l'un des flux est "sparse" (c'est-à-dire présente de grands écarts entre les images – c'est typiquement le cas des sous-titres).

Cette option contrôle la durée maximale des images mises en tampon, en secondes. Des valeurs plus élevées peuvent permettre à l'option -shortest de produire des résultats plus précis, mais augmentent l'utilisation mémoire et la latence.

La valeur par défaut est 10 secondes.

-dts_delta_threshold threshold

Seuil delta de discontinuité d'horodatage, exprimé en nombre décimal de secondes.

La correction de discontinuité d'horodatage activée par cette option ne s'applique qu'aux formats d'entrée acceptant la discontinuité d'horodatage (ceux pour lesquels l'indicateur AVFMT_TS_DISCONT est activé), par exemple MPEG-TS et HLS, et elle est automatiquement désactivée lors de l'utilisation de l'option -copyts (sauf si un wrapping est détecté).

Si une discontinuité d'horodatage dont la valeur absolue dépasse threshold est détectée, ffmpeg supprime la discontinuité en diminuant/augmentant les DTS et PTS actuels de la valeur delta correspondante.

La valeur par défaut est 10.

-dts_error_threshold threshold

Seuil delta d'erreur d'horodatage, exprimé en nombre décimal de secondes.

La correction d'horodatage activée par cette option ne s'applique qu'aux formats d'entrée n'acceptant pas la discontinuité d'horodatage (ceux pour lesquels l'indicateur AVFMT_TS_DISCONT n'est pas activé).

Si une discontinuité d'horodatage dont la valeur absolue dépasse threshold est détectée, ffmpeg supprime la valeur d'horodatage PTS/DTS.

La valeur par défaut est 3600*30 (30 heures), choisie arbitrairement et plutôt prudente.

-muxdelay seconds (output)

Définit le délai maximal de demux-decode.

-muxpreload seconds (output)

Définit le délai initial de demux-decode.

-streamid output-stream-index:new-value (output)

Attribue une nouvelle valeur de stream-id à un flux de sortie. Cette option doit être spécifiée avant le nom du fichier de sortie auquel elle s'applique. Lorsque plusieurs fichiers de sortie existent, un streamid peut être réattribué à une valeur différente.

Par exemple, pour définir le PID du flux 0 à 33 et le PID du flux 1 à 36 pour un fichier de sortie mpegts :

ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts

-bsf[:stream_specifier] bitstream_filters (input/output,per-stream)

Applique des bitstream filters aux flux correspondants. Les filtres sont appliqués à chaque paquet au moment où il est reçu du demuxer (lorsqu'elle est utilisée comme option d'entrée) ou avant qu'il ne soit envoyé au muxer (lorsqu'elle est utilisée comme option de sortie).

bitstream_filters est une liste de spécifications de bitstream filter séparées par des virgules, chacune de la forme

filter[=optname0=optval0:optname1=optval1:...]

Les caractères ’,=:’ devant faire partie d'une valeur d'option doivent être échappés par une barre oblique inverse.

Utilisez l'option -bsfs pour obtenir la liste des bitstream filters.

Par exemple :

ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264

applique le bitstream filter h264_mp4toannexb (qui convertit un flux H.264 encapsulé en MP4 vers Annex B) au flux vidéo d'entrée.

À l'inverse,

ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt

applique le bitstream filter mov2textsub (qui extrait le texte des sous-titres MOV) au flux de sous-titres de sortie. Notez cependant que, les deux exemples utilisant -c copy, il importe peu que les filtres soient appliqués en entrée ou en sortie - cela changerait si un transcodage avait lieu.

-tag[:stream_specifier] codec_tag (input/output,per-stream)

Force un tag/fourcc pour les flux correspondants.

-timecode hh:mm:ssSEPff

Spécifie le timecode à écrire. SEP vaut ’:’ pour un timecode non-drop et ’;’ (ou ’.’) pour le drop.

ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg

-filter_complex filtergraph (global)

Définit un complex filtergraph, c'est-à-dire un filtergraph avec un nombre arbitraire d'entrées et/ou de sorties. Pour les graphes simples – ceux avec une seule entrée et une seule sortie de même type – voir les options -filter. filtergraph est une description du filtergraph, telle que décrite dans la section “Filtergraph syntax” du manuel ffmpeg-filters. Cette option peut être spécifiée plusieurs fois - chaque utilisation crée un nouveau complex filtergraph.

Les entrées d'un complex filtergraph peuvent provenir de différents types de sources, distingués par le format du label de lien correspondant :

  • Pour connecter un flux d'entrée, utilisez [file_index:stream_specifier] (c'est-à-dire la même syntaxe que -map). Si stream_specifier correspond à plusieurs flux, le premier est utilisé. Pour une vidéo multivue, le spécificateur de flux peut être suivi du view specifier ; pour sa syntaxe, voir la documentation de l'option -map.
  • Pour connecter un loopback decoder, utilisez [dec:dec_idx], où dec_idx est l'index du loopback decoder à connecter à l'entrée donnée. Pour une vidéo multivue, l'index du decoder peut être suivi du view specifier ; pour sa syntaxe, voir la documentation de l'option -map.
  • Pour connecter une sortie d'un autre complex filtergraph, utilisez son label de lien. Par exemple, l'exemple suivant :
    ffmpeg -i input.mkv \
      -filter_complex '[0:v]scale=size=hd1080,split=outputs=2[for_enc][orig_scaled]' \
      -c:v libx264 -map '[for_enc]' output.mkv \
      -dec 0:0 \
      -filter_complex '[dec:0][orig_scaled]hstack[stacked]' \
      -map '[stacked]' -c:v ffv1 comparison.mkv
    

lit une vidéo d'entrée, puis

* (ligne 2) utilise un complex filtergraph à une entrée et deux sorties pour mettre à l'échelle la vidéo en 1920x1080 et dupliquer le résultat vers les deux sorties ; 
* (ligne 3) encode l'une des sorties mises à l'échelle avec `libx264` et écrit le résultat dans output.mkv ; 
* (ligne 4) décode ce flux encodé avec un loopback decoder ; 
* (ligne 5) place la sortie du loopback decoder (c'est-à-dire la vidéo encodée avec `libx264`) côte à côte avec l'entrée originale mise à l'échelle ; 
* (ligne 6) la vidéo combinée est ensuite encodée sans perte et écrite dans comparison.mkv.

Notez que les deux filtergraphs ne peuvent pas être combinés en un seul, car cela créerait un cycle dans le pipeline de transcodage (la sortie du filtergraph va vers l'encodage, puis vers le décodage, puis revient au même graphe), et de tels cycles ne sont pas autorisés.

Une entrée sans label est connectée au premier flux d'entrée inutilisé du type correspondant.

Les labels de lien de sortie sont référencés avec -map. Les sorties sans label sont ajoutées au premier fichier de sortie.

Notez qu'avec cette option, il est possible d'utiliser uniquement des sources lavfi, sans fichier d'entrée normal.

Par exemple, pour superposer une image sur une vidéo :

ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
'[out]' out.mkv

Ici, [0:v] fait référence au premier flux vidéo du premier fichier d'entrée, qui est relié à la première entrée (principale) du filtre overlay. De même, le premier flux vidéo de la seconde entrée est relié à la seconde entrée (overlay) du filtre overlay.

En supposant qu'il n'y a qu'un seul flux vidéo dans chaque fichier d'entrée, on peut omettre les labels d'entrée, si bien que ce qui précède équivaut à

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
'[out]' out.mkv

On peut en outre omettre le label de sortie ; la sortie unique du graphe de filtres est alors ajoutée automatiquement au fichier de sortie, si bien qu'on peut simplement écrire

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv

À titre d'exception spéciale, vous pouvez utiliser un flux de sous-titres bitmap comme entrée : il est converti en une vidéo de la même taille que la plus grande vidéo du fichier, ou 720x576 si aucune vidéo n'est présente. Notez qu'il s'agit d'une solution expérimentale et temporaire. Elle sera supprimée une fois que libavfilter prendra correctement en charge les sous-titres.

Par exemple, pour incruster des sous-titres sur un enregistrement DVB-T stocké au format MPEG-TS, en retardant les sous-titres d'1 seconde :

ffmpeg -i input.ts -filter_complex \
  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
  -sn -map '#0x2dc' output.mkv

(0x2d0, 0x2dc et 0x2ef sont respectivement les PID MPEG-TS des flux vidéo, audio et sous-titres ; 0:0, 0:3 et 0:7 auraient aussi fonctionné)

Pour générer 5 secondes de vidéo rouge pure à l'aide de la source lavfi color :

ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv

-filter_complex_threads nb_threads (global)

Définit le nombre de threads utilisés pour traiter un graphe filter_complex. Similaire à filter_threads, mais utilisé uniquement pour les graphes -filter_complex. La valeur par défaut est le nombre de CPU disponibles.

-lavfi filtergraph (global)

Définit un complex filtergraph, c'est-à-dire un filtergraph avec un nombre arbitraire d'entrées et/ou de sorties. Équivaut à -filter_complex.

-accurate_seek (input)

Cette option active ou désactive le positionnement précis dans les fichiers d'entrée avec l'option -ss. Elle est activée par défaut, si bien que le positionnement est précis lors du transcodage. Utilisez -noaccurate_seek pour la désactiver, ce qui peut être utile par exemple lorsqu'on copie certains flux tout en transcodant les autres.

-seek_timestamp (input)

Cette option active ou désactive le positionnement par horodatage dans les fichiers d'entrée avec l'option -ss. Elle est désactivée par défaut. Si elle est activée, l'argument de l'option -ss est considéré comme un horodatage réel et n'est pas décalé par le temps de départ du fichier. Cela n'a d'importance que pour les fichiers qui ne commencent pas à l'horodatage 0, comme les transport streams.

-thread_queue_size size (input/output)

En entrée, cette option définit le nombre maximal de paquets mis en file d'attente lors de la lecture depuis le fichier ou le périphérique. Avec des flux en direct à faible latence / débit élevé, des paquets peuvent être écartés s'ils ne sont pas lus en temps voulu ; définir cette valeur peut forcer ffmpeg à utiliser un thread d'entrée dédié et à lire les paquets dès leur arrivée. Par défaut, ffmpeg ne le fait que si plusieurs entrées sont spécifiées.

En sortie, cette option indique le nombre maximal de paquets pouvant être mis en file d'attente pour chaque thread de multiplexage.

-sdp_file file (global)

Affiche les informations sdp d'un flux de sortie dans file. Cela permet de récupérer les informations sdp même lorsqu'au moins une sortie n'est pas un flux rtp. (Nécessite qu'au moins l'un des formats de sortie soit rtp).

-discard (input)

Permet d'écarter des flux spécifiques, ou des images au sein d'un flux. Tout flux d'entrée peut être entièrement écarté à l'aide de la valeur all, tandis que l'écartement sélectif d'images au sein d'un flux se produit au niveau du demuxer et n'est pas pris en charge par tous les demuxers.

none

N'écarte aucune image.

default

Valeur par défaut, qui n'écarte aucune image.

noref

Écarte toutes les images non référencées.

bidir

Écarte toutes les images bidirectionnelles.

nokey

Écarte toutes les images sauf les keyframes.

all

Écarte toutes les images.

-abort_on flags (global)

Arrête et interrompt le traitement dans diverses conditions. Les indicateurs suivants sont disponibles :

empty_output

Aucun paquet n'a été transmis au muxer, la sortie est vide.

empty_output_stream

Aucun paquet n'a été transmis au muxer pour certains des flux de sortie.

-max_error_rate (global)

Définit la fraction d'échecs de décodage d'images, sur l'ensemble des entrées, au-delà de laquelle ffmpeg renvoie le code de sortie 69. Le franchissement de ce seuil n'interrompt pas le traitement. La plage est un nombre à virgule flottante compris entre 0 et 1. La valeur par défaut est 2/3.

-xerror (global)

Arrête et quitte en cas d'erreur

-max_muxing_queue_size packets (output,per-stream)

Lors du transcodage de flux audio et/ou vidéo, ffmpeg ne commence à écrire dans la sortie qu'une fois qu'il dispose d'un paquet pour chacun de ces flux. En attendant que cela se produise, les paquets des autres flux sont mis en tampon. Cette option définit la taille de ce tampon, en paquets, pour le flux de sortie correspondant.

La valeur par défaut de cette option devrait être suffisamment élevée pour la plupart des usages ; ne modifiez donc cette option que si vous êtes certain d'en avoir besoin.

-muxing_queue_data_threshold bytes (output,per-stream)

Il s'agit d'un seuil minimal en dessous duquel la taille de la file de multiplexage n'est pas prise en compte. Vaut par défaut 50 mégaoctets par flux, et se fonde sur la taille globale des paquets transmis au muxer.

-auto_conversion_filters (global)

Active l'insertion automatique de filtres de conversion de format dans tous les graphes de filtres, y compris ceux définis par -vf, -af, -filter_complex et -lavfi. Si la négociation du format des filtres nécessite une conversion, l'initialisation des filtres échoue. Les conversions peuvent tout de même être effectuées en insérant le filtre de conversion approprié (scale, aresample) dans le graphe. Activée par défaut ; pour la désactiver explicitement, il faut spécifier -noauto_conversion_filters.

-bits_per_raw_sample[:stream_specifier] value (output,per-stream)

Déclare que le nombre de bits par échantillon brut du flux de sortie donné vaut value. Notez que cette option définit l'information fournie à l'encoder/muxer, mais ne modifie pas le flux pour le faire correspondre à cette valeur. Définir des valeurs ne correspondant pas aux propriétés du flux peut entraîner des échecs d'encodage ou des fichiers de sortie invalides.

-stats_enc_pre[:stream_specifier] path (output,per-stream) -stats_enc_post[:stream_specifier] path (output,per-stream) -stats_mux_pre[:stream_specifier] path (output,per-stream)

Écrit, pour les flux correspondants, des informations d'encodage par image dans le fichier indiqué par path.

-stats_enc_pre écrit des informations sur les images vidéo ou audio brutes juste avant leur envoi vers l'encodage, tandis que -stats_enc_post écrit des informations sur les paquets encodés au moment où ils sont reçus de l'encoder. -stats_mux_pre écrit des informations sur les paquets juste avant qu'ils ne soient envoyés au muxer. Chaque image ou paquet produit une ligne dans le fichier spécifié. Le format de cette ligne est contrôlé par -stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt.

Lorsque les statistiques de plusieurs flux sont écrites dans un même fichier, les lignes correspondant aux différents flux sont entrelacées. L'ordre précis de cet entrelacement n'est pas spécifié, et rien ne garantit qu'il reste stable d'une exécution du programme à l'autre, même avec les mêmes options.

-stats_enc_pre_fmt[:stream_specifier] format_spec (output,per-stream) -stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream) -stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream)

Spécifie le format des lignes écrites par -stats_enc_pre / -stats_enc_post / -stats_mux_pre.

format_spec est une chaîne pouvant contenir des directives de la forme {fmt}. format_spec est échappé par barre oblique inverse — utilisez \{, \}, et \\ pour écrire respectivement un { littéral, un } littéral, ou un \ littéral, dans la sortie.

Les directives données par fmt peuvent être l'une des suivantes :

fidx

Index du fichier de sortie.

sidx

Index du flux de sortie dans le fichier.

n

Numéro d'image. Avant encodage : nombre d'images envoyées à l'encoder jusqu'ici. Après encodage : nombre de paquets reçus de l'encoder jusqu'ici. Multiplexage : nombre de paquets soumis au muxer pour ce flux jusqu'ici.

ni

Numéro d'image d'entrée. Index de l'image d'entrée (c'est-à-dire produite par un decoder) correspondant à cette image ou ce paquet de sortie. -1 si indisponible.

tb

Timebase dans laquelle sont exprimés les horodatages de cette image/ce paquet, sous forme de nombre rationnel num/den. Notez que l'encoder et le muxer peuvent utiliser des timebases différentes.

tbi

Timebase de ptsi, sous forme de nombre rationnel num/den. Disponible lorsque ptsi est disponible, 0/1 sinon.

pts

Presentation timestamp de l'image ou du paquet, sous forme d'entier. Doit être multiplié par la timebase pour calculer le temps de présentation.

ptsi

Presentation timestamp de l'image d'entrée (voir ni), sous forme d'entier. Doit être multiplié par tbi pour calculer le temps de présentation. Affiché comme (2^63 - 1 = 9223372036854775807) lorsqu'il est indisponible.

t

Temps de présentation de l'image ou du paquet, sous forme de nombre décimal. Égal à pts multiplié par tb.

ti

Temps de présentation de l'image d'entrée (voir ni), sous forme de nombre décimal. Égal à ptsi multiplié par tbi. Affiché comme inf lorsqu'il est indisponible.

dts (packet)

Horodatage de décodage du paquet, sous forme d'entier. Doit être multiplié par la timebase pour calculer le temps de présentation.

dt (packet)

Temps de décodage de l'image ou du paquet, sous forme de nombre décimal. Égal à dts multiplié par tb.

sn (frame,audio)

Nombre d'échantillons audio envoyés à l'encoder jusqu'ici.

samp (frame,audio)

Nombre d'échantillons audio dans l'image.

size (packet)

Taille du paquet encodé, en octets.

br (packet)

Débit binaire actuel, en bits par seconde.

abr (packet)

Débit binaire moyen de l'ensemble du flux jusqu'à présent, en bits par seconde, -1 s'il ne peut être déterminé à ce stade.

key (packet)

Caractère ’K’ si le paquet contient une keyframe, caractère ’N’ sinon.

Les directives marquées packet ne peuvent être utilisées qu'avec -stats_enc_post_fmt et -stats_mux_pre_fmt.

Les directives marquées frame ne peuvent être utilisées qu'avec -stats_enc_pre_fmt.

Les directives marquées audio ne peuvent être utilisées qu'avec les flux audio.

Les chaînes de format par défaut sont :

pre-encoding

{fidx} {sidx} {n} {t}

post-encoding

{fidx} {sidx} {n} {t}

À l'avenir, de nouveaux éléments pourront être ajoutés à la fin des chaînes de format par défaut. Les utilisateurs qui comptent sur le fait que le format reste strictement identique doivent le préciser eux-mêmes.

Notez que les statistiques des différents flux écrits dans le même fichier peuvent avoir des formats différents.

5.12 Fichiers de préréglage

Un fichier de préréglage contient une suite de paires option=valeur, une par ligne, spécifiant un ensemble d'options qu'il serait malaisé d'indiquer sur la ligne de commande. Les lignes commençant par le caractère dièse (’#’) sont ignorées et servent à fournir des commentaires. Consultez le répertoire presets de l'arborescence des sources de FFmpeg pour des exemples.

Il existe deux types de fichiers de préréglage : les fichiers ffpreset et avpreset.

5.12.1 Fichiers ffpreset

Les fichiers ffpreset se spécifient avec les options vpre, apre, spre et fpre. L'option fpre prend en entrée le nom de fichier du préréglage au lieu d'un nom de préréglage, et peut être utilisée avec n'importe quel type de codec. Pour les options vpre, apre et spre, les options indiquées dans un fichier de préréglage sont appliquées au codec actif du même type que l'option de préréglage.

L'argument passé aux options de préréglage vpre, apre et spre identifie le fichier de préréglage à utiliser selon les règles suivantes :

ffmpeg recherche d'abord un fichier nommé arg.ffpreset dans les répertoires $FFMPEG_DATADIR (si défini), $HOME/.ffmpeg, puis dans le datadir défini au moment de la configuration (généralement PREFIX/share/ffmpeg), ou dans un dossier ffpresets situé à côté de l'exécutable sous win32, dans cet ordre. Par exemple, si l'argument est libvpx-1080p, il recherchera le fichier libvpx-1080p.ffpreset.

Si un tel fichier n'est pas trouvé, ffmpeg recherche alors un fichier nommé codec_name-arg.ffpreset dans les répertoires mentionnés ci-dessus, où codec_name est le nom du codec auquel les options du fichier de préréglage seront appliquées. Par exemple, si vous sélectionnez le codec vidéo avec -vcodec libvpx et utilisez -vpre 1080p, il recherchera le fichier libvpx-1080p.ffpreset.

5.12.2 Fichiers avpreset

Les fichiers avpreset se spécifient avec l'option pre. Ils fonctionnent de façon similaire aux fichiers ffpreset, mais n'autorisent que des options propres à l'encoder. Par conséquent, une paire option=valeur spécifiant un encoder ne peut pas être utilisée.

Lorsque l'option pre est indiquée, ffmpeg recherche des fichiers portant le suffixe .avpreset dans les répertoires $AVCONV_DATADIR (si défini), $HOME/.avconv, puis dans le datadir défini au moment de la configuration (généralement PREFIX/share/ffmpeg), dans cet ordre.

ffmpeg recherche d'abord un fichier nommé codec_name-arg.avpreset dans les répertoires mentionnés ci-dessus, où codec_name est le nom du codec auquel les options du fichier de préréglage seront appliquées. Par exemple, si vous sélectionnez le codec vidéo avec -vcodec libvpx et utilisez -pre 1080p, il recherchera le fichier libvpx-1080p.avpreset.

Si un tel fichier n'est pas trouvé, ffmpeg recherche alors un fichier nommé arg.avpreset dans les mêmes répertoires.

5.13 Format du fichier vstats

Les options -vstats et -vstats_file activent la génération d'un fichier contenant des statistiques sur les sorties vidéo générées.

L'option -vstats_version détermine la version de format du fichier généré.

Avec la version 1, le format est :

frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

Avec la version 2, le format est :

out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

La valeur correspondant à chaque clé est décrite ci-dessous :

avg_br

débit binaire moyen exprimé en Kbits/s

br

débit binaire exprimé en Kbits/s

frame

numéro de l'image encodée

out

index du fichier de sortie

PSNR

Rapport signal sur bruit de crête

q

qualité de l'image

f_size

taille du paquet encodé exprimée en nombre d'octets

s_size

taille du flux exprimée en KiB

st

index de flux du fichier de sortie

time

horodatage du paquet

type

type d'image

Voir aussi les options -stats_enc pour un autre moyen d'afficher les statistiques d'encodage.

6 Exemples

6.1 Capture vidéo et audio

Si vous indiquez le format d'entrée et le périphérique, ffmpeg peut capturer directement la vidéo et l'audio.

ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

Ou avec une source audio ALSA (entrée mono, carte id 1) au lieu de OSS :

ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg

Notez que vous devez activer la bonne source vidéo et le bon canal avant de lancer ffmpeg avec un lecteur TV comme xawtv de Gerd Knorr. Vous devez également régler correctement les niveaux d'enregistrement audio avec un mixeur standard.

6.2 Capture X11

Capturez l'affichage X11 avec ffmpeg via

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg

0.0 correspond au numéro display.screen de votre serveur X11, comme la variable d'environnement DISPLAY.

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg

0.0 correspond au numéro display.screen de votre serveur X11, comme la variable d'environnement DISPLAY. 10 est le décalage en x et 20 le décalage en y pour la capture.

6.3 Conversion de format de fichier vidéo et audio

N'importe quel format de fichier et protocole pris en charge peut servir d'entrée à ffmpeg :

Exemples :

  • Vous pouvez utiliser des fichiers YUV en entrée :
    ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
    

Cela utilisera les fichiers :

    /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
    /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...

Les fichiers Y utilisent une résolution deux fois supérieure à celle des fichiers U et V. Ce sont des fichiers bruts, sans en-tête. Ils peuvent être générés par tous les decoders vidéo dignes de ce nom. Vous devez indiquer la taille de l'image avec l'option -s si ffmpeg ne parvient pas à la deviner.

  • Vous pouvez utiliser en entrée un fichier YUV420P brut :
    ffmpeg -i /tmp/test.yuv /tmp/out.avi
    

test.yuv est un fichier contenant des données YUV planaires brutes. Chaque image est composée du plan Y suivi des plans U et V à moitié de résolution verticale et horizontale.

  • Vous pouvez générer un fichier YUV420P brut :

    ffmpeg -i mydivx.avi hugefile.yuv
    
  • Vous pouvez définir plusieurs fichiers d'entrée et de sortie :

    ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
    

Convertit le fichier audio a.wav et le fichier vidéo YUV brut a.yuv en fichier MPEG a.mpg.

  • Vous pouvez également effectuer des conversions audio et vidéo en même temps :
    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
    

Convertit a.wav en audio MPEG à une fréquence d'échantillonnage de 22050 Hz.

  • Vous pouvez encoder vers plusieurs formats en même temps et définir une correspondance entre le flux d'entrée et les flux de sortie :
    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
    

Convertit a.wav en a.mp2 à 64 kbits et en b.mp2 à 128 kbits. ’-map file:index’ indique le flux d'entrée utilisé pour chaque flux de sortie, dans l'ordre de définition des flux de sortie.

  • Vous pouvez transcoder des VOB déchiffrés :
    ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
    

Ceci est un exemple typique de ripping de DVD ; l'entrée est un fichier VOB, la sortie un fichier AVI avec vidéo MPEG-4 et audio MP3. Notez que dans cette commande, nous utilisons des images B afin que le flux MPEG-4 soit compatible DivX5, et que la taille de GOP est de 300, ce qui signifie une image intra toutes les 10 secondes pour une vidéo d'entrée à 29.97fps. Par ailleurs, le flux audio est encodé en MP3, vous devez donc activer la prise en charge de LAME en passant --enable-libmp3lame à configure. La correspondance de flux est particulièrement utile pour le transcodage de DVD afin d'obtenir la langue audio souhaitée.

Remarque : pour voir les formats d'entrée pris en charge, utilisez ffmpeg -demuxers.

  • Vous pouvez extraire des images d'une vidéo, ou créer une vidéo à partir de nombreuses images :

Pour extraire des images d'une vidéo :

    ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

Cela extraira une image vidéo par seconde de la vidéo et les écrira dans des fichiers nommés foo-001.jpeg, foo-002.jpeg, etc. Les images seront redimensionnées pour correspondre aux nouvelles valeurs WxH.

Si vous voulez extraire seulement un nombre limité d'images, vous pouvez utiliser la commande ci-dessus en combinaison avec l'option -frames:v ou -t, ou en combinaison avec -ss pour commencer l'extraction à partir d'un moment donné.

Pour créer une vidéo à partir de nombreuses images :

    ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

La syntaxe foo-%03d.jpeg indique d'utiliser un nombre décimal composé de trois chiffres complétés par des zéros pour exprimer le numéro de séquence. C'est la même syntaxe que celle prise en charge par la fonction C printf, mais seuls les formats acceptant un entier normal conviennent.

Lors de l'importation d'une séquence d'images, -i prend également en charge en interne le développement de motifs génériques de type shell (globbing), en sélectionnant l'option -pattern_type glob propre à image2.

Par exemple, pour créer une vidéo à partir des noms de fichiers correspondant au motif glob foo-*.jpeg :

    ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
  • Vous pouvez placer plusieurs flux du même type dans la sortie :
    ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
    

Le fichier de sortie résultant test12.nut contiendra les quatre premiers flux des fichiers d'entrée dans l'ordre inverse.

  • Pour forcer une sortie vidéo CBR :

    ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
    
  • Les quatre options lmin, lmax, mblmin et mblmax utilisent des unités ’lambda’, mais vous pouvez utiliser la constante QP2LAMBDA pour convertir facilement depuis des unités ’q’ :

    ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
    

7 Voir aussi

ffmpeg-all, ffplay, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

8 Auteurs

Les développeurs de FFmpeg.

Pour plus de détails sur les auteurs, consultez l'historique Git du projet (https://git.ffmpeg.org/ffmpeg), par exemple en exécutant la commande git log dans le répertoire des sources de FFmpeg, ou en parcourant le dépôt en ligne à l'adresse https://git.ffmpeg.org/ffmpeg.

Les mainteneurs des différents composants sont listés dans le fichier MAINTAINERS de l'arborescence des sources.

Hébergement fourni par telepoint.bg