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:1selecciona 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 copyselecciona el encodercopy, 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
libx264a 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