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 :)