¡Esta es una revisión vieja del documento!
Tabla de Contenidos
ffmpeg
FFplay
Con la instalacció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
