Ffmpeg

De HackLab
Saltar a: navegación, buscar


Achicar archivos

Hay muchas formas de achicar videos! Podemos simplemente forzar un tamaño de cuadro o frame, con este comando:

ffmpeg -i <archivo de entrada> -s <tamaño> <archivo de salida>

O podemos escalar todo manteniendo la relación de aspecto (sin deformación), con estos otros:

ffmpeg -i <archivo de entrada> -vf scale=w=1080:h=-1 <archivo de salida>

ffmpeg -i <archivo de entrada> -vf scale=w=-1:h=600 <archivo de salida>

En el primero caso, definimos un ancho (w=1080) de 1080px, y para la altura (h=-1) le decimos con el -1 que la elija manteniendo la relación. En el segundo, hacemos al revés.

kdenlive

¿Para qué querríamos achicar un archivo de video en buena calidad? Por ejemplo, para importar en kdenlive. Ponéle que tenés un formato muy pesado, como puede ser un .MTS (AVCHD video file: archivo de video mpeg transport stream de alta definición usando por Sony, Panasonic y otras grabadas de alta definición (HD); basado en MPEG-2 transport stream y soporta formatos de video 720p and 1080i HD.

Podemos usar ffmpeg para reducirle la calidad, por ejemplo, reduciendo el tamaño a 160x140 (px) para laburar en baja calidad y ya, al final, los reemplazamos con los archivos originales de alta calidad. Para ello, es recomendable un directorio aparte, por ejemplo, con el nombre baja y ahí hacemos copia de los archivos.

En el directorio general del proyecto introducimos este comando en terminal (necesitás descargarte ffmpeg obviamente):

ffmpeg -i cardamomo.MOV -s 160x140 baja/cardamomo.MOV

Si tenemos muchísimos archivos que convertir, esta es una forma de procesarlos a todos:

for i in *.MTS; do ffmpeg -i -s 160x140 $i baja/$i; done

Nota: la extensión es sensible a mayúsculas así que no es lo mismo ".mts" que ".MTS". Fijáte. Ahí te va a reducir al tamaño 160x140 todos los ".MTS" del directorio "baja".

Laburamos el proyecto y ya, al final, sustituimos los archivos por los de alta calidad. Los metemos en el mismo path (localización del archivo, por ej: /home/videos/proyecto-documental-sarasa/baja/archivo.MTS) con el mismo nombre para "pisarlos", Así evitas tener que estar cambiando en propiedades de cada archivo en el proyecto la ruta/path en propiedades.

Extraer partes de un video

Identificamos la escena que queremos rescatar (cuándo empieza y cuánto dura). Las forma básica es:

ffmpeg -ss <tiempo de inicio> -t <duración en segundos> -i <archivo de entrada> <archivo de salida>

Un ejemplo:

ffmpeg -ss 1:38:29.500 -t 7.1 -i buena-película.mp4 escena.mp4

En este caso arrancamos partir del tiempo 1:38:29.500 (1 hora, 38 minutos, 29 segundos y medio), estamos sacando 7.1 segundos, y guardándolo como escena.mp4

Sin especificar ninguna opción de codificación, ffmpeg mantiene la calidad original.

¡Problemas!

A veces, hay errores (no, en serio). Si la película está codificada de alguna forma extraña, pueden aparecer errores. Uno bastante común es:

   The encoder 'aac' is experimental but experimental codecs are not
   enabled, add '-strict -2' if you want to use it.

Dice que el codificador aac es experimental y por nuestra configuración no están habilitados los codificadores experimentales. Entre toda la información que muestra ffmpeg hay algo sobre los flujos que componen el video. En este caso, el de audio

   Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 95 kb/s (default)
                             ↑

es el culpable, pero por suerte el mismo mensaje nos da la solución:

ffmpeg -ss 1:38:29.500 -t 7.1 -i buena-película.mp4 -strict -2 escena.mp4

Ponemos la opción strict -2 después del archivo de entrada (creo que no funciona en otra parte).