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]