====== 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 |ffprobe gathers information from multimedia streams and prints it in human- and machine-readable fashion. | 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 disponibles ''ultrafast'', ''superfast'', ''veryfast'', ''faster'', ''fast'', ''medium'', ''slow'', ''slower'' o ''veryslow''. 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 disponibles ''baseline'', ''main'', ''high'', ''high10'', ''high422'' y ''high444'' * ''-acodec aac'': códec de audio a emplear. En este caso ''aac 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" * ''-t'' indica la duración. Se puede indicar en segundos o en formato ''hh: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" * ''vcodec'' * ''map'' * ''f'' * ''segment_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 con ''arecord -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. Indicamos ''ultrafast'' que apenas realizará compresión. * ''-tune'': ajustamos para que se reduzca la latencia (retraso). * [[https://www.baeldung.com/linux/ffmpeg-webcam-stream-video|How to Stream Video From Webcam to Network Using FFmpeg]] Los protocolos más habituales para streaming son: * RTMP * HLS * DASH * UDP * RTP * RTSP ====== Recursos ====== * http://www.bugcodemaster.com/article/convert-videos-mp4-format-using-ffmpeg * http://www.bugcodemaster.com/article/how-extract-and-join-video-files-using-ffmpeg * http://www.bugcodemaster.com/article/changing-resolution-video-using-ffmpeg * http://www.bugcodemaster.com/article/crop-video-using-ffmpeg * http://www.bugcodemaster.com/article/convert-video-animated-gif-using-ffmpeg * http://www.bugcodemaster.com/article/extract-images-frame-frame-video-file-using-ffmpeg * http://www.bugcodemaster.com/article/get-information-video-file-using-ffmpeg * [[https://gist.github.com/steven2358/ba153c642fe2bb1e47485962df07c730|FFmpeg cheatsheet]]