====== 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