Tabla de Contenidos
ffmpeg
FFplay
Con la instalación de FFmpeg se incluye FFplay, un sencillo reproductor multimedia que suele usarse para probar filtros de FFmpeg.
ffplay -vf "drawtext=text='Vacaciones 2023':y=h-text_h-10:x=(w/2-text_w/2):fontsize=20" video.mkv
Durante la reproducción:
| Acción | Tecla |
|---|---|
| Alterna pantalla completa | F |
| Pausa/reanuda la reproducción | Space |
| Alternar silenciar | M |
| Salir | Q, Esc |
| Avanzar fotograma a fotograma | S |
ffprobe
La instalación de FFmpeg también incluye la herramienta ffprobe que permite obtener información de archivos multimedia.
ffprobe video.mp4
Ejemplo de salida:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bbb_sunflower_1080p_60fps_normal.mp4':
Metadata:
[...]
title : Big Buck Bunny, Sunflower version
artist : Blender Foundation 2008, Janus Bager Kristensen 2013
[...]
Stream #0:0[0x1](und): Video: h264 [...]
[...]
Stream #0:1[0x2](und): Audio: mp3 [...]
[...]
Stream #0:2[0x3](und): Audio: ac3 [...]
Si queremos obtener la información en formato JSON:
ffprobe -v error -hide_banner -print_format json -show_streams video.mp4
-v error: solo mostrar información extra si hay error.-hide_banner: ocultar información sobre la compilación de FFmpeg-print_format: formato en el que presentar la información.-show_streams: solo mostrar información de los streams.
Soporte de códecs y formatos
Para saber qué códecs soporta la compilación de ffmpegque tengamos en nuestro sistema:
ffmpeg -codecs
Ejemplos de códecs:
- H.264 (AVC, MPEG-4)
- H.265 (HEVC)
- AAC
- MP3
- OGG
Para saber los formatos de ficheros:
ffmpeg -formats
Ejemplos de formatos:
- AVI
- Matroska (MKV)
- Ogg
Convertir vídeos a MP4
ffmpeg -i example.mov -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac example.mp4 -hide_banner
-f mp4: indicamos que el archivo de salida tendrá el formato mp4-vcodec libx264: códec de vídeo a usar (libx264 es el codificador de vídeo H264)-preset fast: perfil a usar con el códec libx264. Están disponiblesultrafast,superfast,veryfast,faster,fast,medium,slow,sloweroveryslow. Las preconfiguraciones lentas producen una mejor calidad de vídeo en menos espacio, pero llevará más tiempo el procesado.-profile:v main: indicamos al codificador cierto perfil para usar opciones avanzadas para mejorar la compresión. Están disponiblesbaseline,main,high,high10,high422yhigh444-acodec aac: códec de audio a emplear. En este casoaac codec.-hide_banner: si queremos ocultar la información sobre el proceso de ffmpeg.
Grabar streaming
ffmpeg -i rtsp://usuario:contraseña@servidor.com:443/stream -vcodec copy prueba.mp4
Ejemplo para cámara Foscam:
ffmpeg -t 00:10:00 -i "rtsp://user:pass@192.168.0.3:443/videoMain" -vcodec copy -acodec copy foscam.mkv
Duración de la grabación
ffmpeg -t 00:10:00 -i rtsp://usuario:contraseña@servidor.com:443/stream -vcodec copy "prueba-$(date +%F).mp4"
-tindica la duración. Se puede indicar en segundos o en formatohh:mm:ss.
Grabación de segmentos
Para hacer cortes en una grabación continua:
ffmpeg -i rtsp://ip.cam/unicast -vcodec copy -map 0 -f segment -segment_time 30 -segment_format mp4 "video-%03d.mp4"
vcodecmapfsegment_time: duración de los segmentos en segundos.
El anterior comando creará ficheros de 30 segundos con el formato video-xxx.mp4, donde xxx va desde 000 hasta 999.
Edición
Cortar fragmento
Si queremos cortar un trozo de cierto vídeo sin realizar una recodificación:
ffmpeg -i video.mp4 -ss 02:00 -to 10:00 -c copy resultado.mp4
ss: indica desde dónde se hace el corte (mm:ss)to: indica hasta dónde se hace el corte (mm:ss)
Casos de uso
- Procesamiento de vídeo:
- Rotar
- Extracción de frames
- Extracción de segmentos
- Extracción de audio
- Extracción de subtítulos
- Conversión de colores
- Reducción de tamaño
- Conversión de formatos
- Convertir GIF en vídeo
- Procesamiento de audio:
- Compresión de vídeo
- Normalización
- Ganancia
- Remuxing
- Empaquetado de vídeo
- HLS
- MPEG-DASH
- RTMP
Webcam
Para ver el fichero asociado con la webcam:
v4l2-ctl --list-devices
Para ver los formatos soportados por la webcam:
v4l2-ctl --list-formats-ext --device /dev/video0
Grabar un fragmento
El siguiente comando activará la webcam y grabará durante 10 segundos. El resultado se almacenará en el fichero 10seconds_of_webcam.webm.
ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -t 10 -i /dev/video0 10seconds_of_webcam.webm
Streaming
Para hacer streaming del vídeo de la webcam y el audio del micro, suponiendo que además tenemos un servidor RTMP (el que se encargará de hacer la transmisión):
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1,0 -c:v libx264 -pix_fmt yuv420p -framerate 15 -g 30 -b:v 500k -c:a aac -b:a 128k -ar 44100 -ac 2 -preset ultrafast -tune zerolatency -f flv rtmp://localhost:1935/live/foo
-c:v libx264: usaremos el códec de vídeo H.264-c:a aac: usaremos el código de audio AAC-f alsa -i hw:1,0: micrófono (comprobar conarecord -l).-ar: frecuencia de muestreo del audio (en Hz)-ac: número de canales de audio-b:v: bitrate de vídeo-preset: opciones para la compresión. Indicamosultrafastque apenas realizará compresión.-tune: ajustamos para que se reduzca la latencia (retraso).
Los protocolos más habituales para streaming son:
- RTMP
- HLS
- DASH
- UDP
- RTP
- RTSP
