Conversión de video en una carpeta usando el script de Python y la utilidad FFmpeg

Mucha gente sabe que existe un paquete de utilidades FFmpeg que se puede usar para comprimir y convertir archivos de video. Para convertir un archivo de un formato a otro, basta con especificar varias claves, la ruta al archivo de origen, la ruta al archivo de salida y hacerlo en la línea de comando. Si hay muchos archivos o están en subdirectorios, puede escribir un script. Mostraré un ejemplo de cómo se puede hacer esto en python.

Este ejemplo demuestra tales tecnologías.:

  • Usando la utilidad ffmpeg.exe para convertir al formato especificado.
  • Busca recursivamente archivos en un directorio con una extensión determinada.
  • Ejecutar una utilidad externa desde python usando subprocess.run con parámetros de paso.
  • Guardar información en un archivo de registro a medida que se ejecuta el script para un control posterior.
import os
import subprocess

FFMPEGDIR = 'd:\\Program Files\\ffmpeg\\bin\\'  # descargado de ffmpeg.org
BASEDIR = 'd:\\VIDEO\\' # Archivos de video

def process_file(srcfile : str):
    ''' Procesar el archivo fuente '''
    print(srcfile)
    dstfile = os.path.splitext(srcfile)[0] + '.mp4' # Extensión del archivo de resultados
    subprocess.run([FFMPEGDIR + 'ffmpeg.exe',
                    '-i',  srcfile,     # Archivo de vídeo de origen
                    '-map_metadata', '0:s:0', # Conservar metadatos
                    '-c:v', 'libx264',
                    '-s', '960x540',    # nueva resolución
                    '-crf', '27',       # Nivel de compresión de video. Superior: tasa de bits más pequeña
                    '-ab', '64K' ,      # Tasa de bits de audio
                    '-y',               # Reescribir si existe
                    dstfile])
    return dstfile

def process_dirs(d):
    ''' Procesar todos los archivos en directorio y subcarpetas '''
    logfile = open('result.txt', 'a')         # log
    for address, dirs, files in os.walk(d):
        for fname in files:
            if (os.path.splitext(fname)[1]).lower()=='.mov':
                dstfile = process_file(os.path.join(address,fname))
                logfile.write(f'{dstfile} {str(os.path.getsize(dstfile)/1024/1024)}:.1fMb\n')
    logfile.close()                           # log

if __name__ == '__main__':
    process_dirs(BASEDIR)




vert cada archivo se ve así:

ffmpeg.exe -i srcfile.mov -map_metadata 0:s:0 -c:v libx264 -s 960x540 -crf 27 -ab 64K -y dstfile.mp4

Deja un comentario

Tu dirección de correo electrónico no será publicada.