script multiple files ffmpeg batch-processing

multiple - ¿Cómo se convierte un directorio completo con ffmpeg?



ffmpeg multiple files (10)

¿Cómo se convierte un directorio / carpeta completo con ffmpeg a través de la línea de comandos o con un script por lotes?


La respuesta anterior solo creará 1 archivo de salida llamado out.mov. Para hacer un archivo de salida por separado para cada película antigua, intente esto.

for i in *.avi; do name=`echo $i | cut -d''.'' -f1`; echo $name; ffmpeg -i "$i" "${name}.mov"; done


Para Linux y macOS esto se puede hacer en una línea, y no necesita echo , cut o basename como se muestra en las otras respuestas de Bash, porque la expansión de parámetros se ocupará de la extensión del nombre de archivo de salida:

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

Para Windows, vea esta respuesta por lxs.


Para convertir con subdirectorios use, por ejemplo

find . -exec ffmpeg -i {} {}.mp3 /;


Para cualquiera que quiera convertir por lotes algo con ffmpeg pero quisiera tener una interfaz conveniente de Windows, desarrollé este front-end:

https://sourceforge.net/projects/ffmpeg-batch

Se agrega a ffmpeg una interfaz de moda de ventana, barras de progreso y la información restante de tiempo, características que siempre me perdí cuando usé ffmpeg.


Si desea una interfaz gráfica para procesar por lotes con ffmpegX, pruebe Quick Batcher . Es gratis y tomará tus últimas configuraciones de ffmpegX para convertir los archivos que ingresas en él.

Tenga en cuenta que no puede arrastrar y colocar carpetas en Quick Batcher. Así que seleccione los archivos y luego póngalos en Quick Batcher.


Si tiene GNU parallel , puede convertir todos los archivos .avi debajo de vid_dir a mp4 en paralelo, utilizando todos excepto uno de los núcleos de su CPU con

find vid_dir -type f -name ''*.avi'' -not -empty -print0 | parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

Para convertir desde / a diferentes formatos, cambie ''*.avi'' o .mp4 según sea necesario. El paralelo de GNU aparece en la mayoría de los repositorios de distribución de Linux en un paquete que generalmente se llama parallel .


Una secuencia de comandos bash de una línea sería fácil de hacer: reemplace *.avi con su tipo de archivo:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov ; done


Y en Windows:

FOR /F "tokens=*" %G IN (''dir /b *.flac'') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"


pequeña secuencia de comandos php para hacerlo:

#!/usr/bin/env php <?php declare(strict_types = 1); if ($argc !== 2) { fprintf ( STDERR, "usage: %s dir/n", $argv [0] ); die ( 1 ); } $dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR ); if (! is_readable ( $dir )) { fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" ); die(1); } if (! is_dir ( $dir )) { fprintf ( STDERR, "supplied path is not a directory!" ); die(1); } $files = glob ( $dir . DIRECTORY_SEPARATOR . ''*.avi'' ); foreach ( $files as $file ) { system ( "ffmpeg -i " . escapeshellarg ( $file ) . '' '' . escapeshellarg ( $file . ''.mp4'' ) ); }


for i in *.flac; do name=`echo "${i%.*}"`; echo $name; ffmpeg -i "${i}" -ab 320k -map_metadata 0 -id3v2_version 3 "${name}".mp3; done

Procesar por lotes archivos de flac en mp3 (seguro para nombres de archivos con espacios) usando [1] [2]