Comment convertir un répertoire entier avec ffmpeg?
Comment convertir un répertoire/dossier entier avec ffmpeg via une ligne de commande ou avec un script batch?
11 réponses
La réponse précédente ne créera que 1 fichier de sortie appelé.mov. Pour créer un fichier de sortie séparé pour chaque ancien film, essayez ceci.
for i in *.avi;
do name=`echo $i | cut -d'.' -f1`;
echo $name;
ffmpeg -i "$i" "${name}.mov";
done
Pour Linux et macOS cela peut être fait en une seule ligne, et vous n'avez pas besoin echo
, cut
, ou basename
comme indiqué dans les autres réponses Bash, car l'extension de paramètre traitera de l'extension de nom de fichier de sortie:
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
Pour Windows voir cette réponse par lxs.
Et sous Windows:
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
Un script bash d'une ligne serait facile à faire-remplacez *.avi
par votre type de fichier:
for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov ; done
Pour convertir avec des sous-répertoires, utilisez par exemple
find . -exec ffmpeg -i {} {}.mp3 \;
Si vous voulez une interface graphique pour traiter par lots avec ffmpegX, essayez Quick Batcher. Il est gratuit et prendra vos derniers paramètres ffmpegX pour convertir les fichiers que vous déposez dedans.
Notez que vous ne pouvez pas glisser-déposer des dossiers sur Quick Batcher. Donc, sélectionnez les fichiers, puis les mettre à travers Quick Batcher.
Pour tous ceux qui veulent convertir par lots n'importe quoi avec ffmpeg mais qui aimeraient avoir une interface Windows pratique, j'ai développé ce front-end:
Https://sourceforge.net/projects/ffmpeg-batch
Il ajoute à ffmpeg une interface de mode de fenêtre, des barres de progression et des informations sur le temps restant, des fonctionnalités que j'ai toujours manquées lors de l'utilisation de ffmpeg.
Si vous avez GNU parallèle vous pouvez convertir tous les .fichiers avi ci-dessous {[1] } à mp4 en parallèle, en utilisant tous sauf un de vos cœurs de processeur avec
find vid_dir -type f -name '*.avi' -not -empty -print0 |
parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4
Pour convertir de / vers différents formats, modifiez '*.avi'
ou .mp4
au besoin. GNU parallel est répertorié dans les dépôts de la plupart des distributions Linux dans un paquet qui est habituellement appelé parallel
.
Je sais que cela peut être redondant mais j'utilise ce script pour convertir des fichiers par lots.
old_extension=$1
new_extension=$2
for i in *."$old_extension";
do ffmpeg -i "$i" "${i%.*}.$new_extension";
done
Il faut 2 arguments pour le rendre plus flexible:
- l'extension à partir de laquelle vous voulez convertir
- la nouvelle extension que vous souhaitez convertir en
Je crée un alias pour cela mais vous pouvez aussi l'utiliser manuellement comme ceci:
sh batch_convert.sh mkv mp4
Cela convertirait tous les fichiers mkv
en fichiers mp4
.
Comme vous pouvez le voir un peu plus polyvalent. Aussi longtemps que ffmpeg
peut convertir Vous pouvez spécifier deux extensions.
Petit script php pour le faire:
#!/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' ) );
}