compudanzas

apuntes de ffmpeg

notas de usos comunes que le doy a ffmpeg

"trim" / cortar

ffmpeg -i input.video -ss 5 -t 20 output.video

donde:
-ss es el tiempo inicial
-t es la duracion total del nuevo video

escalar

ffmpeg -i input.video -vf scale=640:480 -acodec copy output.video

y para reducir el tamaño del archivo, suele ser útil recomprimir con crf (constant rate factor)

ffmpeg -i input.video -crf 24 -acodec copy output.video

en teoría 24 es una compresión difícil de percibir. números mayores comprimen más.

"-acodec copy" evita que se vuelva a codificar el audio.

cambio de framerate

ffmpeg -i input.video -r 30 output.video

o

ffmpeg -i input.video -filter:v fps=fps=30 output.video

cambio de "velocidad"

obtiene un video a 2x de velocidad:

ffmpeg -i input.video -filter:v "setpts=0.5*PTS" output.video

para hacer 60x (por ejemplo, convertir minutos a segundos):

ffmpeg -i input.video -filter:v "setpts=0.016*PTS" output.video

puede ser necesario agregar el parámetro -t DURACIÓN para que el video resultante tenga la duración deseada y no se quede con la anterior.

concatenar

hacer lista de videos con el formato:

file 'archivo1'
file 'archivo2'
file 'archivo3'

y luego:

ffmpeg -f concat -i lista.txt -c copy output.video

generar video desde serie de img

ffmpeg -framerate 30 -i frame-%04d.tif -pix_fmt yuv420p -c:v libx264 <output.mp4>

crop (y exportar desde recordmydesktop)

ffmpeg -i out.ogv -filter:v "crop=1280:720:0:0" -codec:v libx264 -codec:a libmp3lame output.mp4

video a partir de una imagen

# video de una imagen,
# 10 segundos, 30 frames por segundo
ffmpeg -loop 1 \
	-i imagen_verde.png \
	-t 00:00:10 -r 30 \
	video_verde.ogv

video a partir de serie de imágenes

# cambia entre imágenes a 2fps,
# video final a 30fps
ffmpeg -framerate 2 \
       -i "%02d.png" \
       -pix_fmt yuv420p \
       -c:v libx264 \
       -r 30 salida.mp4

overlay de imagen sobre video

ffmpeg -i input.mp4 -i imagen.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output.mp4

cámara virtual

es necesario instalar v4l2loopback, e.g.:

sudo apt install v4l2loopback-utils

y luego habilitar el módulo:

sudo modprobe v4l2loopback

si no hay más cámaras conectadas, el dispositivo virtual estará en /dev/video0

pantalla completa

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

si la imagen está en espejo, se puede utilizar el parámetro -vf hflip

fuente

capturing your desktop/screen recording

x11grab

región específica

aquí utiliza la opción de video_size y el offset en la opción i:

ffmpeg -f x11grab -show_region 1 -r 15 -video_size 640x480 -i :0.0+10,130 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

una opción interesante aquí puede ser:

-follow_mouse centered

ventana

obtén la window id con xwininfo:

xwininfo | grep "Window id"

en teoría debería poder utilizar la id con la opción -window_id, pero no he tenido éxito (Option window_id not found)

enlaces entrantes