diff --git a/css/css.css b/css/css.css index 534969f..5d3bcb1 100644 --- a/css/css.css +++ b/css/css.css @@ -260,3 +260,26 @@ input[type=checkbox]:checked + div { overflow: hidden; transition: opacity .5s linear, height .5s linear; } + +.eslangbutton { + background-color: #04AA6D; /* Green */ + border: none; + color: white; + padding: 25px 43px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 25px; + margin: 4px 2px; + cursor: pointer; +} + +.eslangbutton1 { + background-color: black; + color: black; + border: 2px solid #555555; + border-radius: 12px; +} +.recipe:hover, .eslangbutton:hover { + background-color: #449d44; +} diff --git a/ffmprovisr_spanish/index_es.html b/ffmprovisr_spanish/index_es.html new file mode 100644 index 0000000..af530d4 --- /dev/null +++ b/ffmprovisr_spanish/index_es.html @@ -0,0 +1,2989 @@ + + + + ffmprovisr en español + +
English
+
+ + + + + + + + +
+
+

➺ ffmprovisr ❥

+
+ + + +
+
+

Acerca de ffmprovisr

+

FFmpeg en simple

+

FFmpeg es una poderosa herramienta para trabajar con archivos audiovisuales. Desafortunadamente, FFmpeg tiene una gran curva de aprendizaje, especialmente para usuarios que no están tan familiarizados con la interfaz de línea de comandos. Ffmprovisr busca ayudar a los usuarios en el proceso de creación de comandos para que más personas puedan acceder a los beneficios de FFmpeg.

+

Cada sección muestra información importante sobre cómo se pueden realizar una amplia variedad de tareas usando FFmpeg. Para hacer un uso efectivo de este sitio web, haz click en la tarea que quieres realizar. Esta te llevará a un comando o a una serie de ellos. Da click en la descripción del comando y se te mostrará un ejemplo del comando junto con una explicación de cómo este comando funciona. Además, estará el desglose de cada uno de sus indicadores (u opciones).

+

Esta página no tiene función de búsqueda, pero se puede acceder a todas las recetas a través de la segunda opción en la barra lateral y usar el buscador de tu navegador (usualmente "ctrl+f" o "cmd+f") para realizar búsquedas por palabras claves en todas las recetas disponibles.

+

Esta iniciativa de traducción fue inciada en diciembre de 2023 por estudiantes del programa MIAP en NYU: Juliana Principe y Julia Delgadillo. Joss Alvarado y Emily Uruchima realizaron actualizaciones y nuevas traducciones en diciembre de 2025. Todavía quedan muchas recetas por traducir, ¡y te invitamos a colaborar!

+

Tutoriales

+

¡Aviso!

La mayoría de las páginas web redireccionadas, están en inglés

+

Para los pasos básicos, revisa el programa de la web oficial.

+

Para instrucciones en cómo instalar FFmpeg en MacOS, Linux, y Windows, dirígete a las instrucciones de instalación creadas por Reto Kromer.

+

Para línea de comandos básicos en Bash, prueba el curso exprés de línea de comando. Para más información presentada en el mismo estilo de ffmprovisr, revisa explainshell.com!

+

Licencia

+

+ Creative Commons License
+ Este trabajo está protegido por la licencia de Creative Commons Atribución 4.0 Internacional. +

+

Proyectos hermanos

+

Script Ahoy: recurso comunitario de programación en línea de comando para archivistas y bibliotecarios

+

The Sourcecaster: aplicación que ayuda a usar la línea de comandos para resolver problemas comunes que surgen al trabajar con archivos digitales.

+

Micropops: librería de las línea de comandos más usadas para la manipulación de archivos digitales.

+

Cable Bible: guía de cables y conectores usados en soportes tecnológicos audiovisuales.

+

QEMU QED: página web de instrucciones para usar QEMU (Quick EMUlator), la cual es una aplicación que usa línea de comandos para emulación y virtualización de computadoras.

+

ffmpeg-artschool: taller de AMIA que proporciona línea de comandos, ejercicios y actividades para crear arte usando FFmpeg.

+
+ + + + + + +
+

Fundamentos de FFmpeg

+ + + +
+
Estructura básica de una línea de comando en FFmpeg
+

Sí, puede parecer intimidante, pero en esencia un comando de FFmpeg es relativamente simple. Después de installar FFmpeg (puedes ver las instrucciones en ingles aquí), puedes "llamar" al programa al tipear ffmpeg en tu terminal.

+

Cada instrucción que le das a FFmpeg trabaja como una dupla. (1) Un indicador que indica el tipo de acción que quieres realizar; (2) los valores que afectarán a cada indicador. Importante: Los indicadores siempre están precedidas por un guion.

+

Por ejemplo, en la instrucción -i input_file.ext, el indicador -i le dice a FFmpeg que estás ingresando un archivo, e input_file.ext es el nombre del archivo ingresado.

+

De manera similar, en la instrucción -c:v prores, el indicador -c:v le dice a FFmpeg que quieres codificar el contenido de video y prores especifíca el códec que quieres que se use en el proceso (-c:v es el abreviado de -codec:v/-codec:video).

+

Una línea de comando básico de FFmpeg luce así:

+
+
ffmpeg
comando de inicio
+
-i input_file.ext
ruta y nombre del archivo de ingreso
+
-indicador acción
le dice a FFmpeg que haga algo a través de un indicador y acción válida.
+
output_file.ext
ruta, nombre y extensión del archivo de salida.
+ Al ser esta la última parte del comando, el nombre del archivo no tiene un indicador que indique que es el archivo de salida.
+
+ +
+ + + + + +
+
Reproducir vs. Guardar
+

FFplay te permite reproducir videos ya creados, mientras que FFmpeg te permite guardar el video.

+

El siguiente comando crea y guarda un video de 10 segundos de barras SMPTE:

+

ffmpeg -f lavfi -i smptebars=size=640x480 -t 10 output_file.ext

+
¡No olvides!
Debes cambiar output_file.extpor el nombre que quieres que tenga tu archivo de salida
+

El siguiente comando reproduce y transmite las barras SMPTE, pero no guarda el archivo en tu computadora:

+

ffplay -f lavfi smptebars=size=640x480

+

La pequeña pero importante diferencia: el indicador -i es necesario para FFmpeg, pero no para FFplay. Además, el comando de FFmpeg necesita tener -t 10 y output_file.ext para especificar la duración del video y la ruta donde será guardado.

+ +
+ +
+
+ +

Aprende conceptos más avanzados de FFmpeg

+ + + +
+
Uso de línea de comando en grupo y en bucle
+

ffmpeg -nostdin -i input_file ...

+

Uno de los usos más frecuentes de FFmpeg es ejecutar grupos de comandos en bucle para, por ejemplo, generar, en un solo paso, archivos de acceso para una colección entera.

+

Al ejecutar un comando de FFmpeg en bucle, es necesario usar el indicador -nostdin previo a ingresar la acción para asegurar la ejecución correcta de los comandos. Esto es necesario para obviar el comportamiento normal de FFmpeg de permitir la interacción estándar de las acciones, lo cual puede resultar en errores, ya que las acciones en bucle se alimentan del comando que se está ejecutando.

+ +
+ + + + + +
+
Códec por default
+

A menos que sea especificado, FFmpeg ejecutará un códec y parámetros determinados de manera automática basado en propiedades internas establecidas por default. Estas propiedades son aplicadas en base al tipo de archivo escrito en el output file. Por ejemplo, .mov o .wav).

+

Cuando se crean o transcodifican archivos en FFmpeg, es importante considerar la configuración del códec para audio y video, ya que las opciones por default pueden no ser las adecuadas para tu contexto o propósitos específicos. Lo siguiente es una lista de los códec por default para algunos tipos de archivos más comunes.

+
    +
  • .avi: Códec de audio: mp3, Códec de video: mpeg4
  • +
  • .mkv: Códec de audio: ac3, Códec de video: H.264
  • +
  • .mov: Códec de audio: AAC, Códec de video: H.264
  • +
  • .mp4: Códec de audio: AAC, Códec de video: H.264
  • +
  • .mpg: Códec de audio: mp2, Códec de video: mpeg1video
  • +
  • .mxf: Códec de audio: pcm_s16le, Códec de video: mpeg2video
  • +
  • .wav: Códec de audio: pcm_s16le (16 bit PCM)
  • +
+ +
+ + + + + +
+
Filtergraphs
+

Muchos comandos de FFmpeg usan filtros que manipulan los canales de audio y video de alguna manera. Por ejemplo, hflip sirve para girar horizontalmente un video. amerge, combina dos o más canales de audio en un solo stream.

+

El uso de un filtro siempre irá señalado por el indicador -vf (filtro de video por sus siglas en inglés), o -af (filtro de audio por sus siglas en inglés), seguido del nombre y la opción del filtro a usarse. Para el ejemplo, usemos el filtro convert colorspace y el commando se vería de la siguiente manera.

+

ffmpeg -i input_file -c:v libx264 -vf colormatrix=src:dst output_file +

En el comando previo, colormatrix es el filtro usado.src y dst representan la fuente y el destino del espacio de color a aplicarse. Entonces, la parte después de -vf es conocido como un filtergraph.

+

Aviso!

src y dst tienen valores específicos que son los que reemplazarán src y dst. +

También es posible aplicar múltiples filtros manera secuencial en un filtergraph. A esta secuencia de filtros se le llama cadena de filtros. Asimismo, un filtergraph puede incluir múltiples cadenas de filtros. Los filtros en una cadena de filtros se separan mediante una coma (,) y las cadenas de filtros se separan mediante punto y coma (;). Por ejemplo, analicemos el comando de inverse telecine.

+

ffmpeg -i input_file -c:v libx264 -vf "fieldmatch,yadif,decimate" output_file

+

Aquí tenemos un filtergraph que incluye una cadena de filtros, la cual está compuesta de tres filtros de video.

+

Siempre es mejor ingresas tu filtergraph entre comillas, porque esto te permitirá usar espacios en tu filtergraph. Entonces, usando de nuevo el mismo ejemplo de inverse telecine, los siguientes comandos de filtros son válidos y equivalentes.

+
    +
  • -vf fieldmatch,yadif,decimate
  • +
  • -vf "fieldmatch,yadif,decimate"
  • +
  • -vf "fieldmatch, yadif, decimate"
  • +
+

pero -vf fieldmatch, yadif, decimate no es válido.

+

Ahora, el orden de los filtros sí es importante. Los filtros de video son aplicados al input file en el mismo orden en el que son escritos en el comando. Al input file se le aplica el primer filtro; luego con el resultado de ese filtro, se aplica el segundo de la cadena y así sucesivamente. En el ejemplo de arriba, fieldmatch reconstruye los fotogramas originales del telecineado inverso. yadif hace algo llamado deinterlace, que es (this is a failsafe in case any combed frames remain. Por ejemplo, si la fuente mezcla telecineado y contenido interlaceado lineal), y, por último, decimate elimina fotogramas duplicados. Es claro que no es posible eliminar fotogramas duplicados si estos primero no han sido reconstruidos.

+

Notas

+
    +
  • -vf es el abreviado de -filter:v
  • +
  • Si el comando tiene más de un input y output file, entonces debes usar el flag -filter_complex en lugar de -vf.
  • +
  • Se debe usar comillas rectas ("como estas"), en vez de las curvas (“estas no”).
  • +
+

Para más información, visita la página FFmpeg wiki Guia de filtros.

+ +
+ + + + + +
+
Asignación de flujos
+

La asignación de flujos consiste en definir cuál de aquellos (ej., pistas de video o audio) que están presentes en el input file también estarán presentes en el output file. FFmpeg reconoce cinco tipos de flujos.

+
    +
  • a - audio
  • +
  • v - video
  • +
  • s - subtítulo
  • +
  • d - data (inluye pistas de código de tiempo)
  • +
  • t - archivo adjunto
  • +
+

La asignación se ejecuta usando el indicador -map seguido de una acción del tipo, número_archivo:tipo_de_flujo[:número_de_flujo]. La numeración está indexada al cero y es posible asignar por tipos de flujos o por todo el flujo de datos que aparece en el input file. Se propone un ejemplo de esto debajo.

+
    +
  • -map 0:v significa 'toma todas los flujos de video del primer input file’.
  • +
  • -map 0:3 significa 'toma el cuarto flujo de datos del primer input file’.
  • +
  • -map 0:a:2 significa 'toma el tercer flujo de audio del primer input file’.
  • +
  • -map 0:0 -map 0:2 significa 'toma el primer y el tercer flujo de datos del primer input file’.
  • +
  • -map 0:1 -map 1:0 significa 'toma el segundo flujo del primer del primer input file y el primer flujo del segundo input file’.
  • +
+

Cuando no se especifica la asignación en el comando de FFmpeg, la acción predeterminada para archivos de video es tomar solo una pista de audio y video cada uno para el ouput file. Otro tipos de pistas como códigos de tiempo o subtítulos, no se copiarán en el output file por defecto. Si en el input file hay múltiples pistas de video o audio, FFmpeg seleccionará aquellos de mejor calidad de manera automática.

+

Para la asignación de todos los flujos de información del input file al output file, puedes usar -map 0. ¡Importante! Recuerda que no todos los contenedores pueden incluir todos los tipos de flujo de información. Por ejemplo, un archivo .mp4 no pueden contener códigos de tiempo.

+

Asignación de manera segura

+

Para procesar de manera segura archivos que puedan o no contener un determinado tipo de flujo de información, puedes añadir un ? seguido de tu comando de asignación. Por ejemplo, -map 0:a? en lugar de -map 0:a.

+

Esto convierte el proceso de asignación a opcional. Es decir, las pistas de audio se asignarán de estar presentes en el archivo, pero si el archivo no los contiene, la transcodificación procederá como de costumbre, excepto por la asignación de flujos de audio en el output file. Si no se le añade ?, FFmpeg emitirá un mensaje de error sobre ese archivo.

+

Esto es especialmente recomendado cuando se procesa archivos de video en grupo, porque te aseguras que todos los archivos en tu grupo serán transcodificados ya sea si tienen o no pistas de audio.

+

Para mayor información, puedes revisar la página de FFmpeg wiki Map y la documentación sobre -map en la página oficial de FFmpeg.

+ +
+ + +
+
+

Cambio de contenedor (rewrap)

+ + + + +
+
Rewrap de un archivo
+

ffmpeg -i input_file.ext -c copy -map 0 output_file.ext

+

Este combiará de contenedor del archivo ingresado. Creará un nuevo archivo en el que el contenido original interno del archivo de video (pistas de video, audio o subtítulos) no cambiará, pero sí tendrán un formato nuevo de contenedor.

+

Nota: rewrapping (cambio de contenedor) también es conocido como remuxing (abreviado de remultiplexado).

+
+
ffmpeg
comando de inicio
+
-i input_file.ext
ruta y nombre del input file
+
-c copy
copiar los flujos de información de manera directa sin volver a codificarlos.
+
-map 0
Asignar todos los flujos de información del input file al output file.
+ Si no usas esta indicación, FFmpeg, por defecto, solo asignará una pista por cada tipo de flujo (video, audio, subtítulos) al output file. No obstante, los archivos pueden tener múltiples pistas de un tipo de flujo. Por ejemplo, un video puede tener varias pistas de audio para diferentes idiomas. Entonces, si lo que deseas es conservar todas las pistas, es necesario que uses esta indicación.
+
output_file.ext
ruta y nombre del output file.
+ El nuevo contenedor al que se mudará el contenido podrá usar las siguientes extensiones de archivo, .mkv, .mp4, .mov.
+
+

Aviso importante

+

Puede suceder que no se pueda hacer el rewrap del contenido de un archivo a un nuevo contenedor sin antes re codificar uno o más de los flujos de información: pistas de video, audio y subtítulos). Algunos contenedores solo pueden albergar ciertos tipos de codificación. Por ejemplo, el contenedor .mp4 va de la mano con pistas de video codificadas en H.264 y pistas de audio codificadas en AAC, aunque otros tipos de pistas de audio y video son posibles. Otro ejemplo, el contenedor Matroska no permite albergar pistas de datos.

+

En estos casos, FFmpeg emitirá un mensaje de error. Si te suceden estos tipos de errores, te invitamos a consultar la lista de recetas de transcodificación.

+ +
+ + + + + + + + + +
+
Rewrap de DV video a .dv file
+

ffmpeg -i input_file -f rawvideo -c:v copy output_file.dv

+

Este comando va a transferir la información de un video codificado en DV Códec pero albergado en un contenedor diferente, como .mov por ejemplo, y luego lo cambiará a contenedor DV file con extensión .dv. Dado que los archivos DV pueden contener una gran cantidad de metadatos procedentes del flujo DV, es necesario cambiar los archivos de contenedor a través de este método para evitar la eliminación involuntaria de dichos metadatos.

+
+
ffmpeg
comando de inicio
+
-i input_file
ruta y nombre del input file
+
-f rawvideo
esta indicación le dice a FFmpeg que pase los flujos de video a datos de video en bruto sin remezcla. Este paso garantiza que la metadata incrustada sobreviva en comparación con un proceso de cambio de contenedor estándar.
+
-c:v copy
indica copiar la pista de video de DV directamente sin volver a codificar.
+
output_file.dv
le indica a FFmpeg que use el contenedor de DV para el output file.
+
+ +
+ + +
+
+

Cambio de códec (transcodificación)

+ + + + + + + + +
+
Transcodificación a H.264
+

ffmpeg -i input_file -c:v libx264 -pix_fmt yuv420p -c:a aac output_file

+

Este comando transcodifica el input file a H.264 en video y a AAC en audio en contenedor .mp4. El códec libx264 tiene una configuración preestablecida de compresión de calidad media y un CRF (factor de velocidad constante por sus siglas en inglés) de 23. El CRF determina la calidad y el tamaño del archivo del video H.264 resultante. Un CRF bajo se traduce en un archivo pesado y de alta calidad. Un CRF alto significa lo contrario.

+
+
ffmpeg
comando de inicio
+
-i input_file
ruta, nombre y extensión del input file
+
-c:v libx264
indica a FFmpeg que codifique la pista de video como H.264
+
-pix_fmt yuv420p
indica que libx264 usará un esquema de submuestreo de chroma que es lo más cercano al archivo de origen. Esto puede resultar en el submuestro de chroma de Y′CBCR 4:2:0, 4:2:2, o 4:4:4. QuickTime y la mayoría de los reproductores que no usan FFmpeg no pueden decodificar (reproducir) archivos en H.264 que no son 4:2:0. Para estar tener seguridad de que el archivo se podrá reproducir en todos los reproductors, debes especificar el submuestreo de chroma en 4:2:0.
+
-c:a aac
indica codifica la pista de audio como AAC.
+ AAC es el códec más usado para pistas de audio en contenedores .mp4.
+
output_file
ruta, nombre y extensión del output file
+
+

Para optimizar el archivo para transmisión, puedes agregar la siguiente preconfiguración.

+

ffmpeg -i input_file -c:v libx264 -pix_fmt yuv420p -c:a aac -movflags +faststart output_file

+
+
-movflags +faststart
esta indicación le pide a FFmpeg que mueva parte de los metadatos esenciales al inicio del archivo, lo cual permite iniciar el visionado antes de que el archivo termine de descargar. Esto es una característica ideal para transmisión.
+
+

Se puede usar el mismo comando básico para generar un archivo de mayor calidad mediante alguna de las preconfiguraciones.

+

ffmpeg -i input_file -c:v libx264 -pix_fmt yuv420p -preset veryslow -crf 18 -c:a aac output_file

+
+
-preset veryslow
Esta indicación le pide a FFmpeg que use la preconfiguración más lenta posible para lograr una compresión de alta calidad.
+ Las preconfiguraciones disponibles desde la más lento hasta la más rápida son, veryslow, slower, slow, medium, fast, faster, veryfast, superfast, ultrafast.
+
-crf 18
Si especificar un CRF bajo vas a obtener un archivo pesado con una mejor calidad visual. Para archivos H.264 codificados con submuestreo de chroma en 4:2:0 (por ejemplo, usando -pix_fmt yuv420p), la escala se sitúa entre 0-51 para contenido de 8-bit, siendo 0 compresión sin pérdida y 51 la peor calidad posible.
+ Si el CRF no está especificado, libx264 usará el valor predeterminado de 23. 18 es considerado como compresión "visualmente sin pérdida".
+
+

Por defecto, esta receta de comando incluirá una sola pista de cada tipo de flujos, por ejemplo, de audio y video, en el output file. Si deseas incluir más pistas, consulta la entrada de Asignación de flujos.

+

Para más información, puedes revisar la guía de codificación de FFmpeg y H.264 en FFmpeg wiki.

+ +
+ + + + + + + + + +
+
H.264 de DCP
+

ffmpeg -i input_file_video.mxf -i input_file_audio.mxf -c:v libx264 -pix_fmt yuv420p -c:a aac output_file.mp4

+

Este comando va a transcodificar los archivos de audio y video albergados en MXF a un archivo codificado en H.264. ¡Aviso importante! Esta receta solo funciona en DCP no encriptados y que contengan un solo archivo de video y audio cada uno.

+
+
ffmpeg
comando de inicio
+
-i input_file_video
ruta y nombre del archivo de ingreso de video. La extensión debe ser .mxf
+
-i input_file_audio
ruta y nombre del archivo de ingreso de audio. La extensión debe ser .mxf
+
-c:v libx264
indica que transcodifique el video a H.264
+
-pix_fmt yuv420p
indica que el esquema de submuestreo de chroma será yuv420p para mejor compatibilidad con los reproductores
+
-c:a aac
indica la transcodificación usando códec AAC para audio
+ Ten en cuenta que, desafortunadamente, el contenedor MP4 no puede albergar códec de audio PCM (Pulse-Code Modulation)
+
output_file.mp4
ruta, nombre y extensión .mp4 para el archivo de salida
+
+

Variación: Se pueden copiar los flujos de audio originales en PCM si usas el contenedor Matroska en vez del MP4.

+

ffmpeg -i input_video_file.mxf -i input_audio_file.mxf -c:v libx264 -pix_fmt yuv420p -c:a copy output_file.mkv

+
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+
output_file.mkv
ruta, nombre y extensión .mkv para el archivo de salida
+
+ +
+ + + + + +
+
Crea un video en códec FFV1 versión 3 en el contenedor Matroska con entrada framemd5
+

ffmpeg -i input_file -map 0 -dn -c:v ffv1 -level 3 -g 1 -slicecrc 1 -slices 16 -c:a copy output_file.mkv -f framemd5 -an framemd5_output_file

+

Este comando va a transcodificar sin pérdida el video al códec FFV1 versión 3 en contenedor Matroska. Para verificar que el archivo sea de compresión sin pérdida, se genera un framemd5 del video de origen. Para más información de la codificación de FFV1 revisa la página de FFmpeg wiki.

+
+
ffmpeg
inicia el commando.
+
-i input_file
ruta y nombre del archivo ingresado
+
-map 0
Asigna todos los flujos presentes en el archivo de ingreo. Esto es importante, porque FFmpeg solo asignaría un flujo de cada tipo de manera predeterminada al archivo de salida.
+
-dn
ignorar pistas de datos. El contenedor Matroska no puede albergar pistas de datos.
+
-c:v ffv1
especifíca el códec de video en FFV1.
+
-level 3
especifíca la versión 3 del códec FFV1.
+
-g 1
especifíca la codificación entre fotogramas o GOP=1.
+
-slicecrc 1
Añade información CRC (verificación de redundancia cíclica por sus siglas en inglés) para cada sección. Esto posibilita que el decodificador pueda detectar errores en el flujo de bits, en vez de decodificar secciones con errores. (Puedes leer más aquí).
+
-slices 16
Cada fotograma es divido en 16 secciones. 16 es una buena solución intermedia entre el peso de archivo y el tiempo de codificación.
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+
output_file.mkv
ruta, nombre y extensión del archivo de salida. Usa la extensión .mkv para guardar tu archivo en contenedor Matroska.
+
-f framemd5
Decodifica el video con el mezclador framemd5 para generar checksums MD5 para cada fotograma del archivo ingresado. Esto permite verificar la compresión sin pérdida mediante comparación con los framemd5s del archivo de salida.
+
-an
ignora la pista de audio al crear framemd5 (audio no)
+
framemd5_output_file
ruta, nombre y extensión del archivo de framemd5.
+
+ +
+ + + + + +
+
Conversión de DVD a H.264
+

ffmpeg -i concat:input_file_1\|input_file_2\|input_file_3 -c:v libx264 -c:a aac output_file.mp4

+

Este comando permite crear un archivo H.264 de un DVD que no está protegido.

+

Antes de codificar, necesitas establecer cuáled de los archivos .VOB en el DVD o .iso albergan el contenido que deseas codificar. Dentro del directorio VIDEO_TS, verás una serie de archivos con nombres como VTS_01_0.VOB, VTS_01_1.VOB, etc. Alguno de los archivos .VOB tendrán menus, funciones especiales, etc, así que ubica aquellos que tienen el contenido que te interesa. Lo puedes reproducir usando VLC.

+
+
ffmpeg
inicia el commando
+
-i concat:input_file
lista todos los archivos VOB e indica a FFmpeg que los concatene. Cada archivo ingresado debe estar separado por una barra invertida (\) y una barra vertical (|).
+ -i concat:VTS_01_1.VOB\|VTS_01_2.VOB\|VTS_01_3.VOB
+ La barra invertida es un caracter de escape para la barra vertical(|).
+
-c:v libx264
codifica el video en códec H.264
+
-c:a aac
codifica el audio en códec AAC.
+ AAC es el códec más usado para pistas de audio en contenedores .mp4.
+
output_file.mp4
ruta, nombre y extensión del archivo de salida
+
+

También es posible ajustar la calidad de archivo de salida al añadir los indicadores -crf y -preset junto con sus valores.

+

ffmpeg -i concat:input_file_1\|input_file_2\|input_file_3 -c:v libx264 -crf 18 -preset veryslow -c:a aac output_file.mp4

+
+
-crf 18
establece el factor de velocidad constante como visualmente sin compresión. Libx264 tiene por defecto asignado crf de 23, el cual es considerado de calidad media. Un CRF menor indica un archivo de video pesado y de alta calidad.
+
-preset veryslow
Una preconfiguración más lenta resultará en un mejor proceso de compresión y, por lo tanto, un archivo de mejor calidad. El valor predeeterminado es medium; valores más lentos son slow, slower y veryslow.
+
+

Ten en cuenta que por defecto, libx264 solo codificará una pista de video y otra de audio eligiendo la 'mejor' dentro de las opciones disponibles. Para mantener todos las pistas de video y audio, añade el indicador -map.

+

ffmpeg -i concat:input_file_1\|input_file_2 -map 0:v -map 0:a -c:v libx264 -c:a aac output_file.mp4

+
+
-map 0:v
codifica todas las pistas de video
+
-map 0:a
codifica todas las pistas de audio
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Cambio de propiedades de vídeo

+ + + + +
+
Transformar relación de aspecto 4:3 a 16:9 con pillarbox
+

Transforma un archivo de vídeo con el relación de aspecto 4:3 a un archivo de vídeo con el relación de aspecto 16:9 por medio del correcto formato de pillarboxing.

+

ffmpeg -i input_file -filter:v "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
relleno de video
Esta fórmula independiente de la resolución en realidad está rellenando cualquier relación de aspecto en 16:9 por medio del formato pillarboxing, porque el filtro de vídeo utiliza valores relativos para el ancho de ingreso (iw), el alto de ingreso (ih), el ancho de salida (ow) y el alto de salida (oh).
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+ Para videos sin sonido, puede reemplazar -c:a copy con -an.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Transformar relación de aspecto 16:9 a 4:3 por medio del formato letterbox.
+

Transforme un archivo de vídeo con una relación de aspecto de 16:9 en un archivo de vídeo con una relación de aspecto de 4:3 por medio del formato letterbox correcto.

+

ffmpeg -i input_file -filter:v "pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v "pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2"
relleno de video
+ Esta fórmula independiente de la resolución en realidad está rellenando cualquier relación de aspecto en 4:3 por medio del formato letterboxing, porque el filtro de vídeo utiliza valores relativos para el ancho de ingreso (iw), el alto de ingreso (ih), el ancho de salida (ow) y el alto de salida (oh). (oh).
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+ Para videos sin sonido, puede reemplazar -c:a copy con -an.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Voltea la imagen del video horizontal y/o verticalmente
+

ffmpeg -i input_file -filter:v "hflip,vflip" -c:a copy output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v "hflip,vflip"
voltea la imagen horizontal y verticalmente
Al usar solo uno de los parámetros hflip o vflip para filtrar, la imagen se voltea solo en ese axis Las comillas no son obligatorias.
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+ Para videos sin sonido, puede reemplazar -c:a copy con -an.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Transforma SD en HD por medio del formato pillarbox
+

Transforma un video SD (definición estándar) con relación de aspecto 4:3 a un video HD (definición alta) con relación de aspecto 16:9 por medio del formato correcto de pillarboxing.

+

ffmpeg -i input_file -filter:v "colormatrix=bt601:bt709, scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:a copy output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v "colormatrix=bt601:bt709, scale=1440:1080:flags=lanczos, pad=1920:1080:240:0"
establecer matriz de color, escala de video y relleno
Se applican tres filtros: +
    +
  1. Los coeficientes luma se modifican de vídeo SD (según Rec. 601) a vídeo HD (según Rec. 709) mediante una matriz de color. Tenga en cuenta que hoy Rec. 709 se utiliza a menudo también para SD y por lo tanto puede cancelar este parámetro.
  2. +
  3. El filtro de escala(scale=1440:1080) funciona tanto para aumentar como para reducir la escala. Usamos el algoritmo de escalado de Lanczos (flags=lanczos), que funciona más lento pero da mejores resultados que el algoritmo bilineal predeterminado..
  4. +
  5. El filtro de relleno (pad=1920:1080:240:0) completa la transformación de SD asi a HD.
  6. +
+
-c:a copy
vuelve a codificar utilizando el mismo códec de audio
+ Para videos sin sonido, puede reemplazar -c:a copy with -an.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

Si su archivo de inicio está entrelazado, querrá desentrelazarla antes de escalarlo. En ese caso, su comando se vería así:

+

ffmpeg -i input_file -c:v libx264 -filter:v "yadif, colormatrix=bt601:bt709, scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:a copy output_file

+

See the Interlaced NTSC to MP4 recipe for a fuller explanation of the deinterlacing step.

+ +
+ + + + + +
+
Cambiar la relación de aspecto para visionado sin volver a codificar el video
+

ffmpeg -i input_file -c:v copy -aspect 4:3 output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-c:v copy
Copie todas las transmisiones de video asignadas.
+
-aspect 4:3
Cambia la relación de aspecto para visionado a 4:3. Experimente con otras relaciones de aspecto como 16:9. Usado junto a -c:v copy, afectará la relación de aspecto guardada a nivel de contenedor, pero no la relación de aspecto guardada en cuadros codificados, si existen.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
Recortar video
+

ffmpeg -i input_file -vf "crop=ancho:alto" output_file

+

Este comando recorta el vídeo de ingreso a las dimensiones definidas.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-vf "width:height"
Recorta el vídeo al ancho y alto significados (en píxeles).
+ De forma predeterminada, el área de recorte está centrada: es decir, la posición de la parte superior izquierda del área recortada está establecida en x = (ancho_ingreso - ancho_salida) / 2, y = alto_ingreso - alto_salida) / 2. +
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

También es posible especificar la posición de recorte agregando las coordenadas x e y que representan la parte superior izquierda de su área recortada a su filtro de recorte, asi:

+

ffmpeg -i input_file -vf "crop=ancho:alto[:x_position:y_position]" output_file

+
Ejemplos
+

El marco original, una captura de pantalla de Maggie Cheung en la pelicula Hero:

+ VLC screenshot of Maggie Cheung +

Resultado del comando ffmpeg -i maggie.mov -vf "crop=500:500" output_file:

+ VLC screenshot of Maggie Cheung, cropped from original +

Resultado del comando ffmpeg -i maggie.mov -vf "crop=500:500:0:0" output_file, añadiendo :0:0 para recortar desde la esquina superior izquierda:

+ VLC screenshot of Maggie Cheung, cropped from original +

Resultado del comando ffmpeg -i maggie.mov -vf "crop=500:300:500:30" output_file:

+ VLC screenshot of Maggie Cheung, cropped from original + +
+ + + + + +
+
Cambia el color del vídeo a blanco y negro
+

ffmpeg -i input_file -filter_complex hue=s=0 -c:a copy output_file

+

Un comando básico para alterar el tono del color a blanco y negro usando filter_complex (credito @FFMPEG via Twitter).

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter_complex hue=s=0
usa el comando filter_complex para establecer el tono en blanco y negro
+
-c:a copy
copia la configuración de codificación del input_file al output_file
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

Una alternativa que conserva la información de entrelazado para un archivo ProRes 422 HQ generado, por ejemplo, a partir de una cinta maestra (credito Dave Rice):

+

ffmpeg -i input_file -c:v prores_ks -flags +ildct -map 0 -c:a copy -profile:v 3 -vf hue=s=0 output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-c:v prores_ks
codifica el vídeo a ProRes (prores_ks marca la secuencia como entrelazada, a diferencia de prores)
+
-flags +ildct
garantiza que el output_file tenga codificación entrelazada, utilizando la transformada de coseno discreta con reconocimiento de entrelazado
+
-map 0
garantiza que ffmpeg asigne todos los flujos de document_ingreso a document_output
+
-c:a copy
copia la configuración de codificación del input_file al output_file/dd> +
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + +
+
+

Cambio o visualización de las propiedades de audio

+ + + + +
+
Extraer audio de un archivo AV
+

ffmpeg -i input_file -c:a copy -vn output_file

+

Este comando extrae la pista de audio sin pérdida de un archivo audiovisual.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre, extensión del archivo de entrada
+
-c:a copy
re-codifica usando el mismo códec de audio
+
-vn
sin pista de vídeo
+
output_file
ruta nombre, y extensión del archivo de salida
+
+ +
+ + + + + +
+
Combinar las pistas de audio en una sola, en un archivo de video
+

ffmpeg -i input_file -filter_complex "[0:a:0][0:a:1]amerge[out]" -map 0:v -map "[out]" -c:v copy -shortest output_file

+

Este comando combina dos pistas de audio presentes en un archivo de video en un solo flujo. Esto puede ser útil en situaciones en las que un proceso posterior, como la generación automática de subtítulos de YouTube, requiere una sola pista de audio. Para asegurarse de que está asignando las pistas de audio correctas, ejecute ffprobe antes de escribir los comandos para identificar las pistas deseadas. Se pueden combinar más de dos flujos de audio extendiendo el patrón presente en la opción -filter_complex.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entradada
+
-filter_complex
indica a ffmpeg que se utilizará un filtro complejo
+
"
comillas para iniciar el gráfico de filtros
+
[0:a:0][0:a:1]amerge[out]
combina las dos pistas de audio en una sola
+
"
comillas para finalizar el gráfico de filtros
+
-map 0:v
mapea el video
+
-map "[out]"
mapea el audio combinado definido por el filtro
+
-c:v copy
copia el video
+
-shortest
limita al flujo más corto
+
output_file
ruta, nombre y extensión del archivo de video de salida
+
+ +
+ + + + + +
+
Invierte el desplazamiento de fase de audio
+

ffmpeg -i input_file -af pan="stereo|c0=c0|c1=-1*c1" output_file

+

Este comando invierte la fase de audio del segundo canal girándolo 180°.

+
+
ffmpeg
inicia el commando
+
-i input file
ruta, nombre y extensión del archivo de entrada
+
-af
especifica que la siguiente sección debe interpretarse como un filtro de audio
+
pan=
indica al texto que aparece en comillas a continuación que debe utilizar el filtro pan
+
"stereo|c0=c0|c1=-1*c1"
asigna el primer canal de salida (cO) al primer canal de entrada y el segundo canal de salida (c1) al inverso del segundo canal de entrada
+
output file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Calcula los niveles de sonoridad
+

ffmpeg -i input_file -af loudnorm=print_format=json -f null -

+

Este filtro calcula y genera información de sonoridad sobre un archivo de entrada (etiquetado como input) en formato JSON, así como los niveles que se obtendrían si se aplicara el filtro loudnorm en su modo de una sola pasada (etiquetado como output). Los valores generados se pueden utilizar como entradas para una 'segunda pasada' del filtro loudnorm, lo que permite una normalización de sonoridad más precisa que si se utilizaría en una sola pasada.

+

Estas instrucciones utilizan la configuración predeterminada de loudnorm, que se ajusta bien a las recomendaciones de PBS en cuanto al nivel de sonoridad objetivo. Puede encontrar más información en la documentación de loudnorm.

+

Información sobre los estándares de sonoridad de PBS se puede encontrar en el documento de Especificaciones Técnicas de Operación de PBS. Información sobre los estándares de sonoridad de la EBU se puede encontrar en el documento de recomendación EBU R 128.

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-af loudnorm
activa el filtro loudnorm
+
print_format=json
establece el formato de resultados sobre información de sonoridad a JSON. Este formato facilita su uso en una segunda pasada. Para un resultado más legible, se puede configurar con print_format=summary
+
-f null -
establece la salida del archivo a nulo (ya que solo nos interesan los metadatos generados)
+
+ +
+ + + + + +
+
Ecualización RIAA
+

ffmpeg -i input_file -af aemphasis=type=riaa output_file

+

Esto aplicará la ecualización RIAA a un archivo de entrada, permitiendo la reproducción correcta de audio “plano” (sin ecualización) transferido desde discos que utilizaban esta curva de ecualización. Para obtener más información sobre la ecualización RIAA, consulte la pagina de Wikipedia sobre el tema.

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-af aemphasis=type=riaa
activa el filtro de énfasis y lo configura para utilizar la ecualización RIAA
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Invierte un CD a modo Pre-énfasis
+

ffmpeg -i input_file -af aemphasis=type=cd output_file

+

Esto aplicará el de-enfasis para revertir los efectos del pre-énfasis del CD en el caso algo raro de CD que se crearon con esta tecnología. Utilice este comando para crear copias de escucha más precisas de archivos que fueron copiados "planos" (sin ningún énfasis) donde la fuente original utilizó énfasis. Para obtener más información sobre el preénfasis de CD, consulte la la pagina de Hydrogen Audio sobre este tema.

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-af aemphasis=type=cd
activa el filtro aemphasis y lo configura para utilizar la ecualización CD
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Normalización de Sonoridad en Una Pasada
+

ffmpeg -i input_file -af loudnorm=dual_mono=true -ar 48k output_file

+

Esto normalizará la sonoridad de la entrada en una sola pasada, lo que es más rápido pero menos preciso que usar dos pasadas. Este comando utiliza la configuración predeterminada del filtro loudnorm para el nivel de sonoridad objetivo. Estos valores predeterminados se ajustan bien a las recomendaciones de PBS, pero loudnorm también permite especificar niveles de sonoridad. Para obtener más información, consulte documentación de loudnorm.

+

Información sobre los estándares de sonoridad de PBS se puede encontrar en el documento de Especificaciones Técnicas de Operación de PBS. información sobre los estándares de sonoridad de la EBU se puede encontrar en el documento de recomendaciónes EBU R 128.

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-af loudnorm
activa el filtro loudnorm con configuraciones predeterminadas
+
dual_mono=true
(opcional) Utilice esta opción para archivos monofónicos que se reproducirán en sistemas estéreo, a fin de obtener el nivel de volumen correcto. No es necesario para entradas multipista.
+
-ar 48k
Establece la frecuencia de muestreo de salida a 48 kHz. (El filtro loudnorm realiza un sobremuestreo a 192 kHz, por lo que es recomendable configurar manualmente la frecuencia de muestreo de salida deseada).
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Normalización de Sonoridad en Dos Pasadas
+

ffmpeg -i input_file -af loudnorm=dual_mono=true:measured_I=input_i:measured_TP=input_tp:measured_LRA=input_lra:measured_thresh=input_thresh:offset=target_offset:linear=true -ar 48k output_file

+

Este comando permite utilizar los niveles calculados en una primera pasada del filtro loudnorm para normalizar la sonoridad con mayor precisión. Este comando utiliza los valores predeterminados del filtro loudnorm para el nivel de sonoridad objetivo. Estos valores predeterminados se ajustan bien a las recomendaciones de PBS, pero loudnorm también permite especificar niveles de sonoridad. Para obtener más información, consulte la documentación de loudnorm.

+

Información sobre los estándares de sonoridad de PBS se puede encontrar en el documento de Especificaciones Técnicas de Operación de PBS. información sobre los estándares de sonoridad de la EBU se puede encontrar en el documento de recomendaciónes EBU R 128.

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-af loudnorm
activa el filtro loudnorm con configuraciones predeterminadas
+
dual_mono=true
(opcional) utilice esta opción para archivos monofónicos que se reproducirán en sistemas estéreo, a fin de obtener el nivel de volumen correcto. No es necesario para entradas multipista.
+
measured_I=input_i
utilice el valor 'input_i' (sonoridad integrada) de la primera pasada en lugar de input_i
+
measured_TP=input_tp
utilice el valor 'input_tp' (pico real) de la primera pasada en lugar de input_tp
+
measured_LRA=input_lra
utilice el valor 'input_lra' (rango de sonoridad) de la primera pasada en lugar de input_lra
+
measured_LRA=input_thresh
utilice el valor 'input_thresh' (umbral) de la primera pasada en lugar de input_thresh
+
offset=target_offset
utilice el valor 'target_offset' (desplazamiento) de la primera pasada en lugar de target_offset
+
linear=true
indica a loudnorm que utilice la normalización lineal
+
-ar 48k
Establece la frecuencia de muestreo de salida a 48 kHz. (El filtro loudnorm realiza un sobremuestreo a 192 kHz, por lo que es recomendable configurar manualmente la frecuencia de muestreo de salida deseada).
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Corregir Sincronización AV: Remuestreo de audio
+

ffmpeg -i input_file -c:v copy -c:a pcm_s16le -af "aresample=async=1000" output_file

+
+
ffmpeg
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-c:v copy
copia todos los flujos de vídeo asignados
+
-c:a pcm_s16le
indica a FFmpeg que codifique el flujo de audio en formato PCM lineal de 16 bits (little endian)
+
-af "aresample=async=1000"
utiliza el filtro aresample estirar/comprimir las muestras según las marcas de tiempo indicadas, con una compensación máxima de 1000 muestras por segundo.
+
output_file
ruta, nombre y extensión del archivo de salida. Prueba diferentes extensiones de archivo como mkv, mov, mp4, or avi.
+
+ +
+ + +
+
+

Unir, recortar o crear un fragmento

+ + + + +
+
Unir archivos
+

ffmpeg -f concat -i mylist.txt -c copy output_file

+

Este comando toma dos o más archivos del mismo tipo y los une para crear un solo archivo. El programa solo necesita un archivo de texto con una lista que especifique los archivos que se deben unir. Si es posible, ejecute el comando desde el mismo directorio donde se encuentran los archivos y el archivo de texto. De lo contrario, deberá usar -safe 0; consulte la información a continuación para obtener más detalles. Sin embargo, solo funciona correctamente si los archivos que se van a combinar tienen exactamente el mismo códec y especificaciones técnicas. Tenga cuidado, FFmpeg puede parecer que ha unido correctamente dos archivos de video con diferentes códecs, pero es posible que solo copie el audio del segundo archivo o que presente otros comportamientos extraños. No utilice este comando para unir archivos con diferentes códecs y especificaciones técnicas, y siempre previsualice el archivo de video resultante.

+
+
ffmpeg
inicia el commando
+
-f concat
obliga a ffmpeg a concatenar los archivos y a mantener el mismo formato de archivo
+
-i mylist.txt
ruta, nombre y extensión del archivo de entrada. Segun la documentación de FFmpeg, es preferible especificar rutas de archivo relativas en lugar de absolutas, ya que permitir rutas de archivo absolutas puede representar un riesgo de seguridad.
+ Este archivo de texto contiene la lista de archivos (sin su ruta absoluta) que se van a concatenar y debe tener el siguiente formato: +
+  file 'primer_archivo.ext'
+  file 'segundo_archivo.ext'
+  . . .
+  file 'último_archivo.ext'
+
+ En el ejemplo anterior, file es simplemente la palabra "file". Se deben usar comillas simples ('como estas') en lugar de comillas curvas (‘como estas’) para encerrar las rutas de los archivos.
+ Nota: Si especifica rutas de archivo absolutas en el archivo .txt, agregue -safe 0 antes del archivo de entrada.
+ Ej.: ffmpeg -f concat -safe 0 -i mylist.txt -c copy output_file
+
-c copy
utiliza el modo de copia de flujo para remultiplexar en lugar de recodificar
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

Para obtener más información, consulte la página,wiki de FFmpeg sobre la concatenación de archivos.

+ +
+ + + + + +
+
Unir archivos
+

ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[video_out][audio_out]" -map "[video_out]" -map "[audio_out]" output_file

+

Este comando toma dos o más archivos de diferentes tipos y los une para crear un solo archivo.

+

Los archivos de entrada pueden diferir en muchos aspectos: contenedor, códec, esquema de submuestreo de croma, fotogramas por segundo, etc. Sin embargo, el comando anterior solo funciona correctamente si los archivos que se van a combinar tienen las mismas dimensiones (por ejemplo, 720x576). Tenga en cuenta también que si los archivos de entrada tienen diferentes velocidades de fotogramas, el archivo de salida tendrá una velocidad de fotogramas variable.

+

Algunos aspectos de los archivos de entrada se normalizarán: por ejemplo, si un archivo de entrada contiene una pista de video y una pista de audio que no tienen exactamente la misma duración, la más corta se rellenará. En el caso de una pista de video más corta, el último fotograma se repetirá para cubrir el video faltante; en el caso de una pista de audio más corta, el flujo de audio se rellenará con silencio.

+
+
ffmpeg
inicia el commando
+
-i input_1.ext
ruta, nombre y extensión del primer archivo de entrada
+
-i input_2.ext
ruta, nombre y extensión del segundo archivo de entrada
+
-filter_complex
indica que se utilizará un gráfico de filtros complejo
+
"
comilla para iniciar el gráfico de filtros
+
[0:v:0][0:a:0]
selecciona la primera secuencia de video y la primera secuencia de audio de la primera entrada.
+ Cada referencia a una secuencia o flujo específico está entre corchetes. En la primera referencia, 0:v:0, el primer cero se refiere al primer archivo de entrada, v significa secuencia de video, y el segundo cero indica que se debe seleccionar la primera secuencia de video en el archivo. De manera similar, 0:a:0 significa la primera secuencia de audio del primer archivo de entrada.
+ Como se muestra anteriormente, ffmpeg utiliza indexación base cero: 0 significa la primera entrada/secuencia/etc., 1 significa la segunda entrada/secuencia/etc., y 4 significaría la quinta entrada/secuencia/etc.
+
[1:v:0][1:a:0]
Como se describió anteriormente, esto significa seleccionar las primeras secuencias de video y audio del segundo archivo de entrada.
+
concat=
inicia el filtro concat
+
n=2
indica que hay dos archivos de entrada
+
:
separador
+
v=1
establece el número de secuencias de video de salida.
+ Tenga en cuenta que esto debe ser igual al número de secuencias de video seleccionadas de cada segmento.
+
:
separador
+
a=1
establece el número de secuencias de audio de salida.
+ Tenga en cuenta que esto debe ser igual al número de secuencias de audio seleccionadas de cada segmento.
+
[video_out]
nombre de la secuencia de video de salida concatenada. Este es un nombre de variable que usted define, por lo que podría llamarlo de otra manera, como "vOut", "outv" o "banana".
+
[audio_out]
nombre de la secuencia de audio de salida concatenada. Nuevamente, este es un nombre de variable que usted define.
+
"
comilla para finalizar el gráfico de filtros
+
-map "[video_out]"
asigna la secuencia de video concatenada al archivo de salida haciendo referencia a la variable definida anteriormente
+
-map "[audio_out]"
asigna la secuencia de audio concatenada al archivo de salida haciendo referencia a la variable definida anteriormente
+
output_file
ruta, nombre y extensión del archivo de salida el archivo de salida
+
+

Si no se especifican las características de los archivos de salida, ffmpeg utilizará las codificaciones predeterminadas asociadas al tipo de archivo de salida especificado. Para especificar las características de los flujos de salida, añada indicadores después de cada parte -map "[out]" del comando command.

+

Por ejemplo, para garantizar que el flujo de video del archivo de salida sea H.264 sin pérdidas visuales con un esquema de submuestreo de croma 4:2:0, el comando anterior podría modificarse para incluir lo siguiente:
+ -map "[video_out]" -c:v libx264 -pix_fmt yuv420p -preset veryslow -crf 18

+

Del mismo modo, para codificar el flujo de audio de salida como mp3, el comando podría incluir lo siguiente:
+ -map "[audio_out]" -c:a libmp3lame -dither_method triangular -qscale:a 2

+

Variación: concatenación de archivos de diferentes resoluciones

+

Para concatenar archivos de diferentes resoluciones, es necesario redimensionar los videos para que sus resoluciones coincidan antes de la concatenación. La forma más básica de hacerlo es utilizando un filtro de escala e indicando las dimensiones del archivo con el que se desea que coincidan:

+

-vf scale=1920:1080:flags=lanczos

+

(Se recomienda el algoritmo de escalado Lanczos, que es más lento pero mejor que el algoritmo bilineal predeterminado).

+

El reescalado debe aplicarse justo antes del punto donde se enumeran las secuencias que se utilizarán en el archivo de salida. Seleccione la secuencia que desea reescalar, aplique el filtro y asigne un nombre de variable (rescaled_video en el ejemplo siguiente). Luego, utilice este nombre de variable en la lista de flujos que se van a concatenar.

+

ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0] scale=1920:1080:flags=lanczos [rescaled_video], [rescaled_video] [0:a:0] [1:v:0] [1:a:0] concat=n=2:v=1:a=1 [video_out] [audio_out]" -map "[video_out]" -map "[audio_out]" output_file

+

Sin embargo, esto solo tendrá el resultado visual deseado si las entradas tienen la misma relación de aspecto. Si desea concatenar un archivo SD y un archivo HD, también deberá aplicar el efecto pillarbox al archivo SD al mismo tiempo que lo escala. (Consulte el comando Convertir 4:3 a HD en pillarboxed). El comando completo se vería así:

+

ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0] scale=1440:1080:flags=lanczos, pad=1920:1080:(ow-iw)/2:(oh-ih)/2 [to_hd_video], [to_hd_video] [0:a:0] [1:v:0] [1:a:0] concat=n=2:v=1:a=1 [video_out] [audio_out]" -map "[video_out]" -map "[audio_out]" output_file

+

Aquí, el primer archivo de entrada es un archivo SD que necesita escalarse para que coincida con el segundo archivo de entrada, que es de 1920x1080. El filtro de escala amplía la entrada SD a la altura del fotograma HD, manteniendo la relación de aspecto 4:3; luego, el video se rellena con barras laterales dentro de un fotograma de 1920x1080.

+

Variación: concatenación de archivos con diferentes velocidades de fotogramas

+

Si los archivos de entrada tienen diferentes velocidades de fotogramas, el archivo de salida puede tener una velocidad de fotogramas variable. Para obtener explícitamente un archivo de salida con una velocidad de fotogramas constante, puede convertir una entrada (o varias entradas) a una velocidad de fotogramas diferente antes de la concatenación.

+

Puede acelerar o ralentizar un archivo utilizando los filtros fps y atempo (consulte también el comando Modificar velocidad).

+

Aquí hay un ejemplo del comando completo, en el que input_1 tiene 30fps, input_2 tiene 25fps, y 25fps es la velocidad de fotogramas de salida deseada.

+

ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0] fps=fps=25 [video_to_25fps]; [0:a:0] atempo=(25/30) [audio_to_25fps]; [video_to_25fps] [audio_to_25fps] [1:v:0] [1:a:0] concat=n=2:v=1:a=1 [video_out] [audio_out]" -map "[video_out]" -map "[audio_out]" output_file

+

Tenga en cuenta que el filtro fps eliminará o repetirá fotogramas según sea necesario para lograr la velocidad de fotogramas deseada - consulte la documentación de FFmpeg sobre fps docs para obtener más detalles.

+

Para obtener más información, consulte la página wiki de FFmpeg sobre la concatenación de archivos de diferentes tipos.

+ +
+ + + + + +
+
Dividir archivo en segmentos
+

ffmpeg -i input_file -c copy -map 0 -f segment -segment_time 60 -reset_timestamps 1 output_file-%03d.mkv

+
+
ffmpeg
inicia el commando.
+
-i input_file
especifica el archivo de entrada.
+
-c copy
utiliza el modo de copia de flujo para remultiplexar en lugar de recodificar.
+
-map 0
indica a FFmpeg que asigne todos los flujos de entrada a la salida.
+
-f segment
utiliza el multiplexor de segmentos para generar la salida.
+
-segment_time 60
establece la duración de cada segmento (en segundos). Este ejemplo crea segmentos con una duración máxima de 60 segundos cada uno.
+
-reset_timestamps 1
restablece las marcas de tiempo de cada segmento a 0. Esto facilita la reproducción de los segmentos generados.
+
output_file-%03d.mkv
+
+

ruta, nombre y extensión del archivo de salida.
+ Para que el nombre de cada segmento incluya un número que vaya incrementando,FFmpeg admite la sintaxis de estilo printf para un contador.

+

En este ejemplo,'%03d' significa: 3-digitos, con ceros a la izquierda.
+ Ejemplos:

+
    +
  • %03d: 000, 001, 002, ... 999
  • +
  • %05d: 00000, 00001, 00002, ... 99999
  • +
  • %d: 0, 1, 2, 3, 4, ... 23, 24, etc.
  • +
+
+
+ +
+ + + + + +
+
Recorta un video sin recodificarlo
+

ffmpeg -i input_file -ss 00:02:00 -to 00:55:00 -c copy -map 0 output_file

+

Este comando permite crear un fragmento de un archivo sin recodificar los datos audiovisuales.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre, y extensión del archivo de entrada
+
-ss 00:02:00
establece el punto de inicio en 00:02:00
+
-to 00:55:00
establece el punto final en 00:55:00
+
-c copy
utiliza el modo de copia de flujo (sin recodificación)
+
-map 0
indica a FFmpeg que asigne todos los flujos de entrada a la salida.
+ Nota: ten cuidado al usar -ss con -c copy si la fuente está codificada con un códec interframe (por ejemplo, H.264). Dado que FFmpeg debe dividir el video en i-frames, más cercano para comenzar la copia del flujo.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

Variación: recortar archivo estableciendo la duración, usando -t en lugar de -to

+

ffmpeg -i input_file -ss 00:05:00 -t 10 -c copy output_file

+
+
-ss 00:05:00 -t 10
comenzando cinco minutos después del inicio del video original, este comando creará un fragmento de 10 segundos de duración.
+
+

Nota: Para mantener las marcas de tiempo originales, sin intentar sanearlas, puedes añadir la opción -copyts

+ +
+ + + + + +
+
Fragmento desde principio
+

ffmpeg -i input_file -t 5 -c copy -map 0 output_file

+

Este comando captura una porción específica de un archivo, comenzando desde el principio y continuando durante el monto de tiempo (en segundos) especificado en la serie comandos. Esto se puede usar para crear un archivo de vista previa o para eliminar contenido no deseado del final del archivo. Para mayor precisión, use código de tiempo, como 00:00:05.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-t 5
indica a FFmpeg que deje de copiar desde el archivo de entrada después de un tiempo determinado y especifica la cantidad de segundos después de los cuales debe detenerse la copia. En este caso, se especifican 5 segundos.
+
-c copy
utiliza el modo de copia de flujo para remultiplexar en lugar de recodificar
+
-map 0
indica a FFmpeg que asigne todos los flujos de entrada a la salida.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Extraer hacia el final
+

ffmpeg -i input_file -ss 5 -c copy -map 0 output_file

+

Este comando copia un archivo a partir de un momento específico, eliminando los primeros segundos del archivo de salida. Esto se puede usar para crear un fragmento o eliminar contenido no deseado del principio de un archivo.

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-ss 5
indica a FFmpeg el código de tiempo en el archivo a partir del cual debe comenzar la copia, especificando el número de segundos desde el inicio del video. Para mayor precisión, se puede usar un código de tiempo como 00:00:05.
+
-c copy
utiliza el modo de copia de flujo para remultiplexar en lugar de recodificar
+
-map 0
indica a FFmpeg que asigne todos los flujos de entrada a la salida.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Extraer desde del final
+

ffmpeg -sseof -5 -i input_file -c copy -map 0 output_file

+

Este comando copia un archivo a partir de un tiempo específico antes del final del archivo, eliminando todo lo anterior en el archivo de salida. Esto se puede usar para crear un fragmento o extraer contenido del final de un archivo (por ejemplo, para extraer los créditos finales).

+
+
ffmpeg
inicia el commando
+
-sseof -5
Este parámetro debe ir antes del archivo de entrada. Le indica a FFmpeg qué código de tiempo buscar en el archivo para comenzar la copia y especifica la cantidad de segundos desde el final del video a partir de la cual FFmpeg debe comenzar a copiar. El final del archivo tiene el índice 0 y se necesita el signo menos para hacer referencia a partes anteriores. Para ser más específico, puede usar un código de tiempo como -00:00:05. Tenga en cuenta que en la mayoría de los formatos de archivo no es posible buscar con precisión, por lo que FFmpeg buscará lo más cercano al punto anterior.
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-c copy
utiliza el modo de copia de flujo para remultiplexar en lugar de recodificar
+
-map 0
indica a FFmpeg que asigne todos los flujos de entrada a la salida
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Eliminar la parte silente al principio de un archivo de audio
+

ffmpeg -i input_file -af silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1 -c:a your_codec_choice -ar your_sample_rate_choice output_file

+

Este comando eliminará automáticamente el silencio al principio de un archivo de audio. El umbral que define el silencio se puede modificar - este ejemplo utiliza cualquier sonido por debajo de -57 dB, un nivel adecuado para tener en cuenta el ruido de fondo analógico.

+

Nota: Dado que este comando utiliza un filtro, el flujo de audio se recodificará para la salida. Si no se especifica una frecuencia de muestreo o un códec, este comando utilizará la frecuencia de muestreo de la entrada y los códecs predeterminados para el formato de salida. ¡Asegúrese de obtener los resultados deseados!

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada (por ejemplo, input_file.wav)
+
-af silenceremove
aplica el filtro de eliminación de silencio
+
start_threshold=-57dB
indica al filtro el umbral para considerar qué es 'silencio' para su eliminación. Esto se puede aumentar o disminuir según sea necesario.
+
start_duration=1
indica al filtro cuánto audio no silencioso debe detectar antes de dejar de recortar. Con un valor de 0 el filtro se detendría después de detectar cualquier audio no silencioso. Un valor de 1 permite que continúe recortando a través de pequeños ‘ruidos’, como los causados ​​al activar el dispositivo de reproducción o el sonido grabado al conectar un micrófono.
+
start_periods=1
indica al filtro que recorte la primera porción de silencio que encuentre al principio del archivo. Este valor se puede aumentar para eliminar porciones silenciosas posteriores del archivo si se desea.
+
-c:a your_codec_choice
indica al filtro qué códec usar y debe especificarse para evitar valores predeterminados. Si desea PCM de 24 bits, el valor sería -c:a pcm_s24le.
+
output_file
ruta, nombre y extensión del archivo de salida (por ejemplo, output_file.wav).
+
+
+ + + + + +
+
Eliminar la parte silenciosa del final de un archivo de audio
+

ffmpeg -i input_file -af areverse,silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1,areverse -c:a your_codec_choice -ar your_sample_rate_choice output_file

+

Este comando eliminará automáticamente el silencio al final de un archivo de audio. Dado que el filtro silenceremove funciona mejor eliminando el silencio al principio de los archivos, este comando utiliza el filtro areverse dos veces para invertir la entrada, eliminar el silencio y luego restaurar la orientación correcta.

+

Nota: Dado que este comando utiliza un filtro, la transmisión de audio se recodificará para la salida. Si no especifica una frecuencia de muestreo o un códec, este comando utilizará la frecuencia de muestreo de la entrada y los valores predeterminados del códec para el formato de salida. ¡Asegúrese de obtener los resultados deseados!

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada (por ejemplo, input_file.wav)
+
-af areverse,
inicia la cadena de filtros invirtiendo la entrada
+
silenceremove
aplica el filtro de eliminación de silencio
+
start_threshold=-57dB
indica al filtro el umbral para considerar qué es "silencio" para su eliminación. Esto se puede aumentar o disminuir según sea necesario.
+
start_duration=1
indica al filtro cuánto audio no silencioso debe detectarse antes de que deje de recortar. Con un valor de 0 el filtro se detendría después de detectar cualquier audio no silencioso. Una configuración de 1 le permite continuar recortando a través de pequeños ‘ruidos’ como los causados ​​por la activación del dispositivo de reproducción o el sonido grabado de un micrófono al conectarse.
+
start_periods=1
indica al filtro que recorte el primer ejemplo de silencio que encuentre.
+
areverse
aplica el filtro de inversión de audio nuevamente para restaurar la entrada a la orientación correcta.
+
-c:a your_codec_choice
indica al filtro qué códec usar y debe especificarse para evitar valores predeterminados. Si desea PCM de 24 bits, el valor sería -c:a pcm_s24le.
+
output_file
ruta, nombre y extensión del archivo de salida (por ejemplo, output_file.wav).
+
+
+ + +
+
+

Trabajar con video entrelazado

+ + + + +
+
Escalar archivos de acceso pillar-boxed HD H.264 a partir de una fuente SD NTSC
+

ffmpeg -i input_file -c:v libx264 -filter:v "yadif, scale=1440:1080:flags=lanczos, pad=1920:1080:(ow-iw)/2:(oh-ih)/2, format=yuv420p" output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-c:v libx264
codifica el flujo de video con libx264 (h264)
+
-filter:v
se utilizará un filtro de video
+
"
qcomilla para iniciar el gráfico de filtros
+
yadif
filtro de desentrelazado ('otro filtro de desentrelazado más')
+ Por defecto, yadif yadif genera un fotograma por cada fotograma de entrada. Generar un fotograma por cada campo campo (duplicando así la velocidad de fotogramas) con yadif=1 puede producir mejores resultados visualmente.
+
scale=1440:1080:flags=lanczos
redimensiona la imagen a 1440x1080, utilizando el algoritmo de escalado Lanczos, que es más lento pero mejor que el algoritmo bilineal predeterminado.
+
pad=1920:1080:(ow-iw)/2:(oh-ih)/2
rellena el área alrededor del video de entrada 4:3 para crear un video de salida 16:9
+
format=yuv420p
especifica un formato de píxeles Y′CBCR 4:2:0
+
"
comilla para finalizar el gráfico de filtros
+
output_file
ruta, nombre y extensión del archivo de salida
+
+

Nota: este mismo filtro de escalado también reduce el tamaño de una imagen más grande a HD.

+ +
+ + + + + +
+
Desentrelazar un video
+

ffmpeg -i input_file -c:v libx264 -vf "yadif,format=yuv420p" output_file

+

Este comando toma un archivo de entrada entrelazado y genera un archivo H.264 MP4 desentrelazado.

+
+
ffmpeg
inicia el commando
+
-i input file
ruta, nombre y extensión del archivo de entrada
+
-c:v libx264
indica a FFmpeg que codifique el flujo de video como H.264
+
-vf
se utilizará el filtrado de video (-vf es un alias de -filter:v)
+
"
inicio del gráfico de filtros (ver más abajo)
+
yadif
filtro de desentrelazado ('otro filtro de desentrelazado más')
+ Por default, yadif generará un fotograma de salida por cada fotograma. Generar un fotograma por cada campo (duplicando así la velocidad de fotogramas) con yadif=1 puede producir mejores resultados visuales.
+
,
separa los filtros
+
format=yuv420p
submuestreo de croma configurado a 4:2:0
+ Por default, libx264 utilizará un esquema de submuestreo de croma que sea el que mejor se ajuste al de la entrada. Esto puede resultar en un submuestreo de croma Y′CBCR 4:2:0, 4:2:2, o 4:4:4. y la mayoría de los reproductores que no se basan en FFmpeg no pueden decodificar archivos H.264 que no sean 4:2:0, por lo tanto, es recomendable especificar el submuestreo de croma 4:2:0.
+
"
fin del gráfico de filtros
+
output file
ruta, nombre y extensión del archivo de salida
+
+

"yadif,format=yuv420p" es un gráfico de filtros de FFmpeg. n este caso, el gráfico de filtros está compuesto por una cadena de filtros, que a su vez está compuesta por dos filtros (separados por la coma).
+ Las comillas son necesarias cuando se utilizan espacios dentro del gráfico de filtros, por ejemplo, -vf "yadif, format=yuv420p", y se incluyen arriba como ejemplo una práctica recomendable.

+

Nota: FFmpeg incluye varios desentrelazadores además de yadif: bwdif, w3fdif, kerndeint, y nnedi.

+

Para obtener más opciones de codificación H.264, consulte la última sección del comando de codificación H.264.

+
+

Ejemplo

+

Antes y después del desentrelazado:

+ VLC screenshot of original interlaced video + VLC screenshot of deinterlaced video +
+ +
+ + + + + +
+
Desentrelazar campos de video a fotogramas
+

ffmpeg -i input_file -c:v libx264 -vf "idet,bwdif,format=yuv420p" output_file

+

Este comando toma un archivo de entrada entrelazado y genera un archivo MP4 H.264 desentrelazado, con cada campo separado en su propio fotograma. Esto es preferible para un video entrelazado que contenga mucho movimiento, ya que la salida de doble velocidad de fotogramas conserva el ritmo visual del material de origen.

+
+
ffmpeg
inicia el commando
+
-i input file
ruta, nombre y extensión del archivo de entrada
+
-c:v libx264
indica a FFmpeg que codifique el flujo de video como H.264
+
-vf
se utilizará el filtrado de video (-vf es un alias de -filter:v)
+
"
inicio del gráfico de filtros (ver a continuación)
+
idet
detecta el orden de los campos de video entrelazados
+ idet intentará detectar si el video está entrelazado y, en caso afirmativo, cuál es el orden de los campos (campo superior primero o campo inferior primero). Esto se hace para garantizar que la salida del filtro de desentrelazado sea correcta.
+
bwdif
filtro de desentrelazado (‘Filtro de desentrelazado de Bob Weaver’)
+ Por default, bwdif generará un fotograma por cada campo, coincidiendo con el ritmo visual del video entrelazado.
+
,
separa los filtros
+
format=yuv420p
submuestreo de croma configurado a 4:2:0
+ Por default, libx264 utilizará un esquema de submuestreo de croma que sea el que mejor se ajuste al de la entrada. Esto puede resultar en un submuestreo de croma Y′CBCR 4:2:0, 4:2:2, o 4:4:4. QuickTime y la mayoría de los reproductores que no se basan en FFmpeg no pueden decodificar archivos H.264 que no sean 4:2:0, por lo tanto, es recomendable especificar el submuestreo de croma 4:2:0.
+
"
fin del gráfico de filtros
+
output file
ruta, nombre y extensión del archivo de salida
+
+

"idet,bwdif,format=yuv420p" es un gráfico de filtros de FFmpeg. Aquí, el gráfico de filtros está compuesto por una cadena de filtros, que a su vez consta de tres filtros (separados por comas).
+ Las comillas son necesarias cuando se utilizan espacios dentro del gráfico de filtros, por ejemplo, -vf "idet, bwdif, format=yuv420p", y se incluyen arriba como ejemplo de práctica recomendable.

+

Nota: bwdif también admite el método anterior de salida de un fotograma por cada fotograma (reduciendo así a la mitad el número de fotogramas de salida por segundo) con la sintaxis bwdif=mode=send_frame. Esto puede ser útil cuando el dispositivo de visualización no es capaz de reproducir 50 (PAL) o 60 (NTSC) fotogramas por segundo.

+

Para obtener más opciones de codificación H.264, consulte la última sección del comando de codificación H.264.

+
+

Ejemplo

+

Antes y después del desentrelazado con bwdif:

+ VLC screenshot of original interlaced video + VLC screenshot of deinterlaced video +
+ +
+ + + + + +
+
Aplicar telecine inverso a un archivo de video
+

ffmpeg -i input_file -c:v libx264 -vf "fieldmatch,yadif,decimate" output_file

+

El procedimiento de telecine inverso revierte el proceso de conversión 3:2, restaurando el video entrelazado de 29.97 fps a la velocidad de 24 fps de la fuente original de la película.

+
+
ffmpeg
inicia el commando
+
-i input file
ruta, nombre y extensión del archivo de entrada
+
-c:v libx264
codifica el video como H.264
+
-vf "fieldmatch,yadif,decimate"
aplica estos tres filtros de video al video de entrada.
+ Fieldmatch es un filtro de relación de campos para telecine inverso - reconstruye los fotogramas progresivos a partir de un flujo de telecine.
+ Yadif ('otro filtro de desentrelazado más') desentrelaza el video. (Tenga en cuenta que FFmpeg también incluye otros desentrelazadores).
+ Decimate elimina los fotogramas duplicados.
+
output file
ruta, nombre y extensión del archivo de salida
+
+

"fieldmatch,yadif,decimate" es un gráfico de filtros de FFmpeg. En este caso, el gráfico de filtros está compuesto por una cadena de filtros, que a su vez está compuesta por los tres filtros (separados por comas).
+ Las comillas son necesarias cuando se utilizan espacios dentro del gráfico de filtros, por ejemplo, -vf "fieldmatch, yadif, decimate", y se incluyen arriba como ejemplo de práctica recomendable.

+

Tenga en cuenta que si se aplica un procedimiento de telecine inverso a un archivo de 29.97i, la velocidad de fotogramas de salida será de 23.976 fps.

+

Este comando también se puede utilizar para restaurar otras velocidades de fotogramas.

+
+

Ejemplo

+

Antes y después del telecine inverso:

+ GIF of original video + GIF of video after inverse telecine +
+ +
+ + + + + +
+
Cambiar el orden de los campos de un video entrelazado
+

ffmpeg -i input_file -c:v video_codec -filter:v setfield=tff output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v setfield=tff
Establece el orden de los campos desde el primero superior (tff=top field first). Use setfield=bff para ordenar el campo inferior primero.
+
-c:v video_codec
Dado que se utiliza un filtro de video, no es posible usar -c copy. El video debe recodificarse con el códec de video elegido, por ejemplo, ffv1, v210 o prores.
+
output_file
ruta, nombre y extensión del archivo de salida
+
+ +
+ + + + + +
+
Comprobar los patrones de entrelazado de un archivo de video
+

ffmpeg -i input file -filter:v idet -f null -

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta, nombre y extensión del archivo de entrada
+
-filter:v idet
Esto solicita el filtro idet (detectar el tipo de entrelazado de video).
+
-f null
El video se decodifica con el multiplexor nulo. Esto permite la decodificación de video sin crear un archivo de salida.
+
-
La sintaxis de FFmpeg requiere una salida especificada, y - imprime la salida en la pantalla (STDOUT) en lugar de crear un archivo.
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Ver o remover metadatos

+ + + + +
+
Extraer especificaciones de un archivo de video
+

ffprobe -i input_file -show_format -show_streams -show_data -print_format xml

+

Este comando extrae metadatos técnicos de un archivo de video y los muestra en formato xml.

+
+
ffprobe
inicia el comando
+
-i input_file
ruta, nombre, y extensión del archivo de entrada
+
-show_format
muestra información del contenedor de archivos
+
-show_streams
muestra información de códecs de audio and video
+
-show_data
agrega un breve “hexdump” a la salida del comando show_streams
+
-print_format
establece el formato de impresión de salida (en este ejemplo “xml”; other otros formatos incluyen “json” and “flat”)
+
+

Consulte también la documentación de FFmpeg en ffprobe la documentación de FFmpeg sobre ffprobe para obtener una lista completa de indicadores,comandos, y opciones.

+ +
+ + + + + +
+
Remover los metadatos de un archivo de video
+

ffmpeg -i input_file -map_metadata -1 -c:v copy -c:a copy output_file

+
+
ffmpeg
inicia el commando
+
-i input_file
ruta,nombre, y extensión del archivo de entrada
+
-map_metadata -1
establece la copia de metadatos en -1, lo que significa que no se copia ningún metadato
+
-c:v copy
copia la pista de video
+
-c:a copy
copia la pista de audio
+
output_file
Crea una copia del archivo original y le asigna un nombre al archivo de salida
+
+

Note: -c:v y -c:a son atajos para -vcodec and -acodec.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Usar OCR

+ + + + +
+
Reproduce el video con OCR superpuesto
+

ffplay input_file -vf "ocr,drawtext=fontfile=/Library/Fonts/Andale Mono.ttf:text=%{metadata\\\:lavfi.ocr.text}:fontcolor=white"

+
+
ffplay
inicia el commando
+
input_file
ruta, nombre y extensión del archivo de entrada
+
-vf
crea un gráfico de filtros para usar con los flujos
+
"
comilla para iniciar el gráfico de filtros
+
ocr,
indica a ffplay que use OCR como fuente y la coma indica que los comandos están listos para la aserción del filtro
+
drawtext=fontfile=/Library/Fonts/Andale Mono.ttf
indica a ffplay que extraiga el texto y use una fuente específica al hacerlo (Andale Mono)
+
:
indica que hay otro parámetro
+
text=%{metadata\\\:lavfi.ocr.text}
indica a ffplay qué texto usar durante la reproducción. En este caso, solicita metadatos que se encuentran en la biblioteca lavfi.ocr.text
+
:
indica que hay otro parámetro
+
fontcolor=white
especifica el color de la fuente como blanco
+
"
comilla para finalizar el gráfico de filtros
+
+ +
+ + + + + +
+
Exporta los datos OCR a la pantalla
+

ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"

+
+
ffprobe
inicia el commando
+
-show_entries
establece una lista de entradas para mostrar
+
frame_tags=lavfi.ocr.text
muestra el identificador lavfi.ocr.text en la sección del fotograma del video
+
-f lavfi
indica a ffprobe que utilice el dispositivo virtual de entrada Libavfilter
+
-i "movie=input_file,ocr"
declara 'movie' como input_file y pasa el comando 'ocr' command
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + diff --git a/ffmprovisr_spanish/recipes.txt b/ffmprovisr_spanish/recipes.txt new file mode 100644 index 0000000..c0f624d --- /dev/null +++ b/ffmprovisr_spanish/recipes.txt @@ -0,0 +1,203 @@ +# Basic rewrap command +ffmpeg -i input_file.ext -c copy -map 0 output_file.ext +# Generate Broadcast WAV +ffmpeg -i input_file.wav -c copy -write_bext 1 -metadata field_name='Content' output_file.wav +# Rewrap DV video to .dv file +ffmpeg -i input_file -f rawvideo -c:v copy output_file.dv +# Transcode to deinterlaced Apple ProRes LT +ffmpeg -i input_file -c:v prores -profile:v 1 -vf yadif -c:a pcm_s16le output_file.mov +# Transcode to an H.264 access file +ffmpeg -i input_file -c:v libx264 -pix_fmt yuv420p -c:a aac output_file +# Transcode from DCP to an H.264 access file +ffmpeg -i input_video_file.mxf -i input_audio_file.mxf -c:v libx264 -pix_fmt yuv420p -c:a aac output_file.mp4 +# Transcode your file with the FFV1 Version 3 Codec in a Matroska container +ffmpeg -i input_file -map 0 -dn -c:v ffv1 -level 3 -g 1 -slicecrc 1 -slices 16 -c:a copy output_file.mkv -f framemd5 -an framemd5_output_file +# Convert DVD to H.264 +ffmpeg -i concat:input_file_1\|input_file_2\|input_file_3 -c:v libx264 -c:a aac output_file.mp4 +# Transcode to an H.265/HEVC MP4 +ffmpeg -i input_file -c:v libx265 -pix_fmt yuv420p -c:a copy output_file +# Transcode to H.264 using the GPU +ffmpeg -i input_file -c:v h264_nvenc -preset llhq -rc:v vbr_hq -cq:v 19 -b:v 8000k -maxrate:v 12000k -profile:v high -c:a copy output_file +# Transcode to H.265 using the GPU +ffmpeg -i input_file -c:v hevc_nvenc -preset llhq -rc:v vbr_hq -cq:v 19 -b:v 5000k -maxrate:v 8000k -profile:v main10 -c:a copy output_file +# Transcode to an Ogg Theora +ffmpeg -i input_file -acodec libvorbis -b:v 690k output_file +# Convert WAV to MP3 +ffmpeg -i input_file.wav -write_id3v1 1 -id3v2_version 3 -dither_method triangular -out_sample_rate 48k -qscale:a 1 output_file.mp3 +# Generate two access MP3s (with and without copyright). +ffmpeg -i input_file -i input_file_to_append -filter_complex "[0:a:0]asplit=2[a][b];[b]afifo[bb];[1:a:0][bb]concat=n=2:v=0:a=1[concatout]" -map "[a]" -codec:a libmp3lame -dither_method triangular -qscale:a 2 output_file.mp3 -map "[concatout]" -codec:a libmp3lame -dither_method triangular -qscale:a 2 output_file_appended.mp3 +# Convert WAV to AAC/MP4 +ffmpeg -i input_file.wav -c:a aac -b:a 128k -dither_method triangular -ar 44100 output_file.mp4 +# Transform 4:3 aspect ratio into 16:9 with pillarbox +ffmpeg -i input_file -filter:v "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file +# Transform 16:9 aspect ratio video into 4:3 with letterbox +ffmpeg -i input_file -filter:v "pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file +# Flip video image +ffmpeg -i input_file -filter:v "hflip,vflip" -c:a copy output_file +# Transform SD to HD with pillarbox +ffmpeg -i input_file -filter:v "colormatrix=bt601:bt709, scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:a copy output_file +# Change display aspect ratio without re-encoding +ffmpeg -i input_file -c:v copy -aspect 4:3 output_file +# Convert colorspace of video +ffmpeg -i input_file -c:v libx264 -vf colormatrix=src:dst output_file +# Modify image and sound speed +ffmpeg -i input_file -r output_fps -filter_complex "[0:v]setpts=input_fps/output_fps*PTS[v]; [0:a]atempo=output_fps/input_fps[a]" -map "[v]" -map "[a]" output_file +# Fade both video and audio streams +ffmpeg -i input_file -filter:v "fade=in:st=0:d=1, fade=out:st=59:d=1" -filter:a "afade=in:st=0:d=1, afade=out:st=59:d=1" -c:v libx264 -c:a aac output_file +# Synchronize video and audio streams +ffmpeg -i input_file -itsoffset 0.125 -i input_file -map 1:v -map 0:a -c copy output_file +# Clarify stream properties +ffprobe input_file -show_streams +# Crop video +ffmpeg -i input_file -vf "crop=width:height" output_file +# Change video color to black and white +ffmpeg -i input_file -filter_complex hue=s=0 -c:a copy output_file +# Extract audio without loss from an AV file +ffmpeg -i input_file -c:a copy -vn output_file +# Combine audio tracks +ffmpeg -i input_file -filter_complex "[0:a:0][0:a:1]amerge[out]" -map 0:v -map "[out]" -c:v copy -shortest output_file +# Inverses the audio phase of the second channel +ffmpeg -i input_file -af pan="stereo|c0=c0|c1=-1*c1" output_file +# Calculate Loudness Levels +ffmpeg -i input_file -af loudnorm=print_format=json -f null - +# RIAA Equalization +ffmpeg -i input_file -af aemphasis=type=riaa output_file +# Reverse CD Pre-Emphasis +ffmpeg -i input_file -af aemphasis=type=cd output_file +# One Pass Loudness Normalization +ffmpeg -i input_file -af loudnorm=dual_mono=true -ar 48k output_file +# Two Pass Loudness Normalization +ffmpeg -i input_file -af loudnorm=dual_mono=true:measured_I=input_i:measured_TP=input_tp:measured_LRA=input_lra:measured_thresh=input_thresh:offset=target_offset:linear=true -ar 48k output_file +# Fix A/V sync issues by resampling audio +ffmpeg -i input_file -c:v copy -c:a pcm_s16le -af "aresample=async=1000" output_file +# Join (concatenate) two or more files of the same type +ffmpeg -f concat -i mylist.txt -c copy output_file +# Join (concatenate) two or more files of different types +ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[video_out][audio_out]" -map "[video_out]" -map "[audio_out]" output_file +# Split one file into several smaller segments +ffmpeg -i input_file -c copy -map 0 -f segment -segment_time 60 -reset_timestamps 1 output_file-%03d.mkv +# Trim file +ffmpeg -i input_file -ss 00:02:00 -to 00:55:00 -c copy -map 0 output_file +# Create an excerpt, starting from the beginning of the file +ffmpeg -i input_file -t 5 -c copy -map 0 output_file +# Create a new file with the first five seconds trimmed off the original +ffmpeg -i input_file -ss 5 -c copy -map 0 output_file +# Create a new file with the final five seconds of the original +ffmpeg -sseof -5 -i input_file -c copy -map 0 output_file +# Trim silence from beginning of an audio file +ffmpeg -i input_file -af silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1 -c:a your_codec_choice -ar your_sample_rate_choice output_file +# Trim silence from the end of an audio file +ffmpeg -i input_file -af areverse,silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1,areverse -c:a your_codec_choice -ar your_sample_rate_choice output_file +# Upscaled, pillar-boxed HD H.264 access files from SD NTSC source +ffmpeg -i input_file -c:v libx264 -filter:v "yadif, scale=1440:1080:flags=lanczos, pad=1920:1080:(ow-iw)/2:(oh-ih)/2, format=yuv420p" output_file +# Deinterlace video +ffmpeg -i input_file -c:v libx264 -vf "yadif,format=yuv420p" output_file +# Deinterlace video fields to frames +ffmpeg -i input_file -c:v libx264 -vf "idet,bwdif,format=yuv420p" output_file +# Inverse telecine +ffmpeg -i input_file -c:v libx264 -vf "fieldmatch,yadif,decimate" output_file +# Set field order for interlaced video +ffmpeg -i input_file -c:v video_codec -filter:v setfield=tff output_file +# Identify interlacement patterns in a video file +ffmpeg -i input file -filter:v idet -f null - +# Create opaque centered text watermark +ffmpeg -i input_file -vf drawtext="fontfile=font_path:fontsize=font_size:text=watermark_text:fontcolor=font_color:alpha=0.4:x=(w-text_w)/2:y=(h-text_h)/2" output_file +# Overlay image watermark on video +ffmpeg -i input_video file -i input_image_file -filter_complex overlay=main_w-overlay_w-5:5 output_file +# Burn in timecode +ffmpeg -i input_file -vf drawtext="fontfile=font_path:fontsize=font_size:timecode=starting_timecode:fontcolor=font_colour:box=1:boxcolor=box_colour:rate=timecode_rate:x=(w-text_w)/2:y=h/1.2" output_file +Embed subtitles +ffmpeg -i input_file -i subtitles_file -c copy -c:s mov_text output_file +# Export one thumbnail per video file +ffmpeg -i input_file -ss 00:00:20 -vframes 1 thumb.png +# Export many thumbnails per video file +ffmpeg -i input_file -vf fps=1/60 out%d.png +# Create GIF from still images +ffmpeg -f image2 -framerate 9 -pattern_type glob -i "input_image_*.jpg" -vf scale=250x250 output_file.gif +# Create GIF from a video +ffmpeg -ss HH:MM:SS -i input_file -filter_complex "fps=10,scale=500:-1:flags=lanczos,palettegen" -t 3 palette.png +ffmpeg -ss HH:MM:SS -i input_file -i palette.png -filter_complex "[0:v]fps=10, scale=500:-1:flags=lanczos[v], [v][1:v]paletteuse" -t 3 -loop 6 output_file +# Transcode an image sequence into uncompressed 10-bit video +ffmpeg -f image2 -framerate 24 -i input_file_%06d.ext -c:v v210 output_file +# Create video from image and audio +ffmpeg -r 1 -loop 1 -i image_file -i audio_file -acodec copy -shortest -vf scale=1280:720 output_file +# Audio Bitscope +ffplay -f lavfi "amovie=input_file, asplit=2[out1][a], [a]abitscope=colors=purple|yellow[out0]" +# Play a graphical output showing decibel levels of an input file +ffplay -f lavfi "amovie='input.mp3', astats=metadata=1:reset=1, adrawgraph=lavfi.astats.Overall.Peak_level:max=0:min=-30.0:size=700x256:bg=Black[out]" +# Identify pixels out of broadcast range +ffplay -f lavfi "movie='input.mp4', signalstats=out=brng:color=cyan[out]" +# Vectorscope from video to screen +ffplay input_file -vf "split=2[m][v], [v]vectorscope=b=0.7:m=color3:g=green[v], [m][v]overlay=x=W-w:y=H-h" +# Side by Side Videos/Temporal Difference Filter +ffmpeg -i input01 -i input02 -filter_complex "[0:v:0]tblend=all_mode=difference128[a];[1:v:0]tblend=all_mode=difference128[b];[a][b]hstack[out]" -map [out] -f nut -c:v rawvideo - | ffplay - +# Use xstack to arrange output layout of multiple video sources +ffplay -f lavfi -i testsrc -vf "split=3[a][b][c],[a][b][c]xstack=inputs=3:layout=0_0|0_h0|0_h0+h1[out]" +# Pull specs from video file +ffprobe -i input_file -show_format -show_streams -show_data -print_format xml +# Strip metadata +ffmpeg -i input_file -map_metadata -1 -c:v copy -c:a copy output_file +# Batch processing (Mac/Linux) +for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done +# Check decoder errors +ffmpeg -i input_file -f null - +# Check FFV1 fixity +ffmpeg -report -i input_file -f null - +# Create MD5 checksums (video frames) +ffmpeg -i input_file -f framemd5 -an output_file +# Create MD5 checksums (audio samples) +ffmpeg -i input_file -af "asetnsamples=n=48000" -f framemd5 -vn output_file +# Create MD5 checksum(s) for A/V stream data only +ffmpeg -i input_file -map 0:v:0 -c:v copy -f md5 output_file_1 -map 0:a:0 -c:a copy -f md5 output_file_2 +# Get checksum for video/audio stream +ffmpeg -loglevel error -i input_file -map 0:v:0 -f hash -hash md5 - +# Get individual checksums for all video/audio streams ("Streamhash") +ffmpeg -i input_file -map 0 -f streamhash -hash md5 - -v quiet +# QCTools report (with audio) +ffprobe -f lavfi -i "movie=input_file:s=v+a[in0][in1], [in0]signalstats=stat=tout+vrep+brng, cropdetect=reset=1:round=1, idet=half_life=1, split[a][b];[a]field=top[a1];[b]field=bottom, split[b1][b2];[a1][b1]psnr[c1];[c1][b2]ssim[out0];[in1]ebur128=metadata=1, astats=metadata=1:reset=1:length=0.4[out1]" -show_frames -show_versions -of xml=x=1:q=1 -noprivate | gzip > input_file.qctools.xml.gz +# QCTools report (no audio) +ffprobe -f lavfi -i "movie=input_file,signalstats=stat=tout+vrep+brng, cropdetect=reset=1:round=1, idet=half_life=1, split[a][b];[a]field=top[a1];[b]field=bottom,split[b1][b2];[a1][b1]psnr[c1];[c1][b2]ssim" -show_frames -show_versions -of xml=x=1:q=1 -noprivate | gzip > input_file.qctools.xml.gz +# Read/Extract EIA-608 Closed Captioning +ffprobe -f lavfi -i movie=input_file,readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.line,lavfi.readeia608.0.cc,lavfi.readeia608.1.line,lavfi.readeia608.1.cc -of csv > input_file.csv +# Make a mandelbrot test pattern video +ffmpeg -f lavfi -i mandelbrot=size=1280x720:rate=25 -c:v libx264 -t 10 output_file +# Make a SMPTE bars test pattern video +ffmpeg -f lavfi -i smptebars=size=720x576:rate=25 -c:v prores -t 10 output_file +# Make a test pattern video +ffmpeg -f lavfi -i testsrc=size=720x576:rate=25 -c:v v210 -t 10 output_file +# Play HD SMPTE bars +ffplay -f lavfi -i smptehdbars=size=1920x1080 +# Play VGA SMPTE bars +ffplay -f lavfi -i smptebars=size=640x480 +# Generate a sine wave test audio file +ffmpeg -f lavfi -i "sine=frequency=1000:sample_rate=48000:duration=5" -c:a pcm_s16le output_file.wav +# SMPTE bars + Sine wave audio +ffmpeg -f lavfi -i "smptebars=size=720x576:rate=25" -f lavfi -i "sine=frequency=1000:sample_rate=48000" -c:a pcm_s16le -t 10 -c:v ffv1 output_file +# Make a broken file +ffmpeg -i input_file -bsf noise=1 -c copy output_file +# Conway's Game of Life +ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800 +# Play video with OCR +ffplay input_file -vf "ocr,drawtext=fontfile=/Library/Fonts/Andale Mono.ttf:text=%{metadata\\\:lavfi.ocr.text}:fontcolor=white" +# Export OCR from video to screen +ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr" +# Compare Video Fingerprints +ffmpeg -i input_one -i input_two -filter_complex signature=detectmode=full:nb_inputs=2 -f null - +# Generate Video Fingerprint +ffmpeg -i input -vf signature=format=xml:filename="output.xml" -an -f null - +# Play an image sequence +ffplay -framerate 5 input_file_%06d.ext +# Split audio and video tracks +ffmpeg -i input_file -map 0:v:0 video_output_file -map 0:a:0 audio_output_file +# Merge audio and video tracks +ffmpeg -i video_file -i audio_file -map 0:v -map 1:a -c copy output_file +# Create ISO files for DVD access +ffmpeg -i input_file -aspect 4:3 -target ntsc-dvd output_file.mpg +# CSV with timecodes and YDIF +ffprobe -f lavfi -i movie=input_file,signalstats -show_entries frame=pkt_pts_time:frame_tags=lavfi.signalstats.YDIF -of csv +# Cover head switching noise +ffmpeg -i input_file -filter:v drawbox=w=iw:h=7:y=ih-h:t=max output_file +# Record and live-stream simultaneously +ffmpeg -re -i ${INPUTFILE} -map 0 -flags +global_header -vf scale="1280:-1,format=yuv420p" -pix_fmt yuv420p -level 3.1 -vsync passthrough -crf 26 -g 50 -bufsize 3500k -maxrate 1800k -c:v libx264 -c:a aac -b:a 128000 -r:a 44100 -ac 2 -t ${STREAMDURATION} -f tee "[movflags=+faststart]${TARGETFILE}|[f=flv]${STREAMTARGET}" +# View FFmpeg subprogram information +ffmpeg -h type=name diff --git a/ffmprovisr_spanish/scripts/check_audio_framemd5.sh b/ffmprovisr_spanish/scripts/check_audio_framemd5.sh new file mode 100755 index 0000000..787f6fa --- /dev/null +++ b/ffmprovisr_spanish/scripts/check_audio_framemd5.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + SCRIPT=$(basename "${0}") + VERSION="2018-02-10" + AUTHOR="ffmprovisr" + RED="\033[1;31m" + BLUE="\033[1;34m" + NC="\033[0m" + +if [[ "${OSTYPE}" = "cygwin" ]] || [[ ! "$(which diff)" ]]; then + echo -e "${RED}Error: 'diff' is not installed by default. Please install 'diffutils' from Cygwin.${NC}" + exit 1 +fi + +_output_prompt(){ + cat < -m | -h +EOF + exit 1 +} + +_output_help(){ + cat < -m + Pass to the script the audio-visual file and the corresponding MD5 + file to check. + ${SCRIPT} -h + This help. +Dependency: + ffmpeg +About: + Version: ${VERSION} + Website: https://github.com/amiaopensource/ffmprovisr/blob/gh-pages/scripts/check_audio_framemd5.sh +EOF + exit 0 +} + +unset input_file +unset input_hash + +while getopts ":i:m:h" opt; do + case "${opt}" in + i) input_file=${OPTARG} ;; + m) input_hash=${OPTARG} ;; + h) _output_help ;; + :) echo -e "${RED}Error: option -${OPTARG} requires an argument${NC}" ; _output_prompt ;; + *) echo -e "${RED}Error: bad option -${OPTARG}${NC}" ; _output_prompt ;; + esac +done + +[[ -z "${#}" || ! ${input_file} || ! ${input_hash} ]] && _output_prompt +echo -e "${BLUE}Please wait...${NC}" +unset md5_tmp +if [[ $OSTYPE = "cygwin" ]]; then + md5_tmp="${USERPROFILE}/$(basename "${input_hash}").tmp" +else + md5_tmp="${HOME}/$(basename "${input_hash}").tmp" +fi +# Find audio frame size for hash calculation +unset sample_rate +sample_rate=$(grep -v '^#' "${input_hash}" | head -n 1 | tr -d ' ' | cut -d',' -f4) +ffmpeg -i "${input_file}" -loglevel 0 -af "asetnsamples=n='$sample_rate'" -f framemd5 -vn "${md5_tmp}" +[[ ! -f ${md5_tmp} ]] && { echo -e "${RED}Error: '${input_file}' is not a valid audio-visual file.${NC}" ; _output_prompt ; } +unset old_file +unset tmp_file +old_file=$(grep -v '^#' "${input_hash}") +tmp_file=$(grep -v '^#' "${md5_tmp}") +if [[ "${old_file}" = "${tmp_file}" ]]; then + echo -e "${BLUE}'$(basename "${input_file}")' matches '$(basename "${input_hash}")'${NC}" +else + echo -e "${RED}The following differences were detected between '$(basename "${input_file}")' and '$(basename "${input_hash}")':${NC}" + diff "${input_hash}" "${md5_tmp}" +fi +rm "${md5_tmp}" diff --git a/ffmprovisr_spanish/scripts/check_video_framemd5.sh b/ffmprovisr_spanish/scripts/check_video_framemd5.sh new file mode 100644 index 0000000..2077de1 --- /dev/null +++ b/ffmprovisr_spanish/scripts/check_video_framemd5.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + SCRIPT=$(basename "${0}") + VERSION="2018-02-10" + AUTHOR="ffmprovisr" + RED="\033[1;31m" + BLUE="\033[1;34m" + NC="\033[0m" + +if [[ "${OSTYPE}" = "cygwin" ]] || [[ ! "$(which diff)" ]]; then + echo -e "${RED}Error: 'diff' is not installed by default. Please install 'diffutils' from Cygwin.${NC}" + exit 1 +fi + +_output_prompt(){ + cat < -m | -h +EOF + exit 1 +} + +_output_help(){ + cat < -m + Pass to the script the audio-visual file and the corresponding MD5 + file to check. + ${SCRIPT} -h + This help. +Dependency: + ffmpeg +About: + Version: ${VERSION} + Website: https://github.com/amiaopensource/ffmprovisr/blob/gh-pages/scripts/check_video_framemd5.sh +EOF + exit 0 +} + +unset input_file +unset input_hash + +while getopts ":i:m:h" opt; do + case "${opt}" in + i) input_file=${OPTARG} ;; + m) input_hash=${OPTARG} ;; + h) _output_help ;; + :) echo -e "${RED}Error: option -${OPTARG} requires an argument${NC}" ; _output_prompt ;; + *) echo -e "${RED}Error: bad option -${OPTARG}${NC}" ; _output_prompt ;; + esac +done + +[[ -z "${#}" || ! ${input_file} || ! ${input_hash} ]] && _output_prompt +echo -e "${BLUE}Please wait...${NC}" +unset md5_tmp +if [[ "${OSTYPE}" = "cygwin" ]]; then + md5_tmp="${USERPROFILE}/$(basename "${input_hash}").tmp" +else + md5_tmp="${HOME}/$(basename "${input_hash}").tmp" +fi +ffmpeg -i "${input_file}" -loglevel 0 -f framemd5 -an "${md5_tmp}" +[[ ! -f "${md5_tmp}" ]] && { echo -e "${RED}Error: '${input_file}' is not a valid audio-visual file.${NC}" ; _output_prompt ; } +unset old_file +unset tmp_file +old_file=$(grep -v '^#' "${input_hash}") +tmp_file=$(grep -v '^#' "${md5_tmp}") +if [[ "${old_file}" = "${tmp_file}" ]]; then + echo -e "${BLUE}'$(basename "${input_file}")' matches '$(basename "${input_hash}")'${NC}" +else + echo -e "${RED}The following differences were detected between '$(basename "${input_file}")' and '$(basename "${input_hash}")':${NC}" + diff "${input_hash}" "${md5_tmp}" +fi +rm "${md5_tmp}" diff --git a/ffmprovisr_spanish/scripts/ffmprovisr b/ffmprovisr_spanish/scripts/ffmprovisr new file mode 100755 index 0000000..140820e --- /dev/null +++ b/ffmprovisr_spanish/scripts/ffmprovisr @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# This allows to open the online version of the ffmprovisr, when the computer is +# connected to the Web, and the local version otherwise. + +if [[ "$(uname -s)" = "Darwin" ]] ; then + if ping -c 1 amiaopensource.github.io >/dev/null 2>&1 ; then + ffmprovisr_path='https://amiaopensource.github.io/ffmprovisr/' + else + ffmprovisr_path=$(find /usr/local/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1) + fi + open "${ffmprovisr_path}" +elif [[ "$(uname -s)" = "Linux" ]] ; then + if ping -c 1 amiaopensource.github.io >/dev/null 2>&1 ; then + ffmprovisr_path='https://amiaopensource.github.io/ffmprovisr/' + else + ffmprovisr_path=$(find ~/.linuxbrew/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1) + fi + xdg-open "${ffmprovisr_path}" +else + echo "Please locate the 'ffmprovisr' folder, and open the 'index.html' file in a browser." +fi diff --git a/ffmprovisr_spanish/scripts/get_recipe_list b/ffmprovisr_spanish/scripts/get_recipe_list new file mode 100644 index 0000000..083e746 --- /dev/null +++ b/ffmprovisr_spanish/scripts/get_recipe_list @@ -0,0 +1 @@ +curl https://amiaopensource.github.io/ffmprovisr/ -s | grep -E '
.*
|

.*

' | sed 's/.*\(.*\)<\/code>/\1/' | sed 's/.*
\(.*\)<\/h5>/# \1/' | grep -v '\*\*\*' | sed -e 's/<[^>]*>//g' diff --git a/index.html b/index.html index 6e937be..48670df 100644 --- a/index.html +++ b/index.html @@ -2,6 +2,11 @@ ffmprovisr + + +
Español
+
+ diff --git a/recipes.md b/recipes.md new file mode 100644 index 0000000..c0f624d --- /dev/null +++ b/recipes.md @@ -0,0 +1,203 @@ +# Basic rewrap command +ffmpeg -i input_file.ext -c copy -map 0 output_file.ext +# Generate Broadcast WAV +ffmpeg -i input_file.wav -c copy -write_bext 1 -metadata field_name='Content' output_file.wav +# Rewrap DV video to .dv file +ffmpeg -i input_file -f rawvideo -c:v copy output_file.dv +# Transcode to deinterlaced Apple ProRes LT +ffmpeg -i input_file -c:v prores -profile:v 1 -vf yadif -c:a pcm_s16le output_file.mov +# Transcode to an H.264 access file +ffmpeg -i input_file -c:v libx264 -pix_fmt yuv420p -c:a aac output_file +# Transcode from DCP to an H.264 access file +ffmpeg -i input_video_file.mxf -i input_audio_file.mxf -c:v libx264 -pix_fmt yuv420p -c:a aac output_file.mp4 +# Transcode your file with the FFV1 Version 3 Codec in a Matroska container +ffmpeg -i input_file -map 0 -dn -c:v ffv1 -level 3 -g 1 -slicecrc 1 -slices 16 -c:a copy output_file.mkv -f framemd5 -an framemd5_output_file +# Convert DVD to H.264 +ffmpeg -i concat:input_file_1\|input_file_2\|input_file_3 -c:v libx264 -c:a aac output_file.mp4 +# Transcode to an H.265/HEVC MP4 +ffmpeg -i input_file -c:v libx265 -pix_fmt yuv420p -c:a copy output_file +# Transcode to H.264 using the GPU +ffmpeg -i input_file -c:v h264_nvenc -preset llhq -rc:v vbr_hq -cq:v 19 -b:v 8000k -maxrate:v 12000k -profile:v high -c:a copy output_file +# Transcode to H.265 using the GPU +ffmpeg -i input_file -c:v hevc_nvenc -preset llhq -rc:v vbr_hq -cq:v 19 -b:v 5000k -maxrate:v 8000k -profile:v main10 -c:a copy output_file +# Transcode to an Ogg Theora +ffmpeg -i input_file -acodec libvorbis -b:v 690k output_file +# Convert WAV to MP3 +ffmpeg -i input_file.wav -write_id3v1 1 -id3v2_version 3 -dither_method triangular -out_sample_rate 48k -qscale:a 1 output_file.mp3 +# Generate two access MP3s (with and without copyright). +ffmpeg -i input_file -i input_file_to_append -filter_complex "[0:a:0]asplit=2[a][b];[b]afifo[bb];[1:a:0][bb]concat=n=2:v=0:a=1[concatout]" -map "[a]" -codec:a libmp3lame -dither_method triangular -qscale:a 2 output_file.mp3 -map "[concatout]" -codec:a libmp3lame -dither_method triangular -qscale:a 2 output_file_appended.mp3 +# Convert WAV to AAC/MP4 +ffmpeg -i input_file.wav -c:a aac -b:a 128k -dither_method triangular -ar 44100 output_file.mp4 +# Transform 4:3 aspect ratio into 16:9 with pillarbox +ffmpeg -i input_file -filter:v "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file +# Transform 16:9 aspect ratio video into 4:3 with letterbox +ffmpeg -i input_file -filter:v "pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2" -c:a copy output_file +# Flip video image +ffmpeg -i input_file -filter:v "hflip,vflip" -c:a copy output_file +# Transform SD to HD with pillarbox +ffmpeg -i input_file -filter:v "colormatrix=bt601:bt709, scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:a copy output_file +# Change display aspect ratio without re-encoding +ffmpeg -i input_file -c:v copy -aspect 4:3 output_file +# Convert colorspace of video +ffmpeg -i input_file -c:v libx264 -vf colormatrix=src:dst output_file +# Modify image and sound speed +ffmpeg -i input_file -r output_fps -filter_complex "[0:v]setpts=input_fps/output_fps*PTS[v]; [0:a]atempo=output_fps/input_fps[a]" -map "[v]" -map "[a]" output_file +# Fade both video and audio streams +ffmpeg -i input_file -filter:v "fade=in:st=0:d=1, fade=out:st=59:d=1" -filter:a "afade=in:st=0:d=1, afade=out:st=59:d=1" -c:v libx264 -c:a aac output_file +# Synchronize video and audio streams +ffmpeg -i input_file -itsoffset 0.125 -i input_file -map 1:v -map 0:a -c copy output_file +# Clarify stream properties +ffprobe input_file -show_streams +# Crop video +ffmpeg -i input_file -vf "crop=width:height" output_file +# Change video color to black and white +ffmpeg -i input_file -filter_complex hue=s=0 -c:a copy output_file +# Extract audio without loss from an AV file +ffmpeg -i input_file -c:a copy -vn output_file +# Combine audio tracks +ffmpeg -i input_file -filter_complex "[0:a:0][0:a:1]amerge[out]" -map 0:v -map "[out]" -c:v copy -shortest output_file +# Inverses the audio phase of the second channel +ffmpeg -i input_file -af pan="stereo|c0=c0|c1=-1*c1" output_file +# Calculate Loudness Levels +ffmpeg -i input_file -af loudnorm=print_format=json -f null - +# RIAA Equalization +ffmpeg -i input_file -af aemphasis=type=riaa output_file +# Reverse CD Pre-Emphasis +ffmpeg -i input_file -af aemphasis=type=cd output_file +# One Pass Loudness Normalization +ffmpeg -i input_file -af loudnorm=dual_mono=true -ar 48k output_file +# Two Pass Loudness Normalization +ffmpeg -i input_file -af loudnorm=dual_mono=true:measured_I=input_i:measured_TP=input_tp:measured_LRA=input_lra:measured_thresh=input_thresh:offset=target_offset:linear=true -ar 48k output_file +# Fix A/V sync issues by resampling audio +ffmpeg -i input_file -c:v copy -c:a pcm_s16le -af "aresample=async=1000" output_file +# Join (concatenate) two or more files of the same type +ffmpeg -f concat -i mylist.txt -c copy output_file +# Join (concatenate) two or more files of different types +ffmpeg -i input_1.avi -i input_2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[video_out][audio_out]" -map "[video_out]" -map "[audio_out]" output_file +# Split one file into several smaller segments +ffmpeg -i input_file -c copy -map 0 -f segment -segment_time 60 -reset_timestamps 1 output_file-%03d.mkv +# Trim file +ffmpeg -i input_file -ss 00:02:00 -to 00:55:00 -c copy -map 0 output_file +# Create an excerpt, starting from the beginning of the file +ffmpeg -i input_file -t 5 -c copy -map 0 output_file +# Create a new file with the first five seconds trimmed off the original +ffmpeg -i input_file -ss 5 -c copy -map 0 output_file +# Create a new file with the final five seconds of the original +ffmpeg -sseof -5 -i input_file -c copy -map 0 output_file +# Trim silence from beginning of an audio file +ffmpeg -i input_file -af silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1 -c:a your_codec_choice -ar your_sample_rate_choice output_file +# Trim silence from the end of an audio file +ffmpeg -i input_file -af areverse,silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1,areverse -c:a your_codec_choice -ar your_sample_rate_choice output_file +# Upscaled, pillar-boxed HD H.264 access files from SD NTSC source +ffmpeg -i input_file -c:v libx264 -filter:v "yadif, scale=1440:1080:flags=lanczos, pad=1920:1080:(ow-iw)/2:(oh-ih)/2, format=yuv420p" output_file +# Deinterlace video +ffmpeg -i input_file -c:v libx264 -vf "yadif,format=yuv420p" output_file +# Deinterlace video fields to frames +ffmpeg -i input_file -c:v libx264 -vf "idet,bwdif,format=yuv420p" output_file +# Inverse telecine +ffmpeg -i input_file -c:v libx264 -vf "fieldmatch,yadif,decimate" output_file +# Set field order for interlaced video +ffmpeg -i input_file -c:v video_codec -filter:v setfield=tff output_file +# Identify interlacement patterns in a video file +ffmpeg -i input file -filter:v idet -f null - +# Create opaque centered text watermark +ffmpeg -i input_file -vf drawtext="fontfile=font_path:fontsize=font_size:text=watermark_text:fontcolor=font_color:alpha=0.4:x=(w-text_w)/2:y=(h-text_h)/2" output_file +# Overlay image watermark on video +ffmpeg -i input_video file -i input_image_file -filter_complex overlay=main_w-overlay_w-5:5 output_file +# Burn in timecode +ffmpeg -i input_file -vf drawtext="fontfile=font_path:fontsize=font_size:timecode=starting_timecode:fontcolor=font_colour:box=1:boxcolor=box_colour:rate=timecode_rate:x=(w-text_w)/2:y=h/1.2" output_file +Embed subtitles +ffmpeg -i input_file -i subtitles_file -c copy -c:s mov_text output_file +# Export one thumbnail per video file +ffmpeg -i input_file -ss 00:00:20 -vframes 1 thumb.png +# Export many thumbnails per video file +ffmpeg -i input_file -vf fps=1/60 out%d.png +# Create GIF from still images +ffmpeg -f image2 -framerate 9 -pattern_type glob -i "input_image_*.jpg" -vf scale=250x250 output_file.gif +# Create GIF from a video +ffmpeg -ss HH:MM:SS -i input_file -filter_complex "fps=10,scale=500:-1:flags=lanczos,palettegen" -t 3 palette.png +ffmpeg -ss HH:MM:SS -i input_file -i palette.png -filter_complex "[0:v]fps=10, scale=500:-1:flags=lanczos[v], [v][1:v]paletteuse" -t 3 -loop 6 output_file +# Transcode an image sequence into uncompressed 10-bit video +ffmpeg -f image2 -framerate 24 -i input_file_%06d.ext -c:v v210 output_file +# Create video from image and audio +ffmpeg -r 1 -loop 1 -i image_file -i audio_file -acodec copy -shortest -vf scale=1280:720 output_file +# Audio Bitscope +ffplay -f lavfi "amovie=input_file, asplit=2[out1][a], [a]abitscope=colors=purple|yellow[out0]" +# Play a graphical output showing decibel levels of an input file +ffplay -f lavfi "amovie='input.mp3', astats=metadata=1:reset=1, adrawgraph=lavfi.astats.Overall.Peak_level:max=0:min=-30.0:size=700x256:bg=Black[out]" +# Identify pixels out of broadcast range +ffplay -f lavfi "movie='input.mp4', signalstats=out=brng:color=cyan[out]" +# Vectorscope from video to screen +ffplay input_file -vf "split=2[m][v], [v]vectorscope=b=0.7:m=color3:g=green[v], [m][v]overlay=x=W-w:y=H-h" +# Side by Side Videos/Temporal Difference Filter +ffmpeg -i input01 -i input02 -filter_complex "[0:v:0]tblend=all_mode=difference128[a];[1:v:0]tblend=all_mode=difference128[b];[a][b]hstack[out]" -map [out] -f nut -c:v rawvideo - | ffplay - +# Use xstack to arrange output layout of multiple video sources +ffplay -f lavfi -i testsrc -vf "split=3[a][b][c],[a][b][c]xstack=inputs=3:layout=0_0|0_h0|0_h0+h1[out]" +# Pull specs from video file +ffprobe -i input_file -show_format -show_streams -show_data -print_format xml +# Strip metadata +ffmpeg -i input_file -map_metadata -1 -c:v copy -c:a copy output_file +# Batch processing (Mac/Linux) +for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done +# Check decoder errors +ffmpeg -i input_file -f null - +# Check FFV1 fixity +ffmpeg -report -i input_file -f null - +# Create MD5 checksums (video frames) +ffmpeg -i input_file -f framemd5 -an output_file +# Create MD5 checksums (audio samples) +ffmpeg -i input_file -af "asetnsamples=n=48000" -f framemd5 -vn output_file +# Create MD5 checksum(s) for A/V stream data only +ffmpeg -i input_file -map 0:v:0 -c:v copy -f md5 output_file_1 -map 0:a:0 -c:a copy -f md5 output_file_2 +# Get checksum for video/audio stream +ffmpeg -loglevel error -i input_file -map 0:v:0 -f hash -hash md5 - +# Get individual checksums for all video/audio streams ("Streamhash") +ffmpeg -i input_file -map 0 -f streamhash -hash md5 - -v quiet +# QCTools report (with audio) +ffprobe -f lavfi -i "movie=input_file:s=v+a[in0][in1], [in0]signalstats=stat=tout+vrep+brng, cropdetect=reset=1:round=1, idet=half_life=1, split[a][b];[a]field=top[a1];[b]field=bottom, split[b1][b2];[a1][b1]psnr[c1];[c1][b2]ssim[out0];[in1]ebur128=metadata=1, astats=metadata=1:reset=1:length=0.4[out1]" -show_frames -show_versions -of xml=x=1:q=1 -noprivate | gzip > input_file.qctools.xml.gz +# QCTools report (no audio) +ffprobe -f lavfi -i "movie=input_file,signalstats=stat=tout+vrep+brng, cropdetect=reset=1:round=1, idet=half_life=1, split[a][b];[a]field=top[a1];[b]field=bottom,split[b1][b2];[a1][b1]psnr[c1];[c1][b2]ssim" -show_frames -show_versions -of xml=x=1:q=1 -noprivate | gzip > input_file.qctools.xml.gz +# Read/Extract EIA-608 Closed Captioning +ffprobe -f lavfi -i movie=input_file,readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.line,lavfi.readeia608.0.cc,lavfi.readeia608.1.line,lavfi.readeia608.1.cc -of csv > input_file.csv +# Make a mandelbrot test pattern video +ffmpeg -f lavfi -i mandelbrot=size=1280x720:rate=25 -c:v libx264 -t 10 output_file +# Make a SMPTE bars test pattern video +ffmpeg -f lavfi -i smptebars=size=720x576:rate=25 -c:v prores -t 10 output_file +# Make a test pattern video +ffmpeg -f lavfi -i testsrc=size=720x576:rate=25 -c:v v210 -t 10 output_file +# Play HD SMPTE bars +ffplay -f lavfi -i smptehdbars=size=1920x1080 +# Play VGA SMPTE bars +ffplay -f lavfi -i smptebars=size=640x480 +# Generate a sine wave test audio file +ffmpeg -f lavfi -i "sine=frequency=1000:sample_rate=48000:duration=5" -c:a pcm_s16le output_file.wav +# SMPTE bars + Sine wave audio +ffmpeg -f lavfi -i "smptebars=size=720x576:rate=25" -f lavfi -i "sine=frequency=1000:sample_rate=48000" -c:a pcm_s16le -t 10 -c:v ffv1 output_file +# Make a broken file +ffmpeg -i input_file -bsf noise=1 -c copy output_file +# Conway's Game of Life +ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800 +# Play video with OCR +ffplay input_file -vf "ocr,drawtext=fontfile=/Library/Fonts/Andale Mono.ttf:text=%{metadata\\\:lavfi.ocr.text}:fontcolor=white" +# Export OCR from video to screen +ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr" +# Compare Video Fingerprints +ffmpeg -i input_one -i input_two -filter_complex signature=detectmode=full:nb_inputs=2 -f null - +# Generate Video Fingerprint +ffmpeg -i input -vf signature=format=xml:filename="output.xml" -an -f null - +# Play an image sequence +ffplay -framerate 5 input_file_%06d.ext +# Split audio and video tracks +ffmpeg -i input_file -map 0:v:0 video_output_file -map 0:a:0 audio_output_file +# Merge audio and video tracks +ffmpeg -i video_file -i audio_file -map 0:v -map 1:a -c copy output_file +# Create ISO files for DVD access +ffmpeg -i input_file -aspect 4:3 -target ntsc-dvd output_file.mpg +# CSV with timecodes and YDIF +ffprobe -f lavfi -i movie=input_file,signalstats -show_entries frame=pkt_pts_time:frame_tags=lavfi.signalstats.YDIF -of csv +# Cover head switching noise +ffmpeg -i input_file -filter:v drawbox=w=iw:h=7:y=ih-h:t=max output_file +# Record and live-stream simultaneously +ffmpeg -re -i ${INPUTFILE} -map 0 -flags +global_header -vf scale="1280:-1,format=yuv420p" -pix_fmt yuv420p -level 3.1 -vsync passthrough -crf 26 -g 50 -bufsize 3500k -maxrate 1800k -c:v libx264 -c:a aac -b:a 128000 -r:a 44100 -ac 2 -t ${STREAMDURATION} -f tee "[movflags=+faststart]${TARGETFILE}|[f=flv]${STREAMTARGET}" +# View FFmpeg subprogram information +ffmpeg -h type=name