Cómo usar ffmpeg para editar video

Autor: | Posteado en Trucos Sin comentarios

Una de mis tools preferidas para conversión multimedia es ffmpeg. Se intenta de una tool de línea de comandos que acepta efectuar multitud de actividades relacionadas con video, audio o inclusive imágenes.

Cómo editar video con ffmpeg

Aunque su uso no es excesivamente complejo, la enorme suma de parámetros, combinaciones y el inmenso abanico de formatos y sus características, crean que el uso de ffmpeg sea poco intuitivo cuando empezamos a utilizarlo (o inclusive mas tarde, si no lo tenemos bien claro).

En este capítulo vamos a explicar como usar esta tool de forma sencilla, dando un estudio a las actividades de edición de video mas comunes y prácticas, viendo ejemplos prácticos para aplicar.

Instalación de ffmpeg

La tool ffmpeg es multiplataforma, por lo que puede instalarse en cualquier sistema, ya sea GNU/Linux, Windows o Mac. En el caso de Windows, la pagina tiene varias versiones (static, shared y dev). Aconsejo instalar la version static de 64 bits (si vuestro metodo es de 64 bits), que incluye una carpeta bin con el archivo ffmpeg.exe que nos interesa. Dicho archivo puede colocarse en una carpeta que este en el PATH del sistema, o simplemente ubicarlo en una carpeta del metodo como C:\windows, por ejemplo.

Si acostumbras a trabajar en una dispositivo de texto bajo windows, mira 1° el capítulo Cómo optimizar la dispositivo de Windows donde hallaras algunos sugerencias para instalar ConEmu y Chocolatey y tener una intenso dispositivo de texto.

En el caso de GNU/Linux podrias usar el comando apt-get install ffmpeg. En Windows, si teneis ya implementado Chocolatey, podrias usar choco install ffmpeg.

Obtener información de un video

Una vez instalado, logramos visualizar información sobre nuestros videos de la próximo forma:

ffmpeg -i video.mp4

El parámetro -i indica que se va a demostrar un archivo de entrada (en vuestro caso, el video) y a continuación, dicho archivo. Obtendremos que ffmpeg nos devuelve enorme suma de información. La parte clave es la que resalto a continuación:

Información sobre un video con ffmpeg

  • Naranja: Se intenta del comando que escribimos en la dispositivo de texto para anunciar ffmpeg y efectuar alguna acción. En este caso, sacar información del video.
  • Verde/Amarillo: Características del archivo en general (duración y bitrate del video+audio, por ejemplo).
  • Azul: Información sobre el canal de video: codec, resolución, proporción de aspecto, calidad de video, fps, etc…
  • Rojo: Información sobre el canal de audio: codec, frecuencia de muestreo, calidad de audio, etc…

Con esto podrias sacar información sobre un archivo de video y sus características.

Conversión entre formatos de video

Uno de los puntos poderosos de ffmpeg es que acepta efectuar prácticamente cualquier tipo de conversión entre los distintos formatos de video y audio (que no son pocos). El único requerimiento es tener una idea general de los distintos codecs que existen, por lo que sugiero altamente leer Formatos de video: todo lo que deberías saber y Formatos de audio: todo lo que deberías saber antes de empezar a usar ffmpeg. De esa forma, teniendo clara la diferencia de un contenedor y un codec, de los distintos formatos que existen y otras cuestiones, es muy fácil usar ffmpeg.

Podemos efectuar conversiones aprovechándonos de las extensiones comunes de ciertos formatos de video, ya que ffmpeg los descubre automaticamente. Por ejemplo:

ffmpeg -i video_original.avi video_destino.mp4

En este ejemplo, le indicamos a ffmpeg que el formato de entrada es video_original.avi (mediante el parámetro -i) y que lo convierta a un archivo de destino al cuál le hemos indicado la extensión .mp4. De esta forma, ffmpeg busca los codecs de video y de audio apropiados para este formato (automáticamente selecciona h264 para video y aac para audio).

Veamos otro ejemplo creando una conversión de MP4 a MKV (matroska):

Convertir entre formatos de video con ffmpeg

No obstante, logramos ser mas específicos y personalizar los formatos que queremos utilizar. Por ejemplo, especificando el codec de video y el codec de audio que queremos en el archivo de destino:

ffmpeg -i video_original.mp4 -vcodec libx264 video_264.mkv ffmpeg -i video_original.mp4 -vcodec libx265 video_265.mkv

En ambos ejemplos preliminares estamos creando un archivo de video Matroska (MKV), con canal de audio vorbis en ambos casos. Sin embargo, en el 1° ejemplo, estamos usando el codec de video h264 (mediante la librería libx264), mientras que en el 2° ejemplo usamos el codec de video h265 (mediante la librería libx265), todavía en desarrollo y futuro sucesor de H264.

Los resultados son suficiente interesantes, puesto que el 1° archivo resultante ocupa 120MB, mientras que el 2° 69MB. Ambos a 1080p (HD) y con la misma aparente calidad (eso sí, el 2° tarda mas en comprimir y crearse).

También logramos inventar lo mismo con los canales de audio:

ffmpeg -i video.mp4 -vcodec copy -acodec mp3 h264_mp3.mkv ffmpeg -i video.mp4 -vcodec copy -acodec aac h264_aac.mkv ffmpeg -i video.mp4 -vcodec copy -acodec libvorbis h264_vorbis.mkv

Observa que en estos casos, hemos especificado copy en el codec de video, lo que obliga a ffmpeg a no inventar conversión de formatos de video, sino usar el que ya tiene (ahorrando mucho tiempo porque no hay que recomprimir el video), mientras que le especificamos el codec de audio mediante acodec.

Tanto en vcodec como en acodec tenemos que especificar la librería de codec a utilizar. En el caso de especificar el formato (como por ejemplo, «mp3»), el ffmpeg se encarga de seleccionar la librería mas apropiada (libmp3lame, en este caso).

Podemos visualizar las librerías de codecs y formatos que soporta ffmpeg escribiendo en una dispositivo ffmpeg -formats o ffmpeg -codecs.

Si todo esto se te queda muy enorme (o necesitas preparar algo para visitantes sin conocimientos de terminal), recuerda que teneis video-converter-scripts, una colección de scripts ya listos para que sólo tengas que arrastrar y soltar como podrias visualizar en este GIF.

Reducir/aumentar calidad de video/audio

Por defecto, ffmpeg se encarga de descubrir la calidad (bitrate) del video y audio del archivo original y le designa uno igual al archivo de destino. Sin embargo, esto depende mucho del archivo en cuestión y puede que ffmpeg reduzca demasiado la calidad (y se vea con mala calidad el archivo resultante) o mantenga una calidad demasiado alta (y ocupe demasiado el archivo final).

Reducir calidad de video (bitrate) con ffmpeg

Generalmente, ffmpeg hace un enorme trabajo en este aspecto. Pero si queremos personalizar la calidad, utilizaremos el parámetro -b:v para el bitrate de video y -b:a para el bitrate de audio. Por ejemplo:

ffmpeg -i video.avi -b:v 2500k -b:a 192k video_final.mp4

Esto conseguiría que el archivo MP4 final tenga un video con un bitrate de 2500kb/s y un audio con un bitrate de 192kb/s.

Extraer audio de un video

Otra intervención muy común es desear extraer el audio de un video, para pasarlo a un archivo MP3, por ejemplo. Esto es muy fácil de inventar con ffmpeg:

ffmpeg -i video.mp4 -vn audio.mp3

En algunos casos, como el caso anterior, ffmpeg detectará que el archivo de destino es un archivo de audio y hará la conversión de forma automatica sin obligación de demostrar parámetros como -vn. Sin embargo, será imprescindible si queremos realizarlo en un formato final mkv sin canal de video.

Silenciar (eliminar) el audio de un video

De la misma forma análoga al ejemplo anterior (donde eliminabamos el canal de video en un archivo de video), logramos suprimir el canal de audio de un archivo de video:

ffmpeg -i video.mp4 -an video_mute.mp4

Subir el volumen de un video (o audio)

Muchas veces tenemos un video que tiene un audio muy bajo. Podemos subirle el volumen del canal de audio con el parámetro -vol, indicándole un precio numérico donde 256 es el volumen original, pudiendo subirlo o bajarlo:

ffmpeg -i video.mp4 -vol 512 video_final.mp4 ffmpeg -i video.mp4 -af volume=2

En el 2° ejemplo vemos una forma alternativa usando filtros de audio, en el que subimos el volumen al doble de su volumen original.

Rotar o girar un video

También es muy común tener la obligación de rotar un video, ya sea porque nos interesa disfrutarlo así o porque alguien tuvo la osadía de inventar un maldito vídeo vertical. Para solucionarlo, logramos rotar el video creando lo siguiente:

ffmpeg -i video.mp4 -vf transpose=clock video_rotado_90.mp4 ffmpeg -i video.mp4 -vf transpose=clock,transpose=clock video_rotado_180.mp4 ffmpeg -i video.mp4 -vf hflip video_invertido_horizontalmente.mp4 ffmpeg -i video.mp4 -vf vflip video_invertido_verticalmente.mp4

En el 1° ejemplo, usamos el filtro de video transpose para girar 90 grados en el sentido de las agujas del reloj. En el caso de demostrar el precio cclock en lugar de clock, se gira en el sentido opuesto de las agujas del reloj. En el 2° ejemplo, aplicamos el filtro 2 veces, por lo que conseguimos como efecto un giro de 180 grados. Los 2 últimos ejemplos son para invertir un video horizontal o verticalmente.

Existe un parámetro rotate en ffmpeg que es mucho mas flexible, sin embargo cuidado, los valores deben expresarse en radianes.

Redimensionar o convertir tamaño de un video

Otra intervención suficiente frecuente es la de redimensionar el tamaño de un video. También es una intervención muy sencilla de efectuar con ffmpeg, pese a que hay que tener en cuenta la proporción de aspecto, de modo que al redimensionar no se deforme el mismo. Veamos algunos ejemplos:

ffmpeg -i video.mp4 -vf scale=320:240 video_320x240.mp4 ffmpeg -i video.mp4 -vf scale=320:-1 video_320x180.mp4 ffmpeg -i video.mp4 -vf scale=iw/2:ih/2 video_x.mp4

En el 1° de los casos, obligamos a ffmpeg a redimensionar el video a la dimensión 320×240, independientemente del tamaño del video original. En la segunda opción, sin embargo, al demostrar -1 le decimos a ffmpeg que utilice el alto adecuado para que el video no se deforme, reemplazándolo por su alto equivalente:

Cambiar tamaño de un video con ffmpeg

En el 3° ejemplo, usamos las frases clave iw y ih que significan input width e input_height. Al dividirlas entre dos, lo que indicamos es que el video resultante tenga la mitad de tamaño tanto de ancho como de alto.

Nota: Hay que tener cuidado con algunos codecs, puesto que no aceptan redimensiones a tamaños que no sean múltiplos de cuatro o restricciones similares.

Recortar fragmentos de un video

Otra intervención atrayente que nos puede aparecer es la de recortar un fragmento de tiempo de un video mas largo. Por ejemplo, sacar el fragmento de video desde los 35seg hasta los 65seg (30seg).

Existe un parámetro con el que logramos efectuar estas operaciones:

ffmpeg -i video.mp4 -ss 35 -t 30 fragmento.mp4 ffmpeg -i video.mp4 -ss 00:35 -to 01:05 fragmento.mp4

En el 1° ejemplo, estamos seleccionando el fragmento de video desde los 35seg (como marca de inicio), y a partir de ahí, 30seg hacia adelante. En el 2° ejemplo, estamos seleccionando el fragmento de video desde la marca de tiempo de 35seg hasta 1min 5seg, ambos del video original.

Añadir o suprimir pistas de audio a un video

La totalidad de formatos de video de la actualidad funcionan como contenedores que son capaces de incorporar muchos canales de audio (e inclusive de otros tipos). Es muy común, por ejemplo, para agregar audio en distintos idiomas. Con ffmpeg logramos administrar esas pistas multiples presentes en un archivo de video.

Un ejemplo de uso podrían ser los siguientes comandos:

ffmpeg -i video.mp4 -i audio_es.mp3 -map 0:v -map 0:a -map 1:a -vcodec copy video_final.mp4 ffmpeg -i video.mp4 -map 0:0 -map 0:2 solo_canal1_audio.mp4

En el 1° ejemplo, obtenemos 2 archivos de entrada: video.mp4 (un video en inglés) y audio_es.mp3 (el audio en español). Nuestra finalidad es agregar este audio en el video, de modo que se pueda seleccionar el idioma. Con -map 0:v y -map 0:a indicamos que utilizaremos el video y audio del 1° archivo de entrada (video.mp4) y con -map 1:a indicamos que utilizaremos el audio del 2° archivo de entrada (audio_es.mp3) para incorporarlo al video final.

En el 2° ejemplo, partimos de un archivo video.mp4 que tiene muchos canales de audio, y con los parámetros -map 0:0 y -map 0:2 indicamos que queremos producir un archivo con el video (canal 0) y la segunda pista de audio (canal 2), eliminando por tanto la 1ª pista (canal 1).

Mezclar pistas de audio

Pero en varias situaciones no interesa agregar otra pista de audio al video, sino mezclarla con la pista existente. Para ello, logramos usar el filtro de audio amerge, como vemos en el próximo ejemplo:

ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex amerge audio_mezclado.mp3

Para actividades un poco mas complejas, quizas lo preferible sería usar un buen editor de audio gratuito, que acepta inventar cosas mas mejoradas de forma mas cómoda.

Recorta zonas del video

Imagina por un instante que teneis un video, sin embargo sólo te interesa quedarte con una región concreta del mismo. Esto es lo que se llama crop (recortar), y además se puede efectuar con ffmpeg, con una linea de comandos como la que vemos a continuación:

ffmpeg -i screencast.mp4 -ss 00:30 -to 03:50 -vf crop=640:480:500:250 video_final.mp4

En ella, escogemos un fragmento de video, en el que sólo nos quedamos con una región de tamaño 640×480 desde la posición (500,250) de la pantalla. Esto puede ser muy util para recortar screencasts que hemos hecho y queremos extraer sólo una región de la pantalla.

Aplicar un viñeteado al video

Un efecto muy elegante y aprovechado es el viñeteado, muy aprovechado por los fans de Instagram. Con ffmpeg logramos además aplicar un viñeteado a vuestro video, en todos sus fotogramas, dándole un aspecto mas elegante y profesional.

Aplicar filtros de video con ffmpeg

Para aplicarlo, basta con usar el filtro de video vignette, junto a un precio que simboliza el ángulo del mismo en radianes:

ffmpeg -i video.mp4 -vf vignette=PI/4 video_vignette.mp4 ffmpeg -i video.mp4 -vf vignette='PI/4+random(1)*PI/50':eval=frame

El precio aplicado por defecto al viñeteado es pi/5, sin embargo se pueden inventar cosas un poco mas complejas, como el 2° ejemplo, donde se desarrolla un viñeteado que vibra aleatoriamente, simulando un efecto retro de reproducción antigua.

Crear fundidos (fade-out o fade-in)

Otro efecto elegante aprovechado a menudo en videos es el de los «fundidos a negro» (fade-out) o su proceso inverso (fade-in). Estos fundidos son muy comunes al comienzo o al final de un video, ya que es una forma elegante de terminarlo.

Con ffmpeg se pueden inventar de la próximo forma:

ffmpeg -i video.mp4 -vf fade=t=in:st=0:d=5 video-fadein.mp4 ffmpeg -i video.mp4 -vf fade=t=in:st=0:d=5,fade=t=out:st=25:d=5 video-fadeout.mp4

Teniendo en cuenta que vuestro video.mp4 tiene una duración de 30 segundos, en el 1° ejemplo, creamos un fundido desde negro (fade-in). Los parámetros indicados fade=t=in:st=0:d=5 son para efectuar un tipo de fundido de entrada (fade-in), que comience en la marca de tiempo de 0seg y dure 5seg desde que pasa de negro a desvanecerse por completo.

En el 2° ejemplo, añadimos además un fundido a negro (fade-out), que inicia a los 25seg y dura 5seg. También podríamos agregar un párametro c=white para efectuar los fundidos al color blanco, en lugar de negro.

Sin embargo, ya que tenemos el fundido a negro visualmente hecho, además logramos usar el filtro de audio afade para inventar lo mismo con el sonido:

ffmpeg -i true.mp4 -vf fade=t=in:st=0:d=5,fade=t=out:st=25:d=5 -af afade=t=in:ss=0:d=5,afade=t=out:st=25:d=5 truefade.mp4

Extraer fotogramas de un video

Con ffmpeg además logramos efectuar actividades con formatos de imágenes. Es factible extraer los fotogramas de un video (o un fragmento de video) y pasarlos a fotografias individuales. Para hacerlo, simplemente escribimos la próximo linea de comandos:

ffmpeg -i video.mp4 image%d.jpg

Teniendo en cuenta que los videos, por lo general, tienen entre 25-30fps (fotogramas por segundo), esto quiere mencionar que, salvo que se trate de un video muy corto, cada video generará enorme suma de imágenes.

Extraer fotogramas de un video

Para evitarlo, se puede disminuir los fotogramas por segundo a uno, por ejemplo, usando el próximo filtro:

ffmpeg -i video.mp4 -vf fps=1 image%d.png

De esta forma, sólo generará una foto por segundo. También logramos efectuar la intervención contraria, de modo que teniendo una serie de imágenes, las unamos y convirtamos en un video, algo ideal para técnicas de stop-motion, realizadas con una cámara digital:

ffmpeg -f image2 -i image%d.jpg video.mp4

Poner un logo o marca de agua a un video

Quizás, uno de los ejemplos mas prácticos puede ser el siguiente. En él, lo que hacemos es insertar una foto en una posición concreta de la imagen. Esto es ideal para insertar logotipos o marcas de agua en un video. Ten en cuenta, que si utilizas fotografias PNG podrias aprovechar el canal alfa de transparencia del mismo y ubicar marcas de aguas que no sean completamente opacas. El 1° ejemplo que se ve a continuidad inserta la foto logo.png en la posición (10,10), empezando desde la esquina superior izquierda:

ffmpeg -i video.mp4 -i logo.png -filter_complex overlay=10:10 final.mp4 ffmpeg -i video.mp4 -i logo.png -filter_complex overlay=x=(main_w-overlay_w):y=(main_h-overlay_h) final.mp4

Por otro lado, el 2° ejemplo efectua la misma tarea, sin embargo usando variables predefinidas, que equivalen a ubicar ese logotipo en la esquina inferior derecha, algo quizas mas habitual.

Reproducir videos en una dispositivo (ASCII art)

Como dato complementario y extravagante, ffmpeg integra la biblioteca libcaca, de la cual ya hablé en 20 curiosidades geeks para terminales GNU/Linux. Se intenta de una biblioteca especializada en la conversión multimedia a ASCII art, o lo que es lo mismo, es apto de reproducir un video en una dispositivo de texto, como logramos visualizar a continuación:

Reproducción ASCII con ffmpeg

Para ello, sólo hay que demostrar el parámetro -f caca, seguido de -pix_fmt rgb24 para demostrar el formato de colores, y por último, usar el guión para usar la salida estándar:

ffmpeg -i video.mp4 -pix_fmt rgb24 -f caca -

Los fotogramas son del videoclip True Survivor, de la genial película Kung Fury, de la cual ya hablé en este completo capítulo de referencias y curiosidades de Kung Fury.

Esto sólo es una selección experiencia con algunos diminutos ejemplos de lo que se puede inventar con ffmpeg. Si te ha efecto util o conoces algún parámetro atrayente que no este en la lista, por favor, compártelo con nosotros en los comentarios.

Emezeta blog

Visita también:



El mejor vídeo del día Trucos de Android


Nota: La creación de esta noticia le pertenece al autor original que aparece en la firma de más arriba. No hemos eliminado en ningún momento los enlaces oficiales, ni tampoco intentamos perjudicar su posicionamiento en los motores de búsqueda.

El Administrador de QueEsGoogle.Com

Agrega tu comentario