====== Escalar vídeo: ======
Reducir tamaño vídeo para whatsapp
ffmpeg -i vermicompostera1.mp4 \
-vf "scale=240:-2" \
-vcodec libx264 -crf 28 -preset medium \
-acodec aac -b:a 128k \
vermicompostera.mp4
ffmpeg -i original.mp4 -vf scale=800:600 destino.mp4
Si queremos fijar uno y que el otro lo calcule solo:
ffmpeg -i original.mp4 -vf scale=800:-1 destino.mp4
====== Extraer frame ======
Extrae frame numero 325
ffmpeg -i input.mp4 -vf "select=eq(n\,325)" -vframes 1 output.png
Extraer 250 frames de un vídeo
#!/bin/bash
video=$1
n=`ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 $video`
factor=$(echo "scale=4; $n / 250" | bc)
echo $factor
for ((i=1; i<=249; i++)); do
frame_decimal=$(echo "$i * $factor" | bc)
frame=$(echo "$frame_decimal" | cut -d'.' -f1)
fitxer=`printf "%03d\n" "$i"`
ffmpeg -i $video -vf "select=eq(n\,${frame})" -vframes 1 jur/${fitxer}.png
done
ffmpeg -i ${video} -vf "select=eq(n\,$((n - 1)))" -vframes 1 jur/250.png
====== Cortar vídeo ======
Minuto y segundo de inicio y de fin. Corta del 0:15 al 0:25 total 10 segundos de vídeo
ffmpeg -i original.mp4 -ss 00:00:15 -to 00:25 cortado.mp4
====== Normalizar audio ======
Detectar volumen:
ffmpeg -i entrada.wav -af volumedetect -f null -
Salida:
max_volume: -12.3 dB
mean_volume: -28.7 dB
Como el máximo está a -12.3 dB, puedes subir 11.3 dB para dejar 1 dB de margen:
ffmpeg -i entrada.wav -af "volume=11.3dB" salida.wav
CHAGPT:
Normalización automática (la más cómoda)
FFmpeg incorpora el filtro loudnorm.
ffmpeg -i entrada.wav -af loudnorm salida.wav
O indicando una sonoridad concreta:
ffmpeg -i entrada.wav -af loudnorm=I=-16:LRA=11:TP=-1.5 salida.wav
I=-16 → volumen objetivo.
TP=-1.5 → pico máximo.
LRA=11 → rango dinámico.
3. Normalizar dinámicamente (muy recomendable)
Existe el filtro dynaudnorm, que va ajustando el nivel a lo largo del audio.
ffmpeg -i entrada.wav -af dynaudnorm salida.wav
Este suele dar una sensación de mayor volumen sin necesidad de comprimir tanto.
Puedes hacerlo un poco más suave:
ffmpeg -i entrada.wav -af dynaudnorm=f=150:g=15 salida.wav
4. Hacer que la onda "llene" todo el espacio (similar a música comercial)
Una cadena bastante efectiva es:
ffmpeg -i entrada.wav -af "acompressor=threshold=-18dB:ratio=3:attack=20:release=250,dynaudnorm" salida.wav
O incluso añadir un limitador al final:
ffmpeg -i entrada.wav -af "acompressor=threshold=-18dB:ratio=3,dynaudnorm,alimiter=limit=-1dB" salida.wav
¿Cuál te recomiendo?
Solo subir el volumen sin modificar la dinámica: volume (tras medir con volumedetect).
Que se escuche más fuerte y uniforme: dynaudnorm.
Calidad tipo radio/podcast: loudnorm.
Que la forma de onda quede muy "rellena": acompressor + dynaudnorm + alimiter.
Si el audio es una grabación de voz, mi recomendación sería dynaudnorm, ya que suele ofrecer un resultado muy natural sin requerir una configuración compleja.
====== Sacar duración ======
Para sacar la duración sumada de los wavs de un directorio
for f in *.wav; do
ffmpeg -i "$f" 2>&1 | grep Duration | \
sed -E 's/.*Duration: ([0-9]+):([0-9]+):([0-9]+\.[0-9]+).*/\1*3600+\2*60+\3/'
done | paste -sd+ - | bc
Grabando duraciones individuales en fichero:
echo "nombre_fichero;duracion" > duraciones.csv
for f in *.wav; do
dur=$(ffmpeg -i "$f" 2>&1 | grep "Duration" | \
sed -E 's/.*Duration: ([0-9]+):([0-9]+):([0-9]+\.[0-9]+).*/\1 \2 \3/')
read h m s <<< "$dur"
segundos=$(awk "BEGIN {printf \"%.3f\", ($h*3600 + $m*60 + $s)}")
echo "$f;$segundos" >> duraciones.csv
done