⚠️ Este es un sitio de traducción no oficial, sin relación con el proyecto FFmpeg. Para información autorizada, consulte la página original (https://ffmpeg.org/ffmpeg.html).

Documentación de ffmpeg

1 Sinopsis

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

2 Descripción

ffmpeg es un conversor multimedia universal. Puede leer una amplia variedad de entradas -incluidos dispositivos de captura o grabación en vivo-, filtrarlas y transcodificarlas a multitud de formatos de salida.

ffmpeg lee de un número arbitrario de entradas (que pueden ser archivos normales, tuberías, flujos de red, dispositivos de captura, etc.), especificadas mediante la opción -i, y escribe en un número arbitrario de salidas, especificadas mediante una simple url de salida. Cualquier elemento de la línea de comandos que no pueda interpretarse como una opción se considera una url de salida.

Cada entrada o salida puede, en principio, contener cualquier número de flujos elementales de distintos tipos (vídeo/audio/subtítulos/adjunto/datos), aunque el número y/o los tipos de flujos permitidos pueden estar limitados por el formato de container. Qué flujos de qué entradas irán a qué salida se decide automáticamente o mediante la opción -map (véase el capítulo Selección de flujos).

Para referirse a entradas/salidas en las opciones hay que usar sus índices (a partir de 0). Por ejemplo, la primera entrada es 0, la segunda es 1, etc. De igual modo, los flujos dentro de una entrada/salida se referencian por su índice. Por ejemplo, 2:3 se refiere al cuarto flujo de la tercera entrada o salida. Véase también el capítulo Especificadores de flujo.

Como regla general, las opciones se aplican al siguiente archivo especificado. Por eso el orden importa, y una misma opción puede aparecer varias veces en la línea de comandos: cada aparición se aplica al siguiente archivo de entrada o de salida. La excepción son las opciones globales (por ejemplo, el nivel de verbosidad), que deben especificarse en primer lugar.

No mezcle archivos de entrada y de salida: especifique primero todos los archivos de entrada y después todos los de salida. Tampoco mezcle opciones que pertenezcan a archivos distintos. Todas las opciones se aplican ÚNICAMENTE al siguiente archivo de entrada o salida y se reinician entre archivos.

A continuación, algunos ejemplos sencillos.

  • Convertir un archivo multimedia de entrada a un formato distinto, recodificando los flujos multimedia:

    ffmpeg -i input.avi output.mp4
    
  • Establecer la tasa de bits de vídeo del archivo de salida en 64 kbit/s:

    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
    
  • Forzar la velocidad de fotogramas del archivo de salida a 24 fps:

    ffmpeg -i input.avi -r 24 output.mp4
    
  • Forzar la velocidad de fotogramas del archivo de entrada (válido solo para formatos en bruto (raw)) a 1 fps y la velocidad de fotogramas del archivo de salida a 24 fps:

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

Es posible que se necesite la opción de formato para archivos de entrada en bruto (raw).

3 Descripción detallada

ffmpeg construye una canalización de transcodificación a partir de los componentes que se describen a continuación. El funcionamiento del programa consiste entonces en que los datos de entrada fluyen en fragmentos desde las fuentes hacia los sumideros a través de las tuberías, transformándose a su paso por los componentes que encuentran en el camino.

Los siguientes tipos de componentes están disponibles:

  • Los demuxers (abreviatura de "desmultiplexores") leen una fuente de entrada para extraer
    • propiedades globales, como metadatos o capítulos;
    • la lista de flujos elementales de entrada y sus propiedades

Se crea una instancia de demuxer por cada opción -i, y esta envía paquetes codificados a los decoders o muxers.

En otra bibliografía, a los demuxers a veces se los llama splitters (divisores), porque su función principal es dividir un archivo en flujos elementales (aunque algunos archivos solo contienen un flujo elemental).

Una representación esquemática de un demuxer tiene este aspecto:

┌──────────┬───────────────────────┐
│ 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.
     │
  • Los decoders reciben paquetes codificados (comprimidos) de un flujo elemental de audio, vídeo o subtítulos, y los decodifican en fotogramas sin procesar (matrices de píxeles para vídeo, PCM para audio). Un decoder normalmente está asociado a un flujo elemental de un demuxer (y recibe de él su entrada), pero a veces también puede existir de forma independiente (véase Decoders loopback).

Una representación esquemática de un decoder tiene este aspecto:

    ┌─────────┐
     packets  │         │ raw frames
    ─────────►│ decoder ├────────────►
              │         │
              └─────────┘
  • Los filtergraphs procesan y transforman fotogramas de audio o vídeo sin procesar. Un filtergraph consiste en uno o más filtros individuales enlazados formando un grafo. Los filtergraphs se presentan en dos variantes -simple y compleja-, configuradas respectivamente con las opciones -filter y -filter_complex.

Un filtergraph simple está asociado a un flujo elemental de salida; recibe desde un decoder la entrada que debe filtrarse y envía la salida filtrada al encoder de ese flujo de salida.

Un filtergraph simple de vídeo que realiza desentrelazado (usando el desentrelazador yadif) seguido de un cambio de tamaño (usando el filtro scale) puede tener este aspecto:

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

Un filtergraph complejo es independiente y no está asociado a ningún flujo específico. Puede tener varias entradas (o ninguna), potencialmente de distintos tipos (audio o vídeo), cada una recibiendo datos de un decoder o de la salida de otro filtergraph complejo. También tiene una o más salidas que alimentan a un encoder o a la entrada de otro filtergraph complejo.

El siguiente diagrama de ejemplo representa un filtergraph complejo con 3 entradas y 2 salidas (todas de vídeo):

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

Los fotogramas de la segunda entrada se superponen sobre los de la primera. Los fotogramas de la tercera entrada se reescalan y después se duplican en dos flujos idénticos. Uno de ellos se superpone sobre la combinación de las dos primeras entradas, y el resultado se expone como la primera salida del filtergraph. El otro duplicado termina siendo la segunda salida del filtergraph.

  • Los encoders reciben fotogramas de audio, vídeo o subtítulos sin procesar y los codifican en paquetes codificados. El proceso de codificación (compresión) suele ser con pérdida (degrada la calidad del flujo para reducir el tamaño de la salida); algunos encoders son sin pérdida, pero a costa de un tamaño de salida mucho mayor. Un encoder de vídeo o audio recibe su entrada de la salida de algún filtergraph; los encoders de subtítulos reciben la entrada de un decoder (ya que el filtrado de subtítulos aún no se admite). Cada encoder está asociado al flujo elemental de salida de algún muxer y le envía su salida.

Una representación esquemática de un encoder tiene este aspecto:

    ┌─────────┐
     raw frames  │         │ packets
    ────────────►│ encoder ├─────────►
                 │         │
                 └─────────┘
  • Los muxers (abreviatura de "multiplexores") reciben, para sus flujos elementales, paquetes codificados procedentes de encoders (la ruta de transcodificación) o directamente de demuxers (la ruta de copia de flujo), los intercalan (cuando hay más de un flujo elemental) y escriben los bytes resultantes en el archivo de salida (o tubería, flujo de red, etc.).

Una representación esquemática de un muxer tiene este aspecto:

    ┌──────────────────────┬───────────┐
     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 Copia de flujo

La canalización más simple en ffmpeg es la copia de flujo de un solo flujo, es decir, copiar los paquetes de un flujo elemental de entrada sin decodificarlos, filtrarlos ni codificarlos. Como ejemplo, consideremos un archivo de entrada llamado INPUT.mkv con 3 flujos elementales, del que tomamos el segundo y lo escribimos en el archivo OUTPUT.mp4. Una representación esquemática de esta canalización tiene este aspecto:

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

La canalización anterior puede construirse con la siguiente línea de comandos:

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

En esta línea de comandos

  • hay una única entrada, INPUT.mkv;
  • no hay opciones de entrada para esta entrada;
  • hay una única salida, OUTPUT.mp4;
  • hay dos opciones de salida para esta salida:
    • -map 0:1 selecciona el flujo de entrada que se va a usar: de la entrada con índice 0 (es decir, la primera) se toma el flujo con índice 1 (es decir, el segundo);
    • -c copy selecciona el encoder copy, es decir, copia de flujo sin decodificación ni codificación.

La copia de flujo es útil para cambiar el número de flujos elementales, el formato de container o modificar los metadatos a nivel de container. Como no hay decodificación ni codificación, es muy rápida y no hay pérdida de calidad. Sin embargo, puede que no funcione en algunos casos debido a diversos factores (por ejemplo, que el container de destino necesite cierta información que no esté disponible en la fuente). Aplicar filtros obviamente también es imposible, ya que los filtros trabajan sobre fotogramas decodificados.

Se pueden construir escenarios de copia de flujo más complejos; por ejemplo, combinar flujos de dos archivos de entrada en una única salida:

┌──────────┬────────────────────┐         ┌────────────────────┬───────────┐
│ 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 puede construirse con la línea de comandos

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

Aquí la opción de salida -map se usa dos veces, creando dos flujos en el archivo de salida: uno alimentado por la primera entrada y otro por la segunda. La única instancia de la opción -c selecciona copia de flujo para ambos flujos. También podría usar varias instancias de esta opción junto con especificadores de flujo para aplicar valores distintos a cada flujo, como se mostrará en las secciones siguientes.

Un escenario inverso es dividir varios flujos de una sola entrada en varias salidas:

┌──────────┬─────────────────────┐          ┌───────────────────┬───────────┐
│ 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│
                                            └───────────────────┴───────────┘

construido con

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

Observe cómo se necesita una instancia separada de la opción -c para cada archivo de salida, aunque sus valores sean los mismos. Esto se debe a que las opciones no globales (que son la mayoría) solo se aplican en el contexto del archivo delante del cual se colocan.

Por supuesto, estos ejemplos pueden generalizarse aún más a reasignaciones arbitrarias de cualquier número de entradas a cualquier número de salidas.

3.2 Transcodificación

La transcodificación es el proceso de decodificar un flujo y volver a codificarlo. Dado que la codificación suele ser computacionalmente costosa y en la mayoría de los casos degrada la calidad del flujo (es decir, es con pérdida), solo debería transcodificar cuando sea necesario y, en caso contrario, realizar copia de flujo. Los motivos habituales para transcodificar son:

  • aplicar filtros: por ejemplo, cambiar el tamaño, desentrelazar o superponer vídeo; remuestrear o mezclar audio;
  • querer entregar el flujo a algo que no puede decodificar el codec original.

Tenga en cuenta que ffmpeg transcodificará todos los flujos de audio, vídeo y subtítulos a menos que especifique -c copy para ellos.

Consideremos un ejemplo de canalización que lee un archivo de entrada con un flujo de audio y uno de vídeo, transcodifica el vídeo y copia el audio en un único archivo de salida. Esto puede representarse esquemáticamente así

┌──────────┬─────────────────────┐
│ 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)    │◄────────────────────────────────────╯
│          │                     │
└──────────┴─────────────────────┘

y se implementa con la siguiente línea de comandos:

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

Observe cómo se usan los especificadores de flujo :v y :a para seleccionar los flujos de entrada y aplicarles valores distintos de la opción -c; consulte la sección Especificadores de flujo para más detalles.

3.3 Filtrado

Al transcodificar, los flujos de audio y vídeo pueden filtrarse antes de la codificación mediante un filtergraph simple o un filtergraph complejo.

3.3.1 Filtergraphs simples

Los filtergraphs simples son aquellos que tienen exactamente una entrada y una salida, ambas del mismo tipo (audio o vídeo). Se configuran con la opción -filter por flujo (con los alias -vf y -af para -filter:v (vídeo) y -filter:a (audio) respectivamente). Tenga en cuenta que los filtergraphs simples están ligados a su flujo de salida, de modo que, por ejemplo, si tiene varios flujos de audio, -af creará un filtergraph independiente para cada uno.

Retomando el ejemplo de transcodificación anterior, si añadimos filtrado (y omitimos el audio, por claridad) queda así:

┌──────────┬───────────────┐
│ 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 complejos

Los filtergraphs complejos son aquellos que no pueden describirse simplemente como una cadena de procesamiento lineal aplicada a un único flujo. Esto ocurre, por ejemplo, cuando el grafo tiene más de una entrada y/o salida, o cuando el tipo del flujo de salida es distinto del de entrada. Los filtergraphs complejos se configuran con la opción -filter_complex. Tenga en cuenta que esta opción es global, ya que un filtergraph complejo, por su naturaleza, no puede asociarse de forma inequívoca a un único flujo o archivo. Cada instancia de -filter_complex crea un nuevo filtergraph complejo, y puede haber cualquier número de ellos.

Un ejemplo trivial de filtergraph complejo es el filtro overlay, que tiene dos entradas de vídeo y una salida de vídeo, y consiste en superponer un vídeo sobre el otro. Su equivalente para audio es el filtro amix.

3.4 Decoders loopback

Aunque los decoders normalmente están asociados a flujos de un demuxer, también es posible crear decoders "loopback" que decodifican la salida de algún encoder y permiten reintroducirla en filtergraphs complejos. Esto se hace con la directiva -dec, que toma como parámetro el índice del flujo de salida que debe decodificarse. Cada una de estas directivas crea un nuevo decoder loopback, indexado con enteros sucesivos a partir de cero. Estos índices deben usarse después para referirse a los decoders loopback en las etiquetas de enlace del filtergraph complejo, tal como se describe en la documentación de -filter_complex.

Las AVOptions de decodificación pueden pasarse a los decoders loopback colocándolas antes de -dec, de forma análoga a las opciones de entrada/salida.

Por ejemplo, el siguiente ejemplo:

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

lee un vídeo de entrada y

  • (línea 2) lo codifica con libx264 a baja calidad;
  • (línea 3) decodifica este flujo codificado usando 3 hilos;
  • (línea 4) coloca el vídeo decodificado lado a lado con el vídeo de entrada original;
  • (línea 5) el vídeo combinado se codifica entonces sin pérdida y se escribe en OUTPUT.

Esta canalización de transcodificación puede representarse con el siguiente diagrama:

┌──────────┬───────────────┐
│ 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 Selección de flujos

ffmpeg ofrece la opción -map para el control manual de la selección de flujos en cada archivo de salida. Los usuarios pueden omitir -map y dejar que ffmpeg realice la selección automática de flujos, como se describe a continuación. Las opciones -vn / -an / -sn / -dn pueden usarse para excluir, respectivamente, flujos de vídeo, audio, subtítulos y datos, ya sea que estén asignados manualmente o seleccionados automáticamente, excepto los flujos que son salidas de filtergraphs complejos.

4.1 Descripción

Las subsecciones siguientes describen las distintas reglas implicadas en la selección de flujos. Los ejemplos que vienen a continuación muestran cómo se aplican estas reglas en la práctica.

Aunque se hace todo lo posible por reflejar con precisión el comportamiento del programa, FFmpeg está en desarrollo continuo y el código puede haber cambiado desde el momento en que se escribió esto.

4.1.1 Selección automática de flujos

En ausencia de opciones -map para un archivo de salida concreto, ffmpeg examina el formato de salida para comprobar qué tipo de flujos puede incluir, a saber: vídeo, audio y/o subtítulos. Para cada tipo de flujo aceptable, ffmpeg elegirá un flujo, cuando esté disponible, de entre todas las entradas.

Seleccionará ese flujo según los siguientes criterios:

  • para vídeo, el flujo con la resolución más alta,
  • para audio, el flujo con más canales,
  • para subtítulos, el primer flujo de subtítulos encontrado, aunque hay una salvedad: el encoder de subtítulos predeterminado del formato de salida puede ser de texto o de imagen, y solo se elegirá un flujo de subtítulos del mismo tipo.

En caso de que varios flujos del mismo tipo obtengan la misma puntuación, se elige el flujo con el índice más bajo.

Los flujos de datos o de adjuntos no se seleccionan automáticamente y solo pueden incluirse mediante -map.

4.1.2 Selección manual de flujos

Cuando se usa -map, en ese archivo de salida solo se incluyen los flujos asignados manualmente por el usuario, con una posible excepción para las salidas de filtergraph que se describe a continuación.

4.1.3 Filtergraphs complejos

Si existen salidas de filtergraph complejo con pads sin etiquetar, se añadirán al primer archivo de salida. Esto provocará un error fatal si el formato de salida no admite ese tipo de flujo. En ausencia de la opción -map, la inclusión de estos flujos hace que se omita la selección automática de flujos de su tipo. Si hay opciones -map presentes, estos flujos de filtergraph se incluyen además de los flujos asignados.

Las salidas de filtergraph complejo con pads etiquetados deben asignarse una vez, y solo una vez.

4.1.4 Gestión de flujos

La gestión de flujos es independiente de la selección de flujos, con una excepción para los subtítulos que se describe a continuación. La gestión de flujos se configura mediante la opción -codec dirigida a flujos dentro de un archivo de salida concreto. En particular, las opciones de codec las aplica ffmpeg después del proceso de selección de flujos, por lo que no influyen en dicho proceso. Si no se especifica ninguna opción -codec para un tipo de flujo, ffmpeg seleccionará el encoder predeterminado registrado por el muxer del archivo de salida.

Existe una excepción para los subtítulos. Si se especifica un encoder de subtítulos para un archivo de salida, se incluirá el primer flujo de subtítulos encontrado, sea de texto o de imagen. ffmpeg no valida si el encoder especificado puede convertir el flujo seleccionado ni si el flujo convertido es aceptable dentro del formato de salida. Esto también se aplica en general: cuando el usuario establece un encoder manualmente, el proceso de selección de flujos no puede comprobar si el flujo codificado podrá incluirse en el archivo de salida. Si no puede, ffmpeg abortará y el procesamiento de todos los archivos de salida fallará.

4.2 Ejemplos

Los siguientes ejemplos ilustran el comportamiento, las peculiaridades y las limitaciones de los métodos de selección de flujos de ffmpeg.

Se asumen los siguientes tres archivos de entrada.

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)

Ejemplo: selección automática de flujos

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

Se han especificado tres archivos de salida, y para los dos primeros no se establecen opciones -map, así que ffmpeg seleccionará los flujos de estos dos archivos automáticamente.

out1.mkv es un archivo container Matroska y admite flujos de vídeo, audio y subtítulos, así que ffmpeg intentará seleccionar uno de cada tipo.
Para vídeo, seleccionará el stream 0 de B.mp4, que tiene la resolución más alta entre todos los flujos de vídeo de entrada.
Para audio, seleccionará el stream 3 de B.mp4, ya que tiene el mayor número de canales.
Para subtítulos, seleccionará el stream 2 de B.mp4, que es el primer flujo de subtítulos entre A.avi y B.mp4.

out2.wav solo admite flujos de audio, así que únicamente se selecciona el stream 3 de B.mp4.

Para out3.mov, como se establece una opción -map, no se produce selección automática de flujos. La opción -map 1:a seleccionará todos los flujos de audio de la segunda entrada, B.mp4. Ningún otro flujo se incluirá en este archivo de salida.

Para las dos primeras salidas, todos los flujos incluidos se transcodificarán. Los encoders elegidos serán los predeterminados registrados por cada formato de salida, que pueden no coincidir con el codec de los flujos de entrada seleccionados.

Para la tercera salida, la opción de codec para los flujos de audio se ha fijado en copy, así que no se realizará (ni puede realizarse) ninguna operación de decodificación, filtrado o codificación. Los paquetes de los flujos seleccionados se transportarán desde el archivo de entrada y se incluirán en el archivo de salida.

Ejemplo: selección automática de subtítulos

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

Aunque out1.mkv es un archivo container Matroska que admite flujos de subtítulos, solo se seleccionarán un flujo de vídeo y uno de audio. El flujo de subtítulos de C.mkv es de imagen, y el encoder de subtítulos predeterminado del muxer Matroska es de texto, así que se espera que la operación de transcodificación de los subtítulos falle y, por tanto, el flujo no se selecciona. Sin embargo, en out2.mkv se especifica un encoder de subtítulos en el comando, así que el flujo de subtítulos se selecciona, además del flujo de vídeo. La presencia de -an deshabilita la selección de flujos de audio para out2.mkv.

Ejemplo: salidas de filtergraph sin etiquetar

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

Aquí se configura un filtergraph mediante la opción -filter_complex, que consiste en un único filtro de vídeo. El filtro overlay requiere exactamente dos entradas de vídeo, pero no se especifica ninguna, así que se usan los dos primeros flujos de vídeo disponibles, los de A.avi y C.mkv. El pad de salida del filtro no tiene etiqueta, así que se envía al primer archivo de salida, out1.mp4. Por ello se omite la selección automática del flujo de vídeo, que habría seleccionado el flujo de B.mp4. El flujo de audio con más canales, es decir, el stream 3 de B.mp4, se elige automáticamente. Sin embargo, no se elige ningún flujo de subtítulos, ya que el formato MP4 no tiene registrado ningún encoder de subtítulos predeterminado y el usuario no ha especificado ninguno.

El segundo archivo de salida, out2.srt, solo admite flujos de subtítulos basados en texto. Así que, aunque el primer flujo de subtítulos disponible pertenece a C.mkv, es de imagen y por tanto se omite. El flujo seleccionado, el stream 2 de B.mp4, es el primer flujo de subtítulos de texto.

Ejemplo: salidas de filtergraph etiquetadas

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

El comando anterior fallará, ya que el pad de salida etiquetado [outv] se ha asignado dos veces. Ninguno de los archivos de salida se procesará.

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

Este comando también fallará, ya que la salida del filtro hue tiene una etiqueta, [outv], que no se ha asignado en ningún sitio.

El comando debería modificarse de la siguiente manera,

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

El flujo de vídeo de B.mp4 se envía al filtro hue, cuya salida se clona una vez mediante el filtro split, y ambas salidas quedan etiquetadas. Después se asigna una copia de cada una al primer y al tercer archivo de salida.

El filtro overlay, que requiere dos entradas de vídeo, usa los dos primeros flujos de vídeo no utilizados, que son los de A.avi y C.mkv. La salida de overlay no está etiquetada, así que se envía al primer archivo de salida, out1.mp4, independientemente de la presencia de la opción -map.

Al filtro aresample se le envía el primer flujo de audio no utilizado, el de A.avi. Como la salida de este filtro tampoco está etiquetada, también se asigna al primer archivo de salida. La presencia de -an solo suprime la selección automática o manual de flujos de audio, no las salidas provenientes de filtergraphs. Ambos flujos asignados se ordenarán antes que el flujo asignado en out1.mp4.

Los flujos de vídeo, audio y subtítulos asignados a out2.mkv se determinan enteramente mediante la selección automática de flujos.

out3.mkv consiste en la salida de vídeo clonada del filtro hue y en el primer flujo de audio de B.mp4.

5 Opciones

Todas las opciones numéricas, si no se indica lo contrario, aceptan como entrada una cadena que representa un número, que puede ir seguida de uno de los prefijos de unidad del SI, por ejemplo: ’K’, ’M’ o ’G’.

Si se añade ’i’ al prefijo de unidad del SI, el prefijo completo se interpretará como un prefijo de unidad para múltiplos binarios, basados en potencias de 1024 en lugar de potencias de 1000. Añadir ’B’ al prefijo de unidad del SI multiplica el valor por 8. Esto permite usar, por ejemplo, ’KB’, ’MiB’, ’G’ y ’B’ como sufijos numéricos.

Las opciones que no toman argumentos son opciones booleanas y establecen el valor correspondiente en verdadero (true). Pueden ponerse en falso (false) anteponiendo "no" al nombre de la opción. Por ejemplo, usar "-nofoo" pondrá la opción booleana llamada "foo" en false.

Las opciones que aceptan argumentos admiten una sintaxis especial en la que el argumento indicado en la línea de comandos se interpreta como la ruta a un archivo desde el que se carga el valor real del argumento. Para usar esta característica, añada una barra inclinada ’/’ justo antes del nombre de la opción (después del guion inicial). Por ejemplo:

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

esto cargará una descripción de filtergraph desde el archivo llamado filter.script.

5.1 Especificadores de flujo

Algunas opciones se aplican por flujo, por ejemplo, la tasa de bits o el codec. Los especificadores de flujo se usan para indicar con precisión a qué flujo o flujos pertenece una opción dada.

Un especificador de flujo suele ser una cadena que se añade al nombre de la opción y se separa de él con dos puntos. Por ejemplo, -codec:a:1 ac3 contiene el especificador de flujo a:1, que coincide con el segundo flujo de audio. Por tanto, seleccionaría el codec ac3 para el segundo flujo de audio.

Un especificador de flujo puede coincidir con varios flujos, de modo que la opción se aplica a todos ellos. Por ejemplo, el especificador de flujo en -b:a 128k coincide con todos los flujos de audio.

Un especificador de flujo vacío coincide con todos los flujos. Por ejemplo, -codec copy o -codec: copy copiaría todos los flujos sin recodificar.

Las formas posibles de los especificadores de flujo son:

stream_index

Coincide con el flujo que tiene este índice. Por ejemplo, -threads:1 4 establecería el número de hilos del segundo flujo en 4. Si stream_index se usa como especificador de flujo adicional (véase más abajo), entonces selecciona el flujo número stream_index de entre los flujos coincidentes. La numeración de flujos se basa en el orden de los flujos tal como los detecta libavformat, excepto cuando también se especifica un especificador de grupo de flujos o un ID de programa; en ese caso se basa en el orden de los flujos dentro del grupo o programa.

stream_type[:additional_stream_specifier]

stream_type es uno de los siguientes: ’v’ o ’V’ para vídeo, ’a’ para audio, ’s’ para subtítulos, ’d’ para datos y ’t’ para adjuntos. ’v’ coincide con todos los flujos de vídeo; ’V’ solo coincide con flujos de vídeo que no sean imágenes adjuntas, miniaturas de vídeo ni carátulas. Si se usa additional_stream_specifier, entonces coincide con los flujos que tienen ese tipo y además coinciden con additional_stream_specifier. En caso contrario, coincide con todos los flujos del tipo especificado.

g:group_specifier[:additional_stream_specifier]

Coincide con los flujos que están en el grupo con el especificador group_specifier. Si se usa additional_stream_specifier, entonces coincide con los flujos que forman parte del grupo y además coinciden con additional_stream_specifier. group_specifier puede ser uno de los siguientes:

group_index

Coincide con el flujo que tiene este índice de grupo.

#group_id o i:group_id

Coincide con el flujo que tiene este ID de grupo.

p:program_id[:additional_stream_specifier]

Coincide con los flujos que están en el programa con el id program_id. Si se usa additional_stream_specifier, entonces coincide con los flujos que forman parte del programa y además coinciden con additional_stream_specifier.

#stream_id o i:stream_id

Coincide con el flujo por su ID de flujo (por ejemplo, el PID en un container MPEG-TS).

m:key[:value]

Coincide con los flujos cuya etiqueta de metadatos key tiene el valor especificado. Si no se indica value, coincide con los flujos que contienen esa etiqueta con cualquier valor. El carácter de dos puntos ’:’ en key o value debe escaparse con una barra invertida.

disp:dispositions[:additional_stream_specifier]

Coincide con los flujos que tienen la(s) disposición(es) indicada(s). dispositions es una lista de una o más disposiciones (tal como las muestra la opción -dispositions) unidas con ’+’.

u

Coincide con flujos que tienen una configuración utilizable: el codec debe estar definido y debe estar presente la información esencial, como las dimensiones de vídeo o la frecuencia de muestreo de audio.

Tenga en cuenta que en ffmpeg la coincidencia por metadatos solo funciona correctamente para los archivos de entrada.

5.2 Opciones genéricas

Estas opciones son comunes a todas las herramientas ff*.

-L, -license

Muestra la licencia.

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

Muestra la ayuda. Se puede especificar un parámetro opcional para imprimir la ayuda sobre un elemento concreto. Si no se especifica ningún argumento, solo se muestran las opciones básicas de la herramienta (no las avanzadas).

Los valores posibles de arg son:

long

Imprime las opciones avanzadas de la herramienta, además de las opciones básicas.

full

Imprime la lista completa de opciones, incluidas las opciones compartidas y privadas de encoders, decoders, demuxers, muxers, filtros, etc.

decoder=decoder_name

Imprime información detallada sobre el decoder llamado decoder_name. Use la opción -decoders para obtener una lista de todos los decoders.

encoder=encoder_name

Imprime información detallada sobre el encoder llamado encoder_name. Use la opción -encoders para obtener una lista de todos los encoders.

demuxer=demuxer_name

Imprime información detallada sobre el demuxer llamado demuxer_name. Use la opción -formats para obtener una lista de todos los demuxers y muxers.

muxer=muxer_name

Imprime información detallada sobre el muxer llamado muxer_name. Use la opción -formats para obtener una lista de todos los muxers y demuxers.

filter=filter_name

Imprime información detallada sobre el filtro llamado filter_name. Use la opción -filters para obtener una lista de todos los filtros.

bsf=bitstream_filter_name

Imprime información detallada sobre el filtro de bitstream llamado bitstream_filter_name. Use la opción -bsfs para obtener una lista de todos los filtros de bitstream.

protocol=protocol_name

Imprime información detallada sobre el protocolo llamado protocol_name. Use la opción -protocols para obtener una lista de todos los protocolos.

-version

Muestra la versión.

-buildconf

Muestra la configuración de compilación, una opción por línea.

-formats

Muestra los formatos disponibles (incluidos los dispositivos).

-demuxers

Muestra los demuxers disponibles.

-muxers

Muestra los muxers disponibles.

-devices

Muestra los dispositivos disponibles.

-codecs

Muestra todos los codecs que conoce libavcodec.

Tenga en cuenta que en esta documentación el término ’codec’ se usa como forma abreviada de lo que, con más precisión, se denomina formato de bitstream multimedia.

-decoders

Muestra los decoders disponibles.

-encoders

Muestra todos los encoders disponibles.

-bsfs

Muestra los filtros de bitstream disponibles.

-protocols

Muestra los protocolos disponibles.

-filters

Muestra los filtros de libavfilter disponibles.

-pix_fmts

Muestra los pixel formats disponibles.

-sample_fmts

Muestra los sample formats disponibles.

-layouts

Muestra los nombres de canal y las disposiciones de canal estándar.

-dispositions

Muestra las disposiciones de flujo.

-colors

Muestra los nombres de color reconocidos.

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

Muestra las fuentes detectadas automáticamente del dispositivo de entrada. Algunos dispositivos pueden proporcionar nombres de fuente que dependen del sistema y no pueden detectarse automáticamente. No puede asumirse que la lista devuelta esté siempre completa.

ffmpeg -sources pulse,server=192.168.0.4

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

Muestra los sumideros detectados automáticamente del dispositivo de salida. Algunos dispositivos pueden proporcionar nombres de sumidero que dependen del sistema y no pueden detectarse automáticamente. No puede asumirse que la lista devuelta esté siempre completa.

ffmpeg -sinks pulse,server=192.168.0.4

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

Establece el nivel de registro y los flags que usa la biblioteca.

El prefijo opcional de flags puede constar de los siguientes valores:

‘repeat’

Indica que la salida de registro repetida no debe comprimirse en la primera línea y que se omitirá la línea "Last message repeated n times".

‘level’

Indica que la salida de registro debe añadir un prefijo [level] a cada línea de mensaje. Esto puede usarse como alternativa a la coloración del registro, por ejemplo al volcar el registro a un archivo.

‘time’

Indica que las líneas de registro deben llevar como prefijo información de hora.

‘datetime’

Indica que las líneas de registro deben llevar como prefijo información de fecha y hora.

Los flags también pueden usarse solos añadiendo un prefijo ’+’/’-’ para activar/desactivar un único flag sin afectar a los demás ni cambiar el loglevel. Al establecer flags y loglevel juntos, se espera un separador ’+’ entre el último valor de flags y el loglevel.

loglevel es una cadena o un número que contiene uno de los siguientes valores:

‘quiet, -8’

No muestra absolutamente nada; modo silencioso.

‘panic, 0’

Solo muestra errores fatales que podrían provocar que el proceso falle, como un fallo de aserción. Actualmente esto no se usa para nada.

‘fatal, 8’

Solo muestra errores fatales. Son errores tras los cuales el proceso no puede continuar en absoluto.

‘error, 16’

Muestra todos los errores, incluidos aquellos de los que se puede recuperar.

‘warning, 24’

Muestra todas las advertencias y errores. Se mostrará cualquier mensaje relacionado con eventos posiblemente incorrectos o inesperados.

‘info, 32’

Muestra mensajes informativos durante el procesamiento. Esto se añade a las advertencias y errores. Este es el valor predeterminado.

‘verbose, 40’

Igual que info, pero más detallado.

‘debug, 48’

Muestra todo, incluida la información de depuración.

‘trace, 56’

Por ejemplo, para habilitar la salida de registro repetida, añadir el prefijo level y establecer loglevel en verbose:

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

Otro ejemplo que habilita la salida de registro repetida sin afectar al estado actual del flag de prefijo level ni al loglevel:

ffmpeg [...] -loglevel +repeat

De forma predeterminada, el programa registra en stderr. Si el terminal admite color, se usan colores para marcar errores y advertencias. La coloración del registro puede deshabilitarse estableciendo la variable de entorno AV_LOG_FORCE_NOCOLOR, o forzarse estableciendo la variable de entorno AV_LOG_FORCE_COLOR.

-report

Vuelca la línea de comandos completa y la salida de registro a un archivo llamado program-YYYYMMDD-HHMMSS.log en el directorio actual. Este archivo puede ser útil para informes de errores. También implica -loglevel debug.

Establecer la variable de entorno FFREPORT con cualquier valor tiene el mismo efecto. Si el valor es una secuencia clave=valor separada por ’:’, estas opciones afectarán al informe; los valores de las opciones deben escaparse si contienen caracteres especiales o el delimitador de opciones ’:’ (véase la sección “Comillas y escape” en el manual ffmpeg-utils).

Se reconocen las siguientes opciones:

file

establece el nombre de archivo que se usará para el informe; %p se expande al nombre del programa, %t se expande a una marca de tiempo, %% se expande a un % literal

level

establece el nivel de verbosidad del registro usando un valor numérico (véase -loglevel).

Por ejemplo, para escribir un informe en un archivo llamado ffreport.log usando un nivel de registro de 32 (alias del nivel de registro info):

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

Los errores al analizar la variable de entorno no son fatales y no aparecerán en el informe.

-hide_banner

Suprime la impresión del banner.

Todas las herramientas de FFmpeg normalmente muestran un aviso de copyright, las opciones de compilación y las versiones de las bibliotecas. Esta opción puede usarse para suprimir la impresión de esta información.

-cpuflags flags (global)

Permite establecer y borrar flags de CPU. Esta opción está pensada para pruebas. No la use a menos que sepa lo que está haciendo.

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

Los flags posibles para esta opción son:

‘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)

Anula la detección del número de CPU. Esta opción está pensada para pruebas. No la use a menos que sepa lo que está haciendo.

ffmpeg -cpucount 2

-max_alloc bytes

Establece el límite máximo de tamaño para asignar un bloque en el montón mediante la familia de funciones malloc de ffmpeg. Extreme la precaución al usar esta opción. No la use si no entiende todas las consecuencias de hacerlo. El valor predeterminado es INT_MAX.

5.3 AVOptions

Estas opciones las proporcionan directamente las bibliotecas libavformat, libavdevice y libavcodec. Para ver la lista de AVOptions disponibles, use la opción -help. Se dividen en dos categorías:

generic

Estas opciones se pueden establecer para cualquier container, codec o dispositivo. Las opciones generic se listan en las opciones de AVFormatContext para containers/dispositivos y en las opciones de AVCodecContext para codecs.

private

Estas opciones son específicas del container, dispositivo o codec dado. Las opciones private se listan bajo su container/dispositivo/codec correspondiente.

Por ejemplo, para escribir una cabecera ID3v2.3 en lugar de la ID3v2.4 predeterminada en un archivo MP3, use la opción private id3v2_version del muxer de MP3:

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

Todas las AVOptions de codec son por flujo, así que se les debe adjuntar un especificador de flujo:

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

En el ejemplo anterior, un flujo de audio multicanal se mapea dos veces para la salida. La primera instancia se codifica con el codec ac3 y una tasa de bits de 640k. La segunda instancia se reduce a 2 canales (downmix) y se codifica con el codec aac. Para ella se especifica una tasa de bits de 128k usando el índice absoluto del flujo de salida.

Nota: la sintaxis -nooption no se puede usar con AVOptions booleanas; use -option 0/-option 1.

Nota: la antigua forma no documentada de especificar AVOptions por flujo anteponiendo v/a/s al nombre de la opción está ahora obsoleta y se eliminará pronto.

5.4 Opciones principales

-f fmt (input/output)

Fuerza el formato del archivo de entrada o de salida. El formato normalmente se detecta automáticamente para los archivos de entrada y se deduce de la extensión del archivo para los de salida, por lo que esta opción no es necesaria en la mayoría de los casos.

-i url (input)

url del archivo de entrada

-y (global)

Sobrescribe los archivos de salida sin preguntar.

-n (global)

No sobrescribe los archivos de salida y sale inmediatamente si un archivo de salida especificado ya existe.

-stream_loop number (input)

Establece el número de veces que se repetirá en bucle el flujo de entrada. Loop 0 significa sin bucle, loop -1 significa bucle infinito.

-recast_media (global)

Permite forzar un decoder de un tipo de medio distinto del detectado o designado por el demuxer. Útil para decodificar datos multimedia multiplexados como flujos de datos.

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

Selecciona un encoder (cuando se usa antes de un archivo de salida) o un decoder (cuando se usa antes de un archivo de entrada) para uno o más flujos. codec es el nombre de un decoder/encoder o un valor especial copy (solo salida) para indicar que el flujo no debe volver a codificarse.

Por ejemplo

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

codifica todos los flujos de vídeo con libx264 y copia todos los flujos de audio.

Para cada flujo se aplica la última opción c que coincida, así que

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

copiará todos los flujos excepto el segundo de vídeo, que se codificará con libx264, y el audio número 138, que se codificará con libvorbis.

-t duration (input/output)

Cuando se usa como opción de entrada (antes de -i), limita la duración de los datos leídos del archivo de entrada.

Cuando se usa como opción de salida (antes de una url de salida), detiene la escritura de la salida cuando su duración alcanza duration.

duration debe ser una especificación de duración temporal; véase (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-to y -t son mutuamente excluyentes y -t tiene prioridad.

-to position (input/output)

Detiene la escritura de la salida o la lectura de la entrada en position. position debe ser una especificación de duración temporal; véase (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-to y -t son mutuamente excluyentes y -t tiene prioridad.

-fs limit_size (output)

Establece el límite de tamaño del archivo, expresado en bytes. No se escribe ningún bloque adicional de bytes una vez superado el límite. El tamaño del archivo de salida es ligeramente mayor que el tamaño solicitado.

-ss position (input/output)

Cuando se usa como opción de entrada (antes de -i), busca en este archivo de entrada hasta position. Tenga en cuenta que en la mayoría de los formatos no es posible buscar con exactitud, por lo que ffmpeg buscará el punto de búsqueda más cercano anterior a position. Al transcodificar y con -accurate_seek habilitado (el valor predeterminado), ese segmento extra entre el punto de búsqueda y position se decodificará y descartará. Al hacer copia de flujo o cuando se usa -noaccurate_seek, se conservará.

Cuando se usa como opción de salida (antes de una url de salida), decodifica pero descarta la entrada hasta que las marcas de tiempo alcanzan position.

position debe ser una especificación de duración temporal; véase (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-sseof position (input)

Como la opción -ss, pero relativa al "final del archivo". Es decir, los valores negativos son anteriores en el archivo, y 0 es el EOF.

-isync input_index (input)

Asigna una entrada como fuente de sincronización.

Esto toma la diferencia entre los tiempos de inicio de la entrada de destino y la de referencia, y desplaza las marcas de tiempo del archivo de destino según esa diferencia. Las marcas de tiempo de origen de ambas entradas deberían derivar de la misma fuente de reloj para obtener los resultados esperados. Si se establece copyts, también debe establecerse start_at_zero. Si alguna de las entradas no tiene marca de tiempo de inicio, no se realiza ningún ajuste de sincronización.

Los valores aceptables son los que hacen referencia a un índice de entrada de ffmpeg válido. Si la referencia de sincronización es el propio índice de destino o -1, no se aplica ningún ajuste a las marcas de tiempo de destino. Una referencia de sincronización no puede a su vez estar sincronizada con ninguna otra entrada.

El valor predeterminado es -1.

-itsoffset offset (input)

Establece el desplazamiento de tiempo de la entrada.

offset debe ser una especificación de duración temporal; véase (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

El offset se suma a las marcas de tiempo de los archivos de entrada. Especificar un offset positivo hace que los flujos correspondientes se retrasen la duración indicada en offset.

-itsscale scale (input,per-stream)

Reescala las marcas de tiempo de entrada. scale debe ser un número de coma flotante.

-timestamp date (output)

Establece la marca de tiempo de grabación en el container.

date debe ser una especificación de fecha; véase (ffmpeg-utils)the Date section in the ffmpeg-utils(1) manual.

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

Establece un par clave/valor de metadatos.

Se puede indicar opcionalmente un metadata_specifier para establecer metadatos en flujos, capítulos o programas. Véase la documentación de -map_metadata para más detalles.

Esta opción anula los metadatos establecidos con -map_metadata. También es posible eliminar metadatos usando un valor vacío.

Por ejemplo, para establecer el título en el archivo de salida:

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

Para establecer el idioma del primer flujo de audio:

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

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

Establece los flags de disposición de un flujo.

Valor predeterminado: de forma predeterminada, todos los flags de disposición se copian del flujo de entrada, salvo que el flujo de salida al que se aplica esta opción provenga de un complex filtergraph; en ese caso no se establece ningún flag de disposición de forma predeterminada.

value es una secuencia de flags de disposición separados por ’+’ o ’-’. Un prefijo ’+’ añade la disposición indicada y ’-’ la elimina. Si el primer flag también lleva el prefijo ’+’ o ’-’, la disposición resultante es el valor predeterminado actualizado con value. Si el primer flag no lleva prefijo, la disposición resultante es value. También es posible borrar la disposición estableciéndola en 0.

Si no se especifica ninguna opción -disposition para un archivo de salida, ffmpeg establecerá automáticamente el flag de disposición ’default’ en el primer flujo de cada tipo, cuando haya varios flujos de ese tipo en el archivo de salida y ninguno de ellos esté ya marcado como default.

La opción -dispositions lista los flags de disposición conocidos.

Por ejemplo, para hacer del segundo flujo de audio el flujo predeterminado:

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

Para hacer del segundo flujo de subtítulos el flujo predeterminado y quitar la disposición default del primer flujo de subtítulos:

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

Para añadir una carátula/miniatura incrustada:

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

Para añadir ’original’ y quitar el flag de disposición ’comment’ del primer flujo de audio sin eliminar sus demás flags de disposición:

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

Para quitar ’original’ y añadir el flag de disposición ’comment’ al primer flujo de audio sin eliminar sus demás flags de disposición:

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

Para establecer solo los flags de disposición ’original’ y ’comment’ en el primer flujo de audio (y quitar sus demás flags de disposición):

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

Para quitar todos los flags de disposición del primer flujo de audio:

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

No todos los muxers admiten miniaturas incrustadas, y los que lo hacen solo admiten unos pocos formatos, como JPEG o PNG.

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

Crea un programa con el title y program_num especificados, y le añade el/los stream(s) indicado(s).

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

Crea un grupo de flujos del type y stream_group_id especificados, o mapeando un grupo de entrada, añadiéndole el/los stream(s) indicado(s) y/o el/los stream_group(s) definido(s) previamente.

type puede ser uno de los siguientes:

iamf_audio_element

Agrupa flujos que pertenecen al mismo Audio Element de IAMF

Para este tipo de grupo están disponibles las siguientes opciones

audio_element_type

El tipo de Audio Element. Se admiten los siguientes valores:

channel

Representación de audio por canales escalable

scene

Representación ambisónica

demixing

Información de demixing usada para reconstruir una representación de audio por canales escalable. Esta opción debe separarse del resto con una ’,’ y admite las siguientes opciones key=value

parameter_id

Un identificador al que pueden referirse los bloques de parámetros en los fotogramas

dmixp_mode

Una combinación predefinida de parámetros de demixing

recon_gain

Información de recon gain usada para reconstruir una representación de audio por canales escalable. Esta opción debe separarse del resto con una ’,’ y admite las siguientes opciones key=value

parameter_id

Un identificador al que pueden referirse los bloques de parámetros en los fotogramas

layer

Una capa que define un Channel Layout en el Audio Element. Esta opción debe separarse del resto con una ’,’. Se pueden definir varias entradas separadas por ’,’, y debe establecerse al menos una.

Admite las siguientes opciones key=value separadas por ":"

ch_layout

La disposición de canales de la capa

flags

Están disponibles los siguientes flags:

recon_gain

Si se debe señalar la presencia de recon_gain como metadatos en los bloques de parámetros dentro de los fotogramas

output_gain output_gain_flags

A qué canales se aplica output_gain. Están disponibles los siguientes flags:

FL FR BL BR TFL TFR ambisonics_mode

El modo ambisónico. No tiene efecto si audio_element_type está establecido en channel.

Se admiten los siguientes valores:

mono

Cada canal ambisónico se codifica como un flujo mono individual dentro del grupo

default_w

Valor de peso predeterminado

iamf_mix_presentation

Agrupa flujos que pertenecen a todos los Audio Element de IAMF a los que hace referencia el mismo Mix Presentation de IAMF

Para este tipo de grupo están disponibles las siguientes opciones

submix

Un sub-mix dentro del Mix Presentation. Esta opción debe separarse del resto con una ’,’. Se pueden definir varias entradas separadas por ’,’, y debe establecerse al menos una.

Admite las siguientes opciones key=value separadas por ":"

parameter_id

Un identificador al que pueden referirse los bloques de parámetros en los fotogramas, para el postprocesado de la señal de audio mezclada al generar la señal de audio de reproducción

parameter_rate

La frecuencia de muestreo en la que se expresan los campos de duración de los bloques de parámetros en los fotogramas que se refieren a este parameter_id

default_mix_gain

Valor de ganancia de mezcla predeterminado que se aplica cuando no hay bloques de parámetros que compartan el mismo parameter_id para un fotograma dado

element

Referencia a un Audio Element usado en este Mix Presentation para generar la señal de audio de salida final de reproducción. Esta opción debe separarse del resto con una ’|’. Se pueden definir varias entradas separadas por ’|’, y debe establecerse al menos una.

Admite las siguientes opciones key=value separadas por ":":

stg

El stream_group_id del Audio Element al que se refiere este sub-mix

parameter_id

Un identificador al que pueden referirse los bloques de parámetros en los fotogramas, para aplicar cualquier procesamiento al Audio Element referenciado y renderizado antes de sumarlo con otros Audio Elements procesados

parameter_rate

La frecuencia de muestreo en la que se expresan los campos de duración de los bloques de parámetros en los fotogramas que se refieren a este parameter_id

default_mix_gain

Valor de ganancia de mezcla predeterminado que se aplica cuando no hay bloques de parámetros que compartan el mismo parameter_id para un fotograma dado

annotations

Una cadena key=value que describe el elemento sub-mix, donde "key" es una cadena conforme a BCP-47 que especifica el idioma de la cadena "value". "key" debe coincidir con el de las annotations del mix

headphones_rendering_mode

Indica si el Audio Element de entrada basado en canales se renderiza para altavoces estéreo o se espacializa con un renderizador binaural al reproducirse en auriculares. No tiene efecto si el audio_element_type del Audio Element referenciado está establecido en channel.

Se admiten los siguientes valores:

stereo binaural layout

Especifica los layouts de este sub-mix sobre los que se midió la información de sonoridad (loudness). Esta opción debe separarse del resto con una ’|’. Se pueden definir varias entradas separadas por ’|’, y debe establecerse al menos una.

Admite las siguientes opciones key=value separadas por ":":

layout_type

loudspeakers

El layout sigue la convención de sistemas de altavoces (sound system) de ITU-2051-3.

binaural

El layout es binaural.

sound_system

Disposición de canales que corresponde a uno de los Sound Systems A a J de ITU-2051-3, más 7.1.2 y 3.1.2. No tiene efecto si layout_type está establecido en binaural.

integrated_loudness

La información de sonoridad integrada (integrated loudness) del programa, según se define en ITU-1770-4.

digital_peak

El valor de pico digital (muestreado) de la señal de audio, según se define en ITU-1770-4.

true_peak

El true peak de la señal de audio, según se define en ITU-1770-4.

dialog_anchored_loudness

La información de sonoridad del diálogo (Dialogue loudness), según se define en ITU-1770-4.

album_anchored_loudness

La información de sonoridad del álbum (Album loudness), según se define en ITU-1770-4.

annotations

Una cadena key=value que describe el mix, donde "key" es una cadena conforme a BCP-47 que especifica el idioma de la cadena "value". "key" debe coincidir con el de las annotations de todos los elementos sub-mix

Por ejemplo, para crear un archivo IAMF 5.1 escalable a partir de varios archivos WAV de entrada

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

Para copiar los dos grupos de flujos (Audio Element y Mix Presentation) de un archivo IAMF de entrada con cuatro flujos a una salida 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)

Especifica el tipo de archivo de destino (vcd, svcd, dvd, dv, dv50). type puede ir precedido de pal-, ntsc- o film- para usar el estándar correspondiente. Todas las opciones de formato (bitrate, codecs, tamaños de buffer) se establecen entonces automáticamente. Basta con escribir:

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

Aun así, puede especificar opciones adicionales siempre que sepa que no entran en conflicto con el estándar, como en:

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

Los parámetros establecidos para cada destino son los siguientes.

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

El destino dv50 es idéntico al destino dv, salvo que el pixel format establecido es yuv422p para los tres estándares.

Cualquier valor establecido por el usuario para un parámetro anterior anulará el valor preestablecido del destino. En ese caso, la salida podría no cumplir con el estándar de destino.

-dn (input/output)

Como opción de entrada, impide que todos los flujos de datos de un archivo se filtren o se seleccionen/mapeen automáticamente para cualquier salida. Véase la opción -discard para deshabilitar flujos individualmente.

Como opción de salida, deshabilita la grabación de datos, es decir, la selección o el mapeo automático de cualquier flujo de datos. Para un control manual completo, véase la opción -map.

-dframes number (output)

Establece el número de fotogramas de datos que se generarán. Es un alias obsoleto de -frames:d, que debería usar en su lugar.

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

Detiene la escritura en el flujo tras framecount fotogramas.

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

Usa una escala de calidad fija (VBR). El significado de q/qscale depende del codec. Si qscale se usa sin un stream_specifier, se aplica solo al flujo de vídeo; esto es para mantener la compatibilidad con el comportamiento anterior, ya que especificar el mismo valor propio de un codec para 2 codecs distintos, es decir audio y vídeo, generalmente no es lo que se pretende cuando no se usa un stream_specifier.

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

Crea el filtergraph especificado por filtergraph y lo usa para filtrar el flujo.

filtergraph es una descripción del filtergraph que se aplicará al flujo, y debe tener una única entrada y una única salida del mismo tipo que el flujo. Dentro del filtergraph, la entrada se asocia con la etiqueta in y la salida con la etiqueta out. Consulte el manual ffmpeg-filters para más información sobre la sintaxis del filtergraph.

Consulte la opción -filter_complex si desea crear filtergraphs con varias entradas y/o salidas.

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

Esta opción booleana determina si el/los filtergraph(s) al que se alimenta este flujo se reinicializa cuando los parámetros del fotograma de entrada cambian a mitad del flujo. Esta opción está habilitada de forma predeterminada, ya que la mayoría de los filtros de vídeo y todos los de audio no pueden manejar desviaciones en las propiedades del fotograma de entrada. Al reinicializar se pierde el estado existente del filtro, como por ejemplo la referencia al contador de fotogramas n disponible en algunos filtros. Cualquier fotograma almacenado en búfer en el momento de la reinicialización se pierde. Las propiedades cuyo cambio desencadena la reinicialización son, para el vídeo, la resolución del fotograma o el pixel format; para el audio, el sample format, la frecuencia de muestreo, el número de canales o la disposición de canales.

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

Esta opción booleana determina si un fotograma con parámetros de fotograma diferentes a mitad del flujo se descarta en lugar de provocar la reinicialización del filtergraph, ya que esta última implicaría la pérdida del estado del filtro. Generalmente es útil para evitar paquetes corruptos pero aun así decodificables en entradas de streaming en directo. El valor predeterminado es false.

-filter_threads nb_threads (global)

Define cuántos hilos se usan para procesar un pipeline de filtros. Cada pipeline generará un pool de hilos con esta cantidad de hilos disponibles para el procesamiento en paralelo. El valor predeterminado es el número de CPU disponibles.

-filter_buffered_frames nb_frames (global)

Define el número máximo de fotogramas en búfer permitidos en un filtergraph. En circunstancias normales, un filtergraph no debería almacenar en búfer más que unos pocos fotogramas, sobre todo si los fotogramas se le suministran y se leen de él de forma equilibrada (que es el comportamiento previsto en ffmpeg). Dicho esto, esta opción permite limitar el número total de fotogramas almacenados en búfer en todos los enlaces de un filtergraph. Si se generan más fotogramas, el filtrado se aborta y se devuelve un error. El valor predeterminado es 0, lo que significa sin límite.

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

Especifica el preset para el/los flujo(s) que coincidan.

-stats (global)

Registra el progreso/las estadísticas de codificación como log de nivel "info" (véase -loglevel). Está activado de forma predeterminada; para deshabilitarlo explícitamente hay que especificar -nostats.

-stats_period time (global)

Establece el período con el que se actualiza el progreso/las estadísticas de codificación. El valor predeterminado es 0.5 segundos.

-print_graphs (global)

Imprime los detalles del grafo de ejecución en stderr con el formato establecido mediante -print_graphs_format.

-print_graphs_file filename (global)

Escribe los detalles del grafo de ejecución en el archivo especificado con el formato establecido mediante -print_graphs_format.

-print_graphs_format format (global)

Establece el formato de salida (los formatos disponibles son: default, compact, csv, flat, ini, json, xml, mermaid, mermaidhtml). El formato predeterminado es json.

-progress url (global)

Envía información de progreso legible por programas a url.

La información de progreso se escribe periódicamente y al final del proceso de codificación. Consiste en líneas "key=value". key consta únicamente de caracteres alfanuméricos. La última key de una secuencia de información de progreso siempre es "progress", con el valor "continue" o "end".

El período de actualización se establece con -stats_period.

Por ejemplo, para registrar la información de progreso en stdout:

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

-stdin

Habilita la interacción por entrada estándar. Está activada de forma predeterminada, salvo que la entrada estándar se use como entrada. Para deshabilitar explícitamente la interacción hay que especificar -nostdin.

Deshabilitar la interacción por entrada estándar es útil, por ejemplo, si ffmpeg está en el grupo de procesos en segundo plano. Se puede lograr un resultado similar con ffmpeg ... < /dev/null, pero requiere una shell.

-debug_ts (global)

Imprime información de marca de tiempo/latencia. Está desactivada de forma predeterminada. Esta opción es útil sobre todo para pruebas y depuración, y el formato de salida puede cambiar de una versión a otra, por lo que no debería usarse en scripts portables.

Véase también la opción -fdebug ts.

-attach filename (output)

Añade un adjunto al archivo de salida. Esto lo admiten unos pocos formatos, como Matroska, por ejemplo para fuentes usadas al renderizar subtítulos. Los adjuntos se implementan como un tipo específico de flujo, así que esta opción añadirá un nuevo flujo al archivo. Después es posible usar opciones per-stream sobre ese flujo de la forma habitual. Los flujos de adjuntos creados con esta opción se crearán después de todos los demás flujos (es decir, los creados con -map o los mapeos automáticos).

Tenga en cuenta que en Matroska también hay que establecer la etiqueta de metadatos mimetype:

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

(suponiendo que el flujo de adjunto será el tercero en el archivo de salida).

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

Extrae el flujo de adjunto que coincida a un archivo llamado filename. Si filename está vacío, se usará el valor de la etiqueta de metadatos filename.

Por ejemplo, para extraer el primer adjunto a un archivo llamado ’out.ttf’:

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

Para extraer todos los adjuntos a archivos determinados por la etiqueta filename:

ffmpeg -dump_attachment:t "" -i INPUT

Nota técnica: los adjuntos se implementan como extradata de codec, así que esta opción en realidad puede usarse para extraer extradata de cualquier flujo, no solo de adjuntos.

5.5 Opciones de vídeo

-vframes number (output)

Establece el número de fotogramas de vídeo que se generarán. Es un alias obsoleto de -frames:v, que debería usar en su lugar.

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

Establece la velocidad de fotogramas (valor en Hz, fracción o abreviatura).

Como opción de entrada, ignora cualquier marca de tiempo almacenada en el archivo y en su lugar genera marcas de tiempo asumiendo una velocidad de fotogramas constante fps. Esto no es lo mismo que la opción -framerate usada por algunos formatos de entrada como image2 o v4l2 (en versiones antiguas de FFmpeg solía ser lo mismo). En caso de duda, use -framerate en lugar de la opción de entrada -r.

Como opción de salida:

codificación de vídeo

Duplica o descarta fotogramas justo antes de codificarlos para lograr una velocidad de fotogramas de salida constante fps.

streamcopy de vídeo

Indica al muxer que fps es la velocidad de fotogramas del flujo. En este caso no se descartan ni duplican datos. Esto puede producir archivos inválidos si fps no coincide con la velocidad de fotogramas real del flujo determinada por las marcas de tiempo de los paquetes. Véase también el filtro de bitstream setts.

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

Establece la velocidad de fotogramas máxima (valor en Hz, fracción o abreviatura).

Limita la velocidad de fotogramas de salida cuando esta se establece automáticamente y es superior a este valor. Útil en procesamiento por lotes o cuando la velocidad de fotogramas de entrada se detecta incorrectamente como muy alta. No se puede establecer junto con -r. Se ignora durante el streamcopy.

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

Establece el tamaño del fotograma.

Como opción de entrada, es un atajo para la opción private video_size, reconocida por algunos demuxers para los que el tamaño del fotograma no está almacenado en el archivo o es configurable, por ejemplo en vídeo raw o capturadoras de vídeo.

Como opción de salida, esto inserta el filtro de vídeo scale al final del filtergraph correspondiente. Use el filtro scale directamente si desea insertarlo al principio o en otro lugar.

El formato es ‘wxh’ (predeterminado, el mismo que el de origen).

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

Establece la relación de aspecto de la pantalla de vídeo especificada por aspect.

aspect puede ser una cadena de número de coma flotante, o una cadena de la forma num:den, donde num y den son el numerador y el denominador de la relación de aspecto. Por ejemplo, "4:3", "16:9", "1.3333" y "1.7777" son valores de argumento válidos.

Si se usa junto con -vcodec copy, afectará a la relación de aspecto almacenada a nivel de container, pero no a la relación de aspecto almacenada en los fotogramas codificados, si existe.

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

Establece los metadatos de rotación del vídeo.

rotation es un número decimal que especifica la cantidad de grados en que se debe rotar el vídeo en sentido antihorario antes de mostrarlo.

Esta opción anula los metadatos de rotación/transformación de pantalla almacenados en el archivo, si los hay. Cuando el vídeo se transcodifica (en lugar de copiarse) y -autorotate está habilitado, el vídeo se rotará en la etapa de filtrado. En caso contrario, los metadatos se escribirán en el archivo de salida si el muxer lo admite.

Si se dan las opciones -display_hflip y/o -display_vflip, se aplican después de la rotación especificada por esta opción.

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

Establece si la imagen debe voltearse horizontalmente al mostrarse.

Véase la opción -display_rotation para más detalles.

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

Establece si la imagen debe voltearse verticalmente al mostrarse.

Véase la opción -display_rotation para más detalles.

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

Establece los metadatos de mastering display del vídeo.

G(%u,%u)B(%u,%u)R(%u,%u)WP(%u,%u)L(%u,%u) es una cadena que especifica los primarios de pantalla X,Y para los canales GBR y el punto blanco (WP) en unidades de 0.00002, y los valores de luminancia máxima-mínima (L) en unidades de 0.0001 candelas por metro cuadrado. Los valores son enteros sin signo que representan el numerador de un racional con un denominador implícito de 50000 para GBR y (WP), y un denominador implícito de 10000 para (L).

Esta opción anula los metadatos de mastering display almacenados en el archivo, si los hay.

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

Establece los metadatos de content light del vídeo.

%u,%u es una cadena que especifica el nivel máximo de content light y el nivel máximo promedio de luz de la imagen.

Esta opción anula los metadatos de content light almacenados en el archivo, si los hay.

-vn (input/output)

Como opción de entrada, impide que todos los flujos de vídeo de un archivo se filtren o se seleccionen/mapeen automáticamente para cualquier salida. Véase la opción -discard para deshabilitar flujos individualmente.

Como opción de salida, deshabilita la grabación de vídeo, es decir, la selección o el mapeo automático de cualquier flujo de vídeo. Para un control manual completo, véase la opción -map.

-vcodec codec (output)

Establece el codec de vídeo. Es un alias de -codec:v.

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

Selecciona el número de pasada (1 o 2). Se usa para hacer codificación de vídeo en dos pasadas. Las estadísticas del vídeo se registran en la primera pasada en un archivo de registro (véase también la opción -passlogfile), y en la segunda pasada ese archivo de registro se usa para generar el vídeo con la tasa de bits exacta solicitada. En la pasada 1, puede simplemente desactivar el audio y establecer la salida como null; ejemplos para Windows y 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)

Establece prefix como el prefijo del nombre del archivo de registro de dos pasadas; el prefijo predeterminado es “ffmpeg2pass”. El nombre completo del archivo será PREFIX-N.log, donde N es un número específico del flujo de salida

-vf filtergraph (output)

Crea el filtergraph especificado por filtergraph y lo usa para filtrar el flujo.

Es un alias de -filter:v; véase la opción -filter.

-autorotate

Rota automáticamente el vídeo según los metadatos del archivo. Habilitado de forma predeterminada; use -noautorotate para deshabilitarlo.

-autoscale

Escala automáticamente el vídeo según la resolución del primer fotograma. Habilitado de forma predeterminada; use -noautoscale para deshabilitarlo. Cuando autoscale está deshabilitado, es posible que no todos los fotogramas de salida del grafo de filtros tengan la misma resolución, lo que puede ser inadecuado para algunos encoder/muxer. Por ello, no se recomienda deshabilitarlo a menos que sepa realmente lo que hace. Deshabilite autoscale bajo su propia responsabilidad.

5.6 Opciones de vídeo avanzadas

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

Establece el pixel format. Use -pix_fmts para mostrar todos los pixel formats admitidos. Si no se puede seleccionar el pixel format elegido, ffmpeg mostrará una advertencia y seleccionará el mejor pixel format admitido por el encoder. Si pix_fmt lleva el prefijo +, ffmpeg terminará con un error si no se puede seleccionar el pixel format solicitado, y se deshabilitan las conversiones automáticas dentro de los filtergraphs. Si pix_fmt es un único +, ffmpeg selecciona el mismo pixel format que el de la entrada (o la salida del grafo) y se deshabilitan las conversiones automáticas.

-sws_flags flags (input/output)

Establece los flags predeterminados de la biblioteca libswscale. Estos flags los usan los filtros scale insertados automáticamente y los que están dentro de filtergraphs simples, si no se anulan dentro de la definición del filtergraph.

Véase (ffmpeg-scaler)ffmpeg-scaler manual para una lista de opciones del scaler.

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

Anula el control de tasa para intervalos específicos, con el formato de una lista "int,int,int" separada por barras. Los dos primeros valores son los números de fotograma de inicio y fin; el último es el quantizer a usar si es positivo, o el factor de calidad si es negativo.

-vstats

Vuelca las estadísticas de codificación de vídeo en vstats_HHMMSS.log. Véase la sección de formato de archivo vstats para la descripción del formato.

-vstats_file file

Vuelca las estadísticas de codificación de vídeo en file. Véase la sección de formato de archivo vstats para la descripción del formato.

-vstats_version file

Especifica qué versión del formato vstats se debe usar. El valor predeterminado es 2. Véase la sección de formato de archivo vstats para la descripción del formato.

-vtag fourcc/tag (output)

Fuerza el tag/fourcc de vídeo. Es 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 puede tomar argumentos con la siguiente forma:

time[,time...]

Si el argumento consiste en marcas de tiempo, ffmpeg redondeará los tiempos especificados a la marca de tiempo de salida más cercana según la base de tiempo del encoder, y forzará un keyframe en el primer fotograma cuya marca de tiempo sea igual o mayor que la marca de tiempo calculada. Tenga en cuenta que si la base de tiempo del encoder es demasiado gruesa, los keyframes pueden forzarse en fotogramas con marcas de tiempo menores que el tiempo especificado. La base de tiempo predeterminada del encoder es la inversa de la velocidad de fotogramas de salida, pero puede establecerse de otro modo mediante -enc_time_base.

Si uno de los tiempos es "chapters[delta]", se expande al tiempo de inicio de todos los capítulos del archivo, desplazado por delta, expresado como un tiempo en segundos. Esta opción puede ser útil para garantizar que haya un punto de búsqueda en una marca de capítulo o en cualquier otro lugar designado del archivo de salida.

Por ejemplo, para insertar un key frame a los 5 minutos, más key frames 0.1 segundos antes del inicio de cada capítulo:

-force_key_frames 0:05:00,chapters-0.1

expr:expr

Si el argumento lleva el prefijo expr:, la cadena expr se interpreta como una expresión y se evalúa en cada fotograma. Se fuerza un key frame si la evaluación es distinta de cero.

La expresión en expr puede contener las siguientes constantes:

n

el número del fotograma actualmente procesado, empezando en 0

n_forced

el número de fotogramas forzados

prev_forced_n

el número del fotograma forzado anterior; es NAN cuando todavía no se ha forzado ningún keyframe

prev_forced_t

el tiempo del fotograma forzado anterior; es NAN cuando todavía no se ha forzado ningún keyframe

t

el tiempo del fotograma actualmente procesado

Por ejemplo, para forzar un key frame cada 5 segundos, puede especificar:

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

Para forzar un key frame 5 segundos después del tiempo del último forzado, empezando en el segundo 13:

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

source

Si el argumento es source, ffmpeg forzará un key frame si el fotograma que se está codificando está marcado como key frame en su origen. En los casos en los que ese fotograma de origen en concreto se deba descartar, se forzará en su lugar a que el siguiente fotograma disponible se convierta en key frame.

scd_metadata

Si el argumento es scd_metadata, ffmpeg forzará un key frame si el fotograma actual contiene una entrada de metadatos con la clave lavfi.scd.time. Estos metadatos pueden ser añadidos por filtros como scdet y scdet_vulkan. Evite insertar filtros que dupliquen fotogramas después de scdet, ya que esto puede causar metadatos duplicados en varios fotogramas y la inserción repetida de key frames.

Tenga en cuenta que forzar demasiados keyframes es muy perjudicial para los algoritmos de lookahead de ciertos encoders: usar opciones de GOP fijo o similares sería más eficiente.

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

Recorta automáticamente el vídeo después de decodificar, según los metadatos del archivo. El valor predeterminado es all.

none (0)

No aplica ningún metadato de recorte.

all (1)

Aplica el recorte tanto a nivel de codec como de container. Es el modo predeterminado.

codec (2)

Aplica el recorte a nivel de codec.

container (3)

Aplica el recorte a nivel de container.

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

Al hacer copia de flujo, copia también los fotogramas que no son key frames encontrados al principio.

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

Inicializa un nuevo dispositivo de hardware de tipo type llamado name, usando los parámetros de dispositivo indicados. Si no se especifica name, recibirá un nombre predeterminado de la forma "type%d".

El significado de device y de los siguientes argumentos depende del tipo de dispositivo:

cuda

device es el número del dispositivo CUDA.

Se reconocen las siguientes opciones:

primary_ctx

Si se establece en 1, usa el contexto de dispositivo primario en lugar de crear uno nuevo.

Ejemplos:

-init_hw_device cuda:1

Elige el segundo dispositivo del sistema.

-init_hw_device cuda:0,primary_ctx=1

Elige el primer dispositivo y usa el contexto de dispositivo primario.

dxva2

device es el número del adaptador de pantalla Direct3D 9.

d3d11va

device es el número del adaptador de pantalla Direct3D 11. Si no se especifica, intentará usar el adaptador de pantalla Direct3D 11 predeterminado o el primer adaptador de pantalla Direct3D 11 cuyo VendorId de hardware sea el especificado por ‘vendor_id’.

Ejemplos:

-init_hw_device d3d11va

Crea un dispositivo d3d11va en el adaptador de pantalla Direct3D 11 predeterminado.

-init_hw_device d3d11va:1

Crea un dispositivo d3d11va en el adaptador de pantalla Direct3D 11 especificado por el índice 1.

-init_hw_device d3d11va:,vendor_id=0x8086

Crea un dispositivo d3d11va en el primer adaptador de pantalla Direct3D 11 cuyo VendorId de hardware sea 0x8086.

vaapi

device es un nombre de pantalla X11, un nodo de renderizado DRM o un índice de adaptador DirectX. Si no se especifica, intentará abrir la pantalla X11 predeterminada ($DISPLAY) y después el primer nodo de renderizado DRM (/dev/dri/renderD128), o el adaptador DirectX predeterminado en Windows.

Se reconocen las siguientes opciones:

Cuando no se especifica el dispositivo, esta opción sirve para indicar el nombre del controlador de kernel asociado al dispositivo deseado. Esta opción solo está disponible cuando los métodos de aceleración por hardware drm y vaapi están habilitados.

vendor_id

Cuando no se especifican device ni kernel_driver, esta opción sirve para indicar el vendor id asociado al dispositivo deseado. Esta opción solo está disponible cuando los métodos de aceleración por hardware drm y vaapi están habilitados y no se ha especificado kernel_driver.

Ejemplos:

-init_hw_device vaapi

Crea un dispositivo vaapi en el dispositivo predeterminado.

-init_hw_device vaapi:/dev/dri/renderD129

Crea un dispositivo vaapi en el nodo de renderizado DRM /dev/dri/renderD129.

-init_hw_device vaapi:1

Crea un dispositivo vaapi en el adaptador DirectX 1.

-init_hw_device vaapi:,kernel_driver=i915

Crea un dispositivo vaapi en el dispositivo asociado al controlador de kernel ‘i915’.

-init_hw_device vaapi:,vendor_id=0x8086

Crea un dispositivo vaapi en el dispositivo asociado al vendor id ‘0x8086’.

vdpau

device es un nombre de display X11. Si no se especifica, se intentará abrir el display X11 predeterminado ($DISPLAY).

qsv

device selecciona un valor de ‘MFX_IMPL_*’. Los valores permitidos son:

auto sw hw auto_any hw_any hw2 hw3 hw4

Si no se especifica, se usa ‘auto_any’. (Tenga en cuenta que puede ser más sencillo lograr el resultado deseado para QSV creando el subdispositivo apropiado para la plataforma (‘dxva2’, ‘d3d11va’ o ‘vaapi’) y derivando después de él un dispositivo QSV.)

Se reconocen las siguientes opciones:

child_device

Especifica un nodo de renderizado DRM en Linux o un adaptador DirectX en Windows.

child_device_type

Elige el tipo de subdispositivo apropiado para la plataforma. En Windows se usa ‘d3d11va’ como tipo de subdispositivo predeterminado cuando se especifica --enable-libvpl en el momento de la configuración, y se usa ‘dxva2’ como tipo de subdispositivo predeterminado cuando se especifica --enable-libmfx en el momento de la configuración. En Linux solo puede usarse ‘vaapi’ como tipo de subdispositivo.

Ejemplos:

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

Crea un dispositivo QSV con ‘MFX_IMPL_HARDWARE’ en el nodo de renderizado DRM /dev/dri/renderD129.

-init_hw_device qsv:hw,child_device=1

Crea un dispositivo QSV con ‘MFX_IMPL_HARDWARE’ en el adaptador DirectX 1.

-init_hw_device qsv:hw,child_device_type=d3d11va

Elige el subdispositivo de GPU de tipo ‘d3d11va’ y crea un dispositivo QSV con ‘MFX_IMPL_HARDWARE’.

-init_hw_device qsv:hw,child_device_type=dxva2

Elige el subdispositivo de GPU de tipo ‘dxva2’ y crea un dispositivo QSV con ‘MFX_IMPL_HARDWARE’.

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

Crea un dispositivo QSV con ‘MFX_IMPL_HARDWARE’ en el adaptador DirectX 1 con el subdispositivo de tipo ‘d3d11va’.

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

Crea un dispositivo VAAPI llamado ‘va’ en /dev/dri/renderD129, y a partir de él deriva un dispositivo QSV llamado ‘hw1’.

opencl

device selecciona la plataforma y el dispositivo como platform_index.device_index.

El conjunto de dispositivos también puede filtrarse mediante los pares clave-valor, para encontrar solo los dispositivos que coincidan con una plataforma o cadena de dispositivo concretas.

Las cadenas que pueden usarse como filtros son:

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

Los índices y los filtros, en conjunto, deben seleccionar un dispositivo de forma unívoca.

Ejemplos:

-init_hw_device opencl:0.1

Elige el segundo dispositivo de la primera plataforma.

-init_hw_device opencl:,device_name=Foo9000

Elige el dispositivo cuyo nombre contenga la cadena Foo9000.

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

Elige el dispositivo de GPU de la segunda plataforma que admita la extensión cl_khr_fp16.

vulkan

Si device es un entero, selecciona el dispositivo por su índice en una lista de dispositivos que depende del sistema. Si device es cualquier otra cadena, selecciona el primer dispositivo cuyo nombre contenga esa cadena como subcadena.

Se reconocen las siguientes opciones:

debug

Si se establece en 1, habilita la capa de validación, si está instalada.

linear_images

Si se establece en 1, las imágenes asignadas por el hwcontext serán lineales y localmente asignables en memoria.

instance_extensions

Una lista separada por signos más de extensiones de instancia adicionales que se deben habilitar.

device_extensions

Una lista separada por signos más de extensiones de dispositivo adicionales que se deben habilitar.

Ejemplos:

-init_hw_device vulkan:1

Elige el segundo dispositivo del sistema.

-init_hw_device vulkan:RADV

Elige el primer dispositivo cuyo nombre contenga la cadena RADV.

-init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

Elige el primer dispositivo y habilita las extensiones de instancia de Wayland y XCB.

-init_hw_device type[=name]@source

Inicializa un nuevo dispositivo de hardware de tipo type, llamado name, derivándolo del dispositivo existente con el nombre source.

-init_hw_device list

Lista todos los tipos de dispositivo de hardware admitidos en esta compilación de ffmpeg.

-filter_hw_device name

Pasa el dispositivo de hardware llamado name a todos los filtros de cualquier filtergraph. Esto puede usarse para fijar el dispositivo al que subir con el filtro hwupload, o el dispositivo al que mapear con el filtro hwmap. Otros filtros también pueden hacer uso de este parámetro cuando necesiten un dispositivo de hardware. Tenga en cuenta que esto normalmente solo hace falta cuando la entrada aún no está en fotogramas de hardware; cuando lo está, los filtros derivan el dispositivo que necesitan a partir del contexto de los fotogramas que reciben como entrada.

Es un ajuste global, de modo que todos los filtros reciben el mismo dispositivo.

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

Usa aceleración por hardware para decodificar el flujo o los flujos coincidentes. Los valores permitidos para hwaccel son:

none

No usa ninguna aceleración por hardware (opción predeterminada).

auto

Selecciona automáticamente el método de aceleración por hardware.

vdpau

Usa aceleración por hardware VDPAU (Video Decode and Presentation API for Unix).

dxva2

Usa aceleración por hardware DXVA2 (DirectX Video Acceleration).

d3d11va

Usa aceleración por hardware D3D11VA (DirectX Video Acceleration).

vaapi

Usa aceleración por hardware VAAPI (Video Acceleration API).

qsv

Usa la aceleración Intel QuickSync Video para la transcodificación de vídeo.

A diferencia de la mayoría de los demás valores, esta opción no habilita la decodificación acelerada (que se usa automáticamente siempre que se selecciona un decoder qsv), sino la transcodificación acelerada, sin copiar los fotogramas a la memoria del sistema.

Para que funcione, tanto el decoder como el encoder deben admitir la aceleración QSV y no debe usarse ningún filtro.

videotoolbox

Usa la aceleración por hardware de Video Toolbox.

Esta opción no tiene ningún efecto si el hwaccel seleccionado no está disponible o no está admitido por el decoder elegido.

Tenga en cuenta que la mayoría de los métodos de aceleración están pensados para la reproducción y no serán más rápidos que la decodificación por software en las CPU modernas. Además, ffmpeg normalmente necesitará copiar los fotogramas decodificados de la memoria de la GPU a la memoria del sistema, lo que supone una pérdida adicional de rendimiento. Por eso esta opción resulta útil sobre todo para pruebas.

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

Selecciona un dispositivo que se usará para la aceleración por hardware.

Esta opción solo tiene sentido cuando también se especifica la opción -hwaccel. Puede referirse a un dispositivo existente creado con -init_hw_device por su nombre, o bien puede crear un dispositivo nuevo, como si justo antes se hubiera invocado ‘-init_hw_device’ type:hwaccel_device.

-hwaccels

Lista todos los componentes de aceleración por hardware habilitados en esta compilación de ffmpeg. La disponibilidad real en tiempo de ejecución depende del hardware y de que esté instalado el controlador adecuado.

-fix_sub_duration_heartbeat[:stream_specifier]

Establece un flujo de vídeo de salida concreto como el flujo heartbeat, según el cual se divide y se envía el subtítulo actualmente en curso al recibir un paquete de acceso aleatorio.

Esto reduce la latencia de los subtítulos cuyo paquete final, o cuyo subtítulo siguiente, aún no se ha recibido. Como contrapartida, esto probablemente provoque la duplicación de eventos de subtítulo para cubrir la duración completa, así que en los casos de uso en los que no importa la latencia con la que el evento de subtítulo llega a la salida, no conviene usar esta opción.

Para que esto tenga algún efecto, es necesario que -fix_sub_duration esté establecido para el flujo de subtítulos de entrada correspondiente, y que dicho flujo de subtítulos de entrada esté asignado directamente a la misma salida en la que reside el flujo heartbeat.

5.7 Opciones de audio

-aframes number (output)

Establece el número de fotogramas de audio que se van a emitir. Es un alias obsoleto de -frames:a, que debería usarse en su lugar.

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

Establece la frecuencia de muestreo de audio. Para los flujos de salida, de forma predeterminada se fija a la frecuencia del flujo de entrada correspondiente. Para los flujos de entrada, esta opción solo tiene sentido en dispositivos de captura de audio y demuxers en bruto, y se traslada a las opciones correspondientes del demuxer.

-aq q (output)

Establece la calidad de audio (específica del codec, VBR). Es un alias de -q:a.

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

Establece el número de canales de audio. Para los flujos de salida, de forma predeterminada se fija al número de canales de audio de entrada. Para los flujos de entrada, esta opción solo tiene sentido en dispositivos de captura de audio y demuxers en bruto, y se traslada a las opciones correspondientes del demuxer.

-an (input/output)

Como opción de entrada, impide que todos los flujos de audio de un archivo se filtren, se seleccionen automáticamente o se asignen a alguna salida. Consulte la opción -discard para deshabilitar flujos de forma individual.

Como opción de salida, deshabilita la grabación de audio, es decir, la selección o asignación automática de cualquier flujo de audio. Para un control manual completo, consulte la opción -map.

-acodec codec (input/output)

Establece el codec de audio. Es un alias de -codec:a.

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

Establece el sample format de audio. Use -sample_fmts para obtener la lista de sample formats admitidos.

-af filtergraph (output)

Crea el filtergraph especificado por filtergraph y lo usa para filtrar el flujo.

Es un alias de -filter:a; consulte la opción -filter.

5.8 Opciones de audio avanzadas

-atag fourcc/tag (output)

Fuerza el tag/fourcc de audio. Es 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)

Establece la disposición de canales de audio. Para los flujos de salida, de forma predeterminada se fija a la disposición de canales de entrada. Para los flujos de entrada, sobrescribe la disposición de canales de la entrada. No todos los decoders respetan la disposición de canales sobrescrita. Esta opción también fija la disposición de canales para dispositivos de captura de audio y demuxers en bruto, y se traslada a la opción correspondiente del demuxer.

-guess_layout_max channels (input,per-stream)

Si alguna disposición de canales de entrada no se conoce, se intenta deducir solo si corresponde, como mucho, al número de canales especificado. Por ejemplo, 2 indica a ffmpeg que reconozca 1 canal como mono y 2 canales como estéreo, pero no 6 canales como 5.1. De forma predeterminada siempre se intenta deducir. Use 0 para deshabilitar toda deducción. Usar la opción -channel_layout para especificar explícitamente una disposición de entrada también deshabilita la deducción.

5.9 Opciones de subtítulos

-scodec codec (input/output)

Establece el codec de subtítulos. Es un alias de -codec:s.

-sn (input/output)

Como opción de entrada, impide que todos los flujos de subtítulos de un archivo se filtren, se seleccionen automáticamente o se asignen a alguna salida. Consulte la opción -discard para deshabilitar flujos de forma individual.

Como opción de salida, deshabilita la grabación de subtítulos, es decir, la selección o asignación automática de cualquier flujo de subtítulos. Para un control manual completo, consulte la opción -map.

5.10 Opciones de subtítulos avanzadas

-fix_sub_duration

Corrige la duración de los subtítulos. Para cada subtítulo, espera al siguiente paquete del mismo flujo y ajusta la duración del primero para evitar solapamientos. Esto es necesario con algunos codecs de subtítulos, en especial los subtítulos DVB, porque la duración del paquete original es solo una estimación aproximada y el final se marca en realidad con un fotograma de subtítulo vacío. Si no se usa esta opción cuando hace falta, puede provocar duraciones exageradas o fallos de multiplexado por marcas de tiempo no monótonas.

Tenga en cuenta que esta opción retrasa la salida de todos los datos hasta que se decodifica el siguiente paquete de subtítulos: puede aumentar mucho el consumo de memoria y la latencia.

-canvas_size size

Establece el tamaño del lienzo usado para renderizar los subtítulos.

5.11 Opciones avanzadas

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

Crea uno o más flujos en el archivo de salida. Esta opción tiene dos formas de especificar el origen o los orígenes de datos: la primera selecciona uno o más flujos de algún archivo de entrada (especificado con -i), la segunda toma una salida de algún filtergraph complejo (especificado con -filter_complex).

En la primera forma, se crea un flujo de salida por cada flujo del archivo de entrada con índice input_file_id. Si se indica stream_specifier, solo se usan los flujos que coincidan con el especificador (consulte la sección de especificadores de flujo para conocer la sintaxis de stream_specifier).

Un carácter - antes del identificador de flujo crea una asignación "negativa". Deshabilita los flujos coincidentes de las asignaciones ya creadas.

Tras el especificador de flujo puede darse opcionalmente un view_specifier, que en vídeo multivista indica la vista que se debe usar. El especificador de vista puede tener uno de los siguientes formatos:

view:view_id

selecciona una vista por su ID; view_id puede fijarse a ’all’ para usar todas las vistas intercaladas en un solo flujo;

vidx:view_idx

selecciona una vista por su índice; es decir, 0 es la vista base, 1 es la primera vista no base, etc.

vpos:position

selecciona una vista por su posición de visualización; position puede ser left o right

En la transcodificación, de forma predeterminada solo se usa la vista base, es decir, el equivalente a vidx:0. En la copia de flujo, los especificadores de vista no son compatibles y siempre se copian todas las vistas.

Un ? final tras el índice de flujo permite que la asignación sea opcional: si no coincide con ningún flujo, la asignación se ignora en lugar de fallar. Tenga en cuenta que la asignación seguirá fallando si se usa un índice de archivo de entrada no válido, por ejemplo si la asignación hace referencia a una entrada inexistente.

Una forma alternativa [linklabel] asigna salidas de filtergraphs complejos (véase la opción -filter_complex) al archivo de salida. linklabel debe corresponder a una etiqueta de enlace de salida definida en el grafo.

Esta opción puede especificarse varias veces, cada una añadiendo más flujos al archivo de salida. Cualquier flujo de entrada dado también puede asignarse cualquier número de veces como origen de distintos flujos de salida, por ejemplo para usar distintas opciones de codificación o filtros. Los flujos se crean en la salida en el mismo orden en que se dan las opciones -map en la línea de comandos.

Usar esta opción deshabilita las asignaciones predeterminadas de este archivo de salida.

Ejemplos:

asignar todo

Para asignar TODOS los flujos del primer archivo de entrada a la salida

ffmpeg -i INPUT -map 0 output

seleccionar un flujo concreto

Si el primer archivo de entrada tiene dos flujos de audio, estos flujos se identifican como 0:0 y 0:1. Puede usarse -map para elegir qué flujos colocar en un archivo de salida. Por ejemplo:

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

asigna el segundo flujo de entrada de INPUT al (único) flujo de salida de out.wav.

crear varios flujos

Para seleccionar el flujo con índice 2 del archivo de entrada a.mov (especificado con el identificador 0:2), y el flujo con índice 6 del archivo de entrada b.mov (especificado con el identificador 1:6), y copiarlos al archivo de salida out.mov:

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

crear varios flujos 2

Para seleccionar todo el vídeo y el tercer flujo de audio de un archivo de entrada:

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

asignación negativa

Para asignar todos los flujos excepto el segundo de audio, se usan asignaciones negativas

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

asignación opcional

Para asignar los flujos de vídeo y audio de la primera entrada, ignorando la asignación de audio (mediante el ? final) si no existe ningún flujo de audio en la primera entrada:

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

asignar por idioma

Para elegir el flujo de audio en inglés:

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

-ignore_unknown

Ignora los flujos de entrada de tipo desconocido en lugar de fallar si se intenta copiar dichos flujos.

-copy_unknown

Permite copiar flujos de entrada de tipo desconocido en lugar de fallar si se intenta copiar dichos flujos.

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

Establece la información de metadatos del siguiente archivo de salida a partir de infile. Tenga en cuenta que se trata de índices de archivo (basados en cero), no de nombres de archivo. Los parámetros opcionales metadata_spec_in/out especifican qué metadatos copiar. Un especificador de metadatos puede tener una de las siguientes formas:

g

metadatos globales, es decir, metadatos que se aplican a todo el archivo

s[:stream_spec]

metadatos por flujo. stream_spec es un especificador de flujo tal como se describe en el capítulo de especificadores de flujo. En un especificador de metadatos de entrada, se copia a partir del primer flujo coincidente. En un especificador de metadatos de salida, se copia a todos los flujos coincidentes.

c:chapter_index

metadatos por capítulo. chapter_index es el índice de capítulo, basado en cero.

p:program_index

metadatos por programa. program_index es el índice de programa, basado en cero.

Si se omite el especificador de metadatos, se asume global de forma predeterminada.

De forma predeterminada, los metadatos globales se copian del primer archivo de entrada, y los metadatos por flujo y por capítulo se copian junto con los flujos/capítulos. Estas asignaciones predeterminadas se deshabilitan al crear cualquier asignación del tipo correspondiente. Puede usarse un índice de archivo negativo para crear una asignación ficticia que simplemente deshabilite la copia automática.

Por ejemplo, para copiar los metadatos del primer flujo del archivo de entrada a los metadatos globales del archivo de salida:

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

Para hacer lo contrario, es decir, copiar los metadatos globales a todos los flujos de audio:

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

Tenga en cuenta que, en este ejemplo, un simple 0 funcionaría igual de bien, ya que de forma predeterminada se asumen los metadatos globales.

-map_chapters input_file_index (output)

Copia los capítulos del archivo de entrada con índice input_file_index al siguiente archivo de salida. Si no se especifica ninguna asignación de capítulos, los capítulos se copian del primer archivo de entrada que tenga al menos un capítulo. Use un índice de archivo negativo para deshabilitar cualquier copia de capítulos.

-benchmark (global)

Muestra información de benchmarking al final de una codificación. Muestra el tiempo real, de sistema y de usuario empleado, y el consumo máximo de memoria. El consumo máximo de memoria no está admitido en todos los sistemas; cuando no lo está, normalmente se muestra como 0.

-benchmark_all (global)

Muestra información de benchmarking durante la codificación. Muestra el tiempo real, de sistema y de usuario empleado en los distintos pasos (codificación/decodificación de audio y vídeo).

-timelimit duration (global)

Sale una vez que ffmpeg lleva duration segundos en ejecución en tiempo de usuario de CPU.

-dump (global)

Vuelca cada paquete de entrada a stderr.

-hex (global)

Al volcar paquetes, también vuelca la carga útil.

-readrate speed (input)

Limita la velocidad de lectura de la entrada.

Su valor es un número positivo en coma flotante que representa la duración máxima de medio, en segundos, que debe ingerirse en un segundo de tiempo real (wallclock). El valor predeterminado es cero y representa que no se impone ninguna limitación a la velocidad de ingesta. El valor 1 representa velocidad en tiempo real y equivale a -re.

Se usa principalmente para simular un dispositivo de captura o un flujo de entrada en directo (por ejemplo, al leer de un archivo). No conviene usarlo con un valor bajo cuando la entrada es un dispositivo de captura real o un flujo en directo, ya que puede provocar pérdida de paquetes.

Resulta útil cuando importa la velocidad de flujo de los paquetes de salida, como en la transmisión en directo.

-re (input)

Lee la entrada a la velocidad de fotogramas nativa. Equivale a establecer -readrate 1.

-readrate_initial_burst seconds

Establece un tiempo inicial de ráfaga de lectura, en segundos, tras el cual se aplican -re/-readrate.

-readrate_catchup speed (input)

Si la entrada o la salida se bloquean, haciendo que la velocidad de lectura real quede por detrás del readrate especificado, esta velocidad entra en vigor hasta que la entrada alcanza el readrate especificado. No debe ser inferior al readrate principal.

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

Establece el método de sincronización de vídeo / modo de velocidad de fotogramas.

passthrough

Cada fotograma se pasa con su marca de tiempo, del demuxer al muxer.

cfr

Los fotogramas se duplican y se descartan para lograr exactamente la velocidad de fotogramas constante solicitada.

vfr

Los fotogramas se pasan con su marca de tiempo, o se descartan, para evitar que dos fotogramas tengan la misma marca de tiempo.

auto

Elige entre cfr y vfr según las capacidades del muxer. Este es el método predeterminado.

Tenga en cuenta que, después de esto, el muxer puede modificar aún más las marcas de tiempo. Por ejemplo, en el caso de que esté habilitada la opción de formato avoid_negative_ts.

Con -map puede elegirse de qué flujo se toman las marcas de tiempo. Puede dejarse el vídeo o el audio sin cambios y sincronizar el resto de flujos con el que no cambia.

-frame_drop_threshold parameter

Umbral de descarte de fotogramas, que especifica cuánto pueden retrasarse los fotogramas de vídeo antes de descartarse. En unidades de velocidad de fotogramas, de modo que 1.0 es un fotograma. El valor predeterminado es -1.1. Un posible caso de uso es evitar la pérdida de fotogramas en caso de marcas de tiempo ruidosas, o aumentar la precisión de descarte de fotogramas en caso de marcas de tiempo exactas.

-apad parameters (output,per-stream)

Rellena el flujo o los flujos de audio de salida. Es lo mismo que aplicar -af apad. El argumento es una cadena de parámetros de filtro compuesta del mismo modo que en el filtro apad. Para que esta opción surta efecto en esta salida, debe estar establecida -shortest.

-copyts

No procesa las marcas de tiempo de entrada, sino que conserva sus valores sin intentar sanearlos. En particular, no elimina el valor inicial de desplazamiento del tiempo de inicio.

Tenga en cuenta que, dependiendo de la opción fps_mode o de un procesamiento específico del muxer (por ejemplo, si está habilitada la opción de formato avoid_negative_ts), las marcas de tiempo de salida pueden no coincidir con las de entrada aunque se seleccione esta opción.

-start_at_zero

Cuando se usa junto con copyts, desplaza las marcas de tiempo de entrada para que empiecen en cero.

Esto significa que usar, por ejemplo, -ss 50 hará que las marcas de tiempo de salida empiecen en el segundo 50, sin importar en qué marca de tiempo empezara el archivo de entrada.

-copytb mode

Especifica cómo fijar la base de tiempo del encoder al copiar flujos. mode es un valor numérico entero, y puede tomar uno de los siguientes valores:

1

Usa la base de tiempo del demuxer.

La base de tiempo se copia al encoder de salida a partir del demuxer de entrada correspondiente. A veces esto es necesario para evitar marcas de tiempo que no crezcan de forma monótona al copiar flujos de vídeo con velocidad de fotogramas variable.

0

Usa la base de tiempo del decoder.

La base de tiempo se copia al encoder de salida a partir del decoder de entrada correspondiente.

-1

Intenta hacer la elección automáticamente, con el fin de generar una salida coherente.

El valor predeterminado es -1.

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

Establece la base de tiempo del encoder. timebase puede tomar uno de los siguientes valores:

0

Asigna un valor predeterminado según el tipo de medio.

Para vídeo, usa 1/framerate; para audio, usa 1/samplerate.

demux

Usa la base de tiempo del demuxer.

filter

Usa la base de tiempo del filtergraph.

un número positivo

Usa el número indicado como base de tiempo.

Este campo puede darse como razón de dos enteros (por ejemplo, 1:24, 1:48000) o como número decimal (por ejemplo, 0.04166, 2.0833e-5)

El valor predeterminado es 0.

-bitexact (input/output)

Habilita el modo bitexact para (de)muxer y (de/en)coder

-shortest (output)

Termina la codificación cuando finaliza el flujo de salida más corto.

Tenga en cuenta que esta opción puede requerir almacenar fotogramas en búfer, lo que introduce latencia adicional. La cantidad máxima de esta latencia puede controlarse con la opción -shortest_buf_duration.

-shortest_buf_duration duration (output)

La opción -shortest puede requerir almacenar en búfer cantidades de datos potencialmente grandes cuando al menos uno de los flujos es "disperso" (es decir, tiene huecos grandes entre fotogramas; este suele ser el caso de los subtítulos).

Esta opción controla la duración máxima, en segundos, de los fotogramas almacenados en búfer. Valores mayores pueden permitir que la opción -shortest produzca resultados más precisos, pero aumentan el uso de memoria y la latencia.

El valor predeterminado es 10 segundos.

-dts_delta_threshold threshold

Umbral delta de discontinuidad de marca de tiempo, expresado como número decimal de segundos.

La corrección de discontinuidad de marca de tiempo habilitada por esta opción solo se aplica a formatos de entrada que aceptan discontinuidad de marca de tiempo (aquellos para los que está habilitado el flag AVFMT_TS_DISCONT), por ejemplo MPEG-TS y HLS, y se deshabilita automáticamente al usar la opción -copyts (salvo que se detecte wrapping).

Si se detecta una discontinuidad de marca de tiempo cuyo valor absoluto es mayor que threshold, ffmpeg elimina la discontinuidad disminuyendo/aumentando el DTS y el PTS actuales en el valor delta correspondiente.

El valor predeterminado es 10.

-dts_error_threshold threshold

Umbral delta de error de marca de tiempo, expresado como número decimal de segundos.

La corrección de marca de tiempo habilitada por esta opción solo se aplica a formatos de entrada que no aceptan discontinuidad de marca de tiempo (aquellos para los que no está habilitado el flag AVFMT_TS_DISCONT).

Si se detecta una discontinuidad de marca de tiempo cuyo valor absoluto es mayor que threshold, ffmpeg descarta el valor de marca de tiempo PTS/DTS.

El valor predeterminado es 3600*30 (30 horas), elegido de forma arbitraria y bastante conservadora.

-muxdelay seconds (output)

Establece el retardo máximo de demultiplexado-decodificación.

-muxpreload seconds (output)

Establece el retardo inicial de demultiplexado-decodificación.

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

Asigna un nuevo valor de stream-id a un flujo de salida. Esta opción debe especificarse antes del nombre de archivo de salida al que se aplica. Cuando existen varios archivos de salida, un streamid puede reasignarse a un valor distinto.

Por ejemplo, para fijar el PID del flujo 0 en 33 y el PID del flujo 1 en 36 en un archivo de salida mpegts:

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

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

Aplica filtros de bitstream a los flujos coincidentes. Los filtros se aplican a cada paquete a medida que se recibe del demuxer (cuando se usa como opción de entrada) o antes de que se envíe al muxer (cuando se usa como opción de salida).

bitstream_filters es una lista separada por comas de especificaciones de filtro de bitstream, cada una con la forma

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

Cualquiera de los caracteres ’,=:’ que forme parte de un valor de opción debe escaparse con una barra invertida.

Use la opción -bsfs para obtener la lista de filtros de bitstream.

Por ejemplo:

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

aplica el filtro de bitstream h264_mp4toannexb (que convierte un flujo H.264 encapsulado en MP4 a Annex B) al flujo de vídeo de entrada.

Por otro lado,

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

aplica el filtro de bitstream mov2textsub (que extrae texto de los subtítulos MOV) al flujo de subtítulos de salida. Tenga en cuenta, sin embargo, que como ambos ejemplos usan -c copy, importa poco que los filtros se apliquen en la entrada o en la salida; eso cambiaría si se estuviera transcodificando.

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

Fuerza un tag/fourcc para los flujos coincidentes.

-timecode hh:mm:ssSEPff

Especifica el código de tiempo para la escritura. SEP es ’:’ para código de tiempo sin drop y ’;’ (o ’.’) para drop.

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

-filter_complex filtergraph (global)

Define un filtergraph complejo, es decir, uno con un número arbitrario de entradas y/o salidas. Para grafos simples (los que tienen una sola entrada y una sola salida del mismo tipo) consulte las opciones -filter. filtergraph es una descripción del filtergraph, tal como se describe en la sección “Filtergraph syntax” del manual de ffmpeg-filters. Esta opción puede especificarse varias veces; cada uso crea un nuevo filtergraph complejo.

Las entradas de un filtergraph complejo pueden proceder de distintos tipos de origen, que se distinguen por el formato de la etiqueta de enlace correspondiente:

  • Para conectar un flujo de entrada, use [file_index:stream_specifier] (es decir, la misma sintaxis que -map). Si stream_specifier coincide con varios flujos, se usa el primero. Para vídeo multivista, el especificador de flujo puede ir seguido del especificador de vista; consulte la documentación de la opción -map para conocer su sintaxis.
  • Para conectar un decoder loopback, use [dec:dec_idx], donde dec_idx es el índice del decoder loopback que se va a conectar a la entrada dada. Para vídeo multivista, el índice de decoder puede ir seguido del especificador de vista; consulte la documentación de la opción -map para conocer su sintaxis.
  • Para conectar una salida de otro filtergraph complejo, use su etiqueta de enlace. Por ejemplo, en el siguiente ejemplo:
    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
    

se lee un vídeo de entrada y

* (línea 2) usa un filtergraph complejo con una entrada y dos salidas para escalar el vídeo a 1920x1080 y duplicar el resultado en ambas salidas; 
* (línea 3) codifica una de las salidas escaladas con `libx264` y escribe el resultado en output.mkv; 
* (línea 4) decodifica ese flujo codificado con un decoder loopback; 
* (línea 5) coloca la salida del decoder loopback (es decir, el vídeo codificado con `libx264`) junto a la entrada original escalada; 
* (línea 6) el vídeo combinado se codifica después sin pérdida y se escribe en comparison.mkv.

Tenga en cuenta que los dos filtergraph no pueden combinarse en uno solo, porque entonces se produciría un ciclo en la canalización de transcodificación (la salida del filtergraph va a la codificación, de ahí a la decodificación, y de vuelta al mismo grafo), y ese tipo de ciclos no está permitido.

Una entrada sin etiquetar se conecta al primer flujo de entrada sin usar del tipo coincidente.

Las etiquetas de enlace de salida se referencian con -map. Las salidas sin etiquetar se añaden al primer archivo de salida.

Tenga en cuenta que con esta opción es posible usar únicamente fuentes lavfi, sin archivos de entrada normales.

Por ejemplo, para superponer una imagen sobre un vídeo

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

Aquí [0:v] hace referencia al primer flujo de vídeo del primer archivo de entrada, que se conecta a la primera entrada (main) del filtro overlay. De igual modo, el primer flujo de vídeo de la segunda entrada se conecta a la segunda entrada (overlay) de overlay.

Suponiendo que cada archivo de entrada solo tenga un flujo de vídeo, pueden omitirse las etiquetas de entrada, de modo que lo anterior equivale a

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

Además, puede omitirse la etiqueta de salida, y la única salida del grafo de filtros se añadirá automáticamente al archivo de salida, de modo que basta con escribir

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

Como excepción especial, puede usarse un flujo de subtítulos de mapa de bits como entrada: se convertirá en un vídeo del mismo tamaño que el vídeo más grande del archivo, o de 720x576 si no hay ningún vídeo presente. Tenga en cuenta que se trata de una solución experimental y temporal. Se eliminará en cuanto libavfilter tenga compatibilidad adecuada con los subtítulos.

Por ejemplo, para incrustar subtítulos sobre una grabación DVB-T almacenada en formato MPEG-TS, retrasando los subtítulos 1 segundo:

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

(0x2d0, 0x2dc y 0x2ef son los PID de MPEG-TS del vídeo, el audio y los subtítulos respectivamente; 0:0, 0:3 y 0:7 también habrían funcionado)

Para generar 5 segundos de vídeo rojo puro usando la fuente lavfi color:

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

-filter_complex_threads nb_threads (global)

Define cuántos hilos se usan para procesar un grafo filter_complex. Similar a filter_threads, pero solo se usa para grafos -filter_complex. El valor predeterminado es el número de CPU disponibles.

-lavfi filtergraph (global)

Define un filtergraph complejo, es decir, uno con un número arbitrario de entradas y/o salidas. Equivale a -filter_complex.

-accurate_seek (input)

Esta opción habilita o deshabilita la búsqueda precisa en archivos de entrada con la opción -ss. Está habilitada de forma predeterminada, de modo que la búsqueda es precisa al transcodificar. Use -noaccurate_seek para deshabilitarla, lo que puede ser útil, por ejemplo, al copiar unos flujos y transcodificar otros.

-seek_timestamp (input)

Esta opción habilita o deshabilita la búsqueda por marca de tiempo en archivos de entrada con la opción -ss. Está deshabilitada de forma predeterminada. Si se habilita, el argumento de la opción -ss se considera una marca de tiempo real, y no se desplaza según el tiempo de inicio del archivo. Esto solo importa en archivos que no empiezan en la marca de tiempo 0, como los flujos de transporte.

-thread_queue_size size (input/output)

Para la entrada, esta opción establece el número máximo de paquetes en cola al leer desde el archivo o el dispositivo. Con flujos en directo de baja latencia / alta tasa, los paquetes pueden descartarse si no se leen con la suficiente rapidez; fijar este valor puede forzar a ffmpeg a usar un hilo de entrada independiente y leer los paquetes en cuanto llegan. De forma predeterminada, ffmpeg solo hace esto si se especifican varias entradas.

Para la salida, esta opción define el número máximo de paquetes que pueden ponerse en cola para cada hilo de multiplexado.

-sdp_file file (global)

Escribe información sdp de un flujo de salida en file. Esto permite volcar información sdp cuando al menos una salida no es un flujo rtp. (Requiere que al menos uno de los formatos de salida sea rtp).

-discard (input)

Permite descartar flujos o fotogramas concretos de los flujos. Cualquier flujo de entrada puede descartarse por completo usando el valor all, mientras que el descarte selectivo de fotogramas de un flujo ocurre en el demuxer y no todos los demuxers lo admiten.

none

No descarta ningún fotograma.

default

Predeterminado, que no descarta ningún fotograma.

noref

Descarta todos los fotogramas que no sean de referencia.

bidir

Descarta todos los fotogramas bidireccionales.

nokey

Descarta todos los fotogramas excepto los keyframes.

all

Descarta todos los fotogramas.

-abort_on flags (global)

Detiene y aborta ante diversas condiciones. Los flags disponibles son:

empty_output

No se pasó ningún paquete al muxer: la salida está vacía.

empty_output_stream

No se pasó ningún paquete al muxer en algunos de los flujos de salida.

-max_error_rate (global)

Establece la fracción de fallos de decodificación de fotogramas, contando todas las entradas, a partir de la cual ffmpeg devolverá el código de salida 69. Superar este umbral no termina el procesamiento. El rango es un número en coma flotante entre 0 y 1. El valor predeterminado es 2/3.

-xerror (global)

Se detiene y sale ante un error

-max_muxing_queue_size packets (output,per-stream)

Al transcodificar flujos de audio y/o vídeo, ffmpeg no empieza a escribir en la salida hasta tener un paquete de cada uno de esos flujos. Mientras espera a que eso ocurra, los paquetes de los demás flujos se almacenan en búfer. Esta opción establece el tamaño de ese búfer, en paquetes, para el flujo de salida correspondiente.

El valor predeterminado de esta opción debería ser suficiente para la mayoría de los usos, así que solo conviene tocarla si se está seguro de necesitarlo.

-muxing_queue_data_threshold bytes (output,per-stream)

Es un umbral mínimo por debajo del cual no se tiene en cuenta el tamaño de la cola de multiplexado. De forma predeterminada son 50 megabytes por flujo, y se basa en el tamaño total de los paquetes que se pasan al muxer.

-auto_conversion_filters (global)

Habilita la inserción automática de filtros de conversión de formato en todos los grafos de filtros, incluidos los definidos por -vf, -af, -filter_complex y -lavfi. Si la negociación del formato de filtro requiere una conversión, la inicialización de los filtros fallará. Aun así, pueden realizarse conversiones insertando el filtro de conversión pertinente (scale, aresample) en el grafo. Está habilitada de forma predeterminada; para deshabilitarla explícitamente hay que indicar -noauto_conversion_filters.

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

Declara que el número de bits por muestra en bruto del flujo de salida dado es value. Tenga en cuenta que esta opción fija la información que se proporciona al encoder/muxer, pero no cambia el flujo para que se ajuste a ese valor. Fijar valores que no coincidan con las propiedades del flujo puede provocar fallos de codificación o archivos de salida no válidos.

-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)

Escribe, para los flujos coincidentes, información de codificación por fotograma en el archivo indicado por path.

-stats_enc_pre escribe información sobre los fotogramas de vídeo o audio en bruto justo antes de enviarlos a codificar, mientras que -stats_enc_post escribe información sobre los paquetes codificados a medida que se reciben del encoder. -stats_mux_pre escribe información sobre los paquetes justo antes de enviarlos al muxer. Cada fotograma o paquete produce una línea en el archivo indicado. El formato de esa línea se controla con -stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt.

Cuando se escriben en un mismo archivo las estadísticas de varios flujos, las líneas correspondientes a los distintos flujos se intercalan. El orden exacto de ese intercalado no está especificado ni se garantiza que permanezca estable entre distintas ejecuciones del programa, ni siquiera con las mismas opciones.

-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)

Especifica el formato de las líneas escritas con -stats_enc_pre / -stats_enc_post / -stats_mux_pre.

format_spec es una cadena que puede contener directivas de la forma {fmt}. format_spec se escapa con barra invertida: use \{, \}, y \\ para escribir en la salida un {, } o \ literal, respectivamente.

Las directivas indicadas con fmt pueden ser una de las siguientes:

fidx

Índice del archivo de salida.

sidx

Índice del flujo de salida dentro del archivo.

n

Número de fotograma. Antes de codificar: número de fotogramas enviados hasta ahora al encoder. Después de codificar: número de paquetes recibidos hasta ahora del encoder. Multiplexado: número de paquetes enviados hasta ahora al muxer para este flujo.

ni

Número de fotograma de entrada. Índice del fotograma de entrada (es decir, el que emite un decoder) que corresponde a este fotograma o paquete de salida. -1 si no está disponible.

tb

Base de tiempo en la que se expresan las marcas de tiempo de este fotograma/paquete, como número racional num/den. Tenga en cuenta que el encoder y el muxer pueden usar bases de tiempo distintas.

tbi

Base de tiempo de ptsi, como número racional num/den. Disponible cuando ptsi está disponible; 0/1 en caso contrario.

pts

Marca de tiempo de presentación del fotograma o paquete, como entero. Debe multiplicarse por la base de tiempo para calcular el tiempo de presentación.

ptsi

Marca de tiempo de presentación del fotograma de entrada (véase ni), como entero. Debe multiplicarse por tbi para calcular el tiempo de presentación. Se imprime como (2^63 - 1 = 9223372036854775807) cuando no está disponible.

t

Tiempo de presentación del fotograma o paquete, como número decimal. Igual a pts multiplicado por tb.

ti

Tiempo de presentación del fotograma de entrada (véase ni), como número decimal. Igual a ptsi multiplicado por tbi. Se imprime como inf cuando no está disponible.

dts (packet)

Marca de tiempo de decodificación del paquete, como entero. Debe multiplicarse por la base de tiempo para calcular el tiempo de presentación.

dt (packet)

Tiempo de decodificación del fotograma o paquete, como número decimal. Igual a dts multiplicado por tb.

sn (frame,audio)

Número de muestras de audio enviadas hasta ahora al encoder.

samp (frame,audio)

Número de muestras de audio en el fotograma.

size (packet)

Tamaño del paquete codificado, en bytes.

br (packet)

Tasa de bits actual, en bits por segundo.

abr (packet)

Tasa de bits media de todo el flujo hasta el momento, en bits por segundo; -1 si no se puede determinar en este punto.

key (packet)

Carácter ’K’ si el paquete contiene un keyframe; carácter ’N’ en caso contrario.

Las directivas etiquetadas como packet solo se pueden usar con -stats_enc_post_fmt y -stats_mux_pre_fmt.

Las directivas etiquetadas como frame solo se pueden usar con -stats_enc_pre_fmt.

Las directivas etiquetadas como audio solo se pueden usar con flujos de audio.

Las cadenas de formato predeterminadas son:

pre-encoding

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

post-encoding

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

En el futuro es posible que se añadan nuevos elementos al final de las cadenas de formato predeterminadas. Los usuarios que dependan de que el formato se mantenga exactamente igual deben especificarlo manualmente.

Tenga en cuenta que las estadísticas de distintos flujos escritos en el mismo archivo pueden tener formatos diferentes.

5.12 Archivos de preset

Un archivo de preset contiene una secuencia de pares opción=valor, uno por línea, que especifican una serie de opciones que resultaría incómodo indicar en la línea de comandos. Las líneas que comienzan con el carácter almohadilla (’#’) se ignoran y se usan para añadir comentarios. Consulte el directorio presets del árbol de fuentes de FFmpeg para ver ejemplos.

Existen dos tipos de archivos de preset: los archivos ffpreset y avpreset.

5.12.1 Archivos ffpreset

Los archivos ffpreset se indican con las opciones vpre, apre, spre y fpre. La opción fpre toma como entrada el nombre de archivo del preset en lugar de un nombre de preset, y puede usarse con cualquier tipo de codec. En el caso de las opciones vpre, apre y spre, las opciones especificadas en un archivo de preset se aplican al codec actualmente seleccionado del mismo tipo que la opción de preset.

El argumento pasado a las opciones de preset vpre, apre y spre identifica el archivo de preset que debe usarse según las siguientes reglas:

Primero, ffmpeg busca un archivo llamado arg.ffpreset en los directorios $FFMPEG_DATADIR (si está definido), $HOME/.ffmpeg y en el datadir definido en tiempo de configuración (normalmente PREFIX/share/ffmpeg), o en una carpeta ffpresets junto al ejecutable en win32, en ese orden. Por ejemplo, si el argumento es libvpx-1080p, buscará el archivo libvpx-1080p.ffpreset.

Si no se encuentra ese archivo, ffmpeg buscará un archivo llamado codec_name-arg.ffpreset en los directorios mencionados, donde codec_name es el nombre del codec al que se aplicarán las opciones del archivo de preset. Por ejemplo, si selecciona el codec de vídeo con -vcodec libvpx y usa -vpre 1080p, buscará el archivo libvpx-1080p.ffpreset.

5.12.2 Archivos avpreset

Los archivos avpreset se indican con la opción pre. Funcionan de forma similar a los archivos ffpreset, pero solo permiten opciones específicas del encoder. Por lo tanto, no se puede usar un par opción=valor que especifique un encoder.

Cuando se especifica la opción pre, ffmpeg buscará archivos con el sufijo .avpreset en los directorios $AVCONV_DATADIR (si está definido), $HOME/.avconv y en el datadir definido en tiempo de configuración (normalmente PREFIX/share/ffmpeg), en ese orden.

Primero, ffmpeg busca un archivo llamado codec_name-arg.avpreset en los directorios mencionados, donde codec_name es el nombre del codec al que se aplicarán las opciones del archivo de preset. Por ejemplo, si selecciona el codec de vídeo con -vcodec libvpx y usa -pre 1080p, buscará el archivo libvpx-1080p.avpreset.

Si no se encuentra ese archivo, ffmpeg buscará un archivo llamado arg.avpreset en los mismos directorios.

5.13 Formato del archivo vstats

Las opciones -vstats y -vstats_file habilitan la generación de un archivo que contiene estadísticas sobre las salidas de vídeo generadas.

La opción -vstats_version controla la versión de formato del archivo generado.

Con la versión 1, el formato es:

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

Con la versión 2, el formato es:

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

El valor correspondiente a cada clave se describe a continuación:

avg_br

tasa de bits media expresada en Kbits/s

br

tasa de bits expresada en Kbits/s

frame

número de fotogramas codificados

out

índice del archivo de salida

PSNR

Relación señal-ruido de pico

q

calidad del fotograma

f_size

tamaño del paquete codificado expresado en número de bytes

s_size

tamaño del flujo expresado en KiB

st

índice de flujo del archivo de salida

time

instante del paquete

type

tipo de imagen

Consulte también las opciones -stats_enc para conocer otra forma de mostrar estadísticas de codificación.

6 Ejemplos

6.1 Captura de vídeo y audio

Si especifica el formato de entrada y el dispositivo, ffmpeg puede capturar vídeo y audio directamente.

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

O bien con una fuente de audio ALSA (entrada mono, id de tarjeta 1) en lugar de OSS:

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

Tenga en cuenta que debe activar la fuente de vídeo y el canal correctos antes de iniciar ffmpeg con cualquier visor de TV como xawtv, de Gerd Knorr. También debe ajustar correctamente los niveles de grabación de audio con un mezclador estándar.

6.2 Captura de X11

Capture la pantalla X11 con ffmpeg mediante

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

0.0 es el número display.screen de su servidor X11, igual que la variable de entorno DISPLAY.

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

0.0 es el número display.screen de su servidor X11, igual que la variable de entorno DISPLAY. 10 es el desplazamiento en x y 20 el desplazamiento en y para la captura.

6.3 Conversión de formato de archivo de vídeo y audio

Cualquier formato de archivo y protocolo compatible puede servir como entrada de ffmpeg:

Ejemplos:

  • Puede usar archivos YUV como entrada:
    ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
    

Esto usará los archivos:

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

Los archivos Y usan el doble de resolución que los archivos U y V. Son archivos raw, sin cabecera. Cualquier decoder de vídeo decente puede generarlos. Debe especificar el tamaño de la imagen con la opción -s si ffmpeg no puede deducirlo.

  • Puede tomar la entrada de un archivo YUV420P raw:
    ffmpeg -i /tmp/test.yuv /tmp/out.avi
    

test.yuv es un archivo que contiene datos raw YUV planares. Cada fotograma se compone del plano Y seguido de los planos U y V a la mitad de la resolución vertical y horizontal.

  • Puede generar la salida en un archivo YUV420P raw:

    ffmpeg -i mydivx.avi hugefile.yuv
    
  • Puede establecer varios archivos de entrada y de salida:

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

Convierte el archivo de audio a.wav y el archivo de vídeo YUV raw a.yuv al archivo MPEG a.mpg.

  • También puede realizar conversiones de audio y vídeo al mismo tiempo:
    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
    

Convierte a.wav a audio MPEG con una frecuencia de muestreo de 22050 Hz.

  • Puede codificar a varios formatos al mismo tiempo y definir una asignación entre el flujo de entrada y los flujos de salida:
    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
    

Convierte a.wav a a.mp2 con 64 kbits y a b.mp2 con 128 kbits. ’-map file:index’ especifica qué flujo de entrada se usa para cada flujo de salida, en el orden de definición de los flujos de salida.

  • Puede transcodificar archivos VOB descifrados:
    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
    

Este es un ejemplo típico de ripeo de DVD; la entrada es un archivo VOB y la salida un archivo AVI con vídeo MPEG-4 y audio MP3. Tenga en cuenta que en este comando se usan fotogramas B para que el flujo MPEG-4 sea compatible con DivX5, y el tamaño de GOP es 300, lo que significa un fotograma intra cada 10 segundos para un vídeo de entrada a 29.97 fps. Además, el flujo de audio está codificado en MP3, por lo que debe habilitar la compatibilidad con LAME pasando --enable-libmp3lame a configure. Esta asignación resulta especialmente útil para transcodificar DVD y obtener el idioma de audio deseado.

NOTA: para ver los formatos de entrada admitidos, use ffmpeg -demuxers.

  • Puede extraer imágenes de un vídeo, o crear un vídeo a partir de muchas imágenes:

Para extraer imágenes de un vídeo:

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

Esto extraerá un fotograma de vídeo por segundo del vídeo y los guardará en archivos llamados foo-001.jpeg, foo-002.jpeg, etc. Las imágenes se reescalarán para ajustarse a los nuevos valores WxH.

Si desea extraer solo un número limitado de fotogramas, puede usar el comando anterior junto con la opción -frames:v o -t, o junto con -ss para empezar a extraer desde un punto determinado en el tiempo.

Para crear un vídeo a partir de muchas imágenes:

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

La sintaxis foo-%03d.jpeg indica que se use un número decimal compuesto de tres dígitos rellenados con ceros para expresar el número de secuencia. Es la misma sintaxis admitida por la función printf de C, pero solo son válidos los formatos que aceptan un entero normal.

Al importar una secuencia de imágenes, -i también admite la expansión interna de patrones de comodín tipo shell (globbing) mediante la opción -pattern_type glob, específica de image2.

Por ejemplo, para crear un vídeo a partir de nombres de archivo que coincidan con el patrón glob foo-*.jpeg:

    ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
  • Puede incluir varios flujos del mismo tipo en la salida:
    ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
    

El archivo de salida resultante test12.nut contendrá los cuatro primeros flujos de los archivos de entrada en orden inverso.

  • Para forzar la salida de vídeo CBR:

    ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
    
  • Las cuatro opciones lmin, lmax, mblmin y mblmax usan unidades ’lambda’, pero puede usar la constante QP2LAMBDA para convertir fácilmente desde unidades ’q’:

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

7 Véase también

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

8 Autores

Los desarrolladores de FFmpeg.

Para más detalles sobre la autoría, consulte el historial de Git del proyecto (https://git.ffmpeg.org/ffmpeg); por ejemplo, escribiendo el comando git log en el directorio de fuentes de FFmpeg, o consultando el repositorio en línea en https://git.ffmpeg.org/ffmpeg.

Los mantenedores de los componentes específicos figuran en el archivo MAINTAINERS del árbol de código fuente.

Alojamiento proporcionado por telepoint.bg