Eliminar el fondo de un vídeo

Hoy me ha llegado otro reto que he terminado resolviendo con IA :)

Se trata de un vídeo en el que aparece una persona y detrás una fea y arrugada sábana blanca que en el vídeo se ve amarillenta. El pedido ha sido eliminar el fondo.

Las opciones iniciales eran hacerlo con kdenlive o con blender y muchas horas de marcar puntitos para cada uno de los frames. El vídeo en cuestión tiene un total de 7933 frames y como que no…

He empezado a buscar opciones y he encontrado clipdrop (cerrado aunque tiene opción de API) y he decidido seguir buscando. En la búsqueda he encontrado backgroundremover interesante pero con resultados deplorables y finalmente rembg (con mejores resultados pero enfocado a imágenes).

Así que de nuevo la solución ha sido crear un script. Esta vez me he decantado por bash.

#!/bin/bash

# Fix video's FPS
echo "Converting video to 30 FPS..."
ffmpeg -i video.mp4 -r 30 -c:v libx264 -crf 18 -preset fast -c:a copy video_30.mp4

# Crea temp directories
#mkdir -p original_images
#mkdir -p processed_images

# Generate one image for each frame and save to original_images directory
echo "Extracting frames as images..."
ffmpeg -i video_30.mp4 -vf "fps=30" original_images/frame_%04d.png

# Delete the background of each image of original_images to processed_images
echo "Removing backgrounds from images..."
for img in original_images/frame_*.png; do
    output_name="processed_images/$(basename "$img")"
    rembg i "$img" "$output_name"
done

# Join all the images from processed_images to a video and use audio from video_30.mp4
echo "Combining processed images into a video with original audio..."
#ffmpeg -r 30 -i processed_images/frame_%04d.png -i video_30.mp4 -c:v libx264 -crf 18 -preset fast -c:a copy -map 0:v:0 -map 1:a:0 output.mp4
ffmpeg -r 30 -i processed_images/frame_%04d.png -i video_30.mp4 -c:v qtrle -pix_fmt rgba -c:a copy -map 0:v:0 -map 1:a:0 output.mov

rm -R original_images
rm -R processed_images
echo "Process completed! The final video is saved as output.mp4."

Voy a contar un poco algunas cosas a tener en cuenta.

– El vídeo tenía unos FPS (frames por segundo) “raros”, así que lo he pasado todo a 30fps
– Aunque la documentación de instalar rembg cuenta que hay la opción de usar GPU, me he peleado con ello y nada, usa la CPU y va un poco mas lento
– En el script se puede ver como hay una línea comentada para generar un fichero .mp4. Los ficheros mp4 no soportan fondo transparente, así que lo he convertido a mov que si lo permiten, así posteriormente voy a poder poner el fondo del color o con la imagen que desee.

Gracias Fabienne por el reto :)

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.