Comment convertir un répertoire/dossier complet avec ffmpeg via une ligne de commande ou avec un script batch?
La réponse précédente ne créera qu'un fichier de sortie appelé out.mov. Essayez de créer un fichier de sortie distinct pour chaque ancien film.
for i in *.avi;
do name=`echo $i | cut -d'.' -f1`;
echo $name;
ffmpeg -i "$i" "${name}.mov";
done
Pour Linux et macOS, vous pouvez utiliser une seule ligne en utilisant parametre expansion pour modifier l’extension du nom de fichier du fichier de sortie:
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
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 \;
Pour ceux qui veulent convertir par lots n'importe quoi avec ffmpeg mais qui souhaitent 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 je manquais toujours lorsque j'utilisais ffmpeg.
Si vous avez GNU parallel , vous pouvez convertir tous les fichiers .avi inférieurs à vid_dir
en mp4 en parallèle, en utilisant tous les cœurs du processeur sauf un
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, changez '*.avi'
ou .mp4
si nécessaire. GNU parallèle est répertorié dans la plupart des référentiels de distributions Linux dans un paquetage généralement appelé parallel
.
Si vous voulez une interface graphique pour traiter par lots avec ffmpegX, essayez Quick Batcher. C'est gratuit et vos derniers paramètres ffmpegX seront nécessaires pour convertir les fichiers que vous y déposerez.
Notez que vous ne pouvez pas glisser-déposer des dossiers sur Quick Batcher. Alors, sélectionnez les fichiers et passez-les ensuite dans Quick Batcher.
Je sais que cela peut être redondant, mais j'utilise ce script pour convertir par lots des fichiers.
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:
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 légèrement plus polyvalent. Tant que ffmpeg
peut le convertir, vous pouvez spécifier deux extensions quelconques.
Pour Windows:
Ici, je convertis tous les fichiers (.mp4) en fichiers (.mp3).
Ouvrez simplement cmd, allez dans le dossier souhaité et tapez la commande.
raccourci: (facultatif)
1. Allez au dossier où se trouvent vos fichiers (.mp4)
2. Appuyez sur les touches Maj, clic gauche et choisissez "Ouvrir la fenêtre PowerShell ici".
ou "Ouvrir la fenêtre d'invite de commande ici"
3. Tapez "cmd" [REMARQUE: ignorez cette étape si elle ouvre directement cmd au lieu de PowerShell]
4. Lancer la commande
for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"
Seul celui-ci a travaillé pour moi, les pls notent que vous devez créer le dossier "newfiles" manuellement où se trouve le fichier ffmpeg.exe.
Convertissez les fichiers . en .wav audio Code:
for %%a in ("*.*") do ffmpeg.exe -i "%%a" "newfiles\%%~na.wav"
pause
si vous voulez convertir tous les fichiers .mp3 en .wav, changez ("*.*")
en ("*.mp3")
.
L'auteur de ce script est:
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
espérons que cela a aidé ????.
les fenêtres:
@echo off
for /r %%d in (*.wav) do (
ffmpeg -i "%%~nd%%~xd" -codec:a libmp3lame -c:v copy -qscale:a 2 "%
%~nd.2.mp3"
)
il s'agit d'un débit binaire variable de qualité 2, vous pouvez le régler à 0 si vous le souhaitez, mais à moins que vous n'ayez un très bon système d'enceintes, cela ne vaut rien
Une autre solution simple qui n’a pas encore été suggérée serait d’utiliser xargs
:
ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
Un piège mineur est la dénomination peu commode des fichiers de sortie (par exemple input.avi.mp4
). Une solution possible pour cela pourrait être:
ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
"
Cela ressemble un peu au code de golf ici, mais comme presque toutes les réponses jusqu’à présent sont bash (sauf un seul cmd), voici un exemple. les fenêtres multiplate-forme commande qui utilise powershell (car génial):
ls *.avi|%{ ffmpeg -i $_ <ffmpeg options here> $_.name.replace($_.extension, ".mp4")}
Vous pouvez remplacer * .avi par tout ce qui correspond à votre métrage source.