Comment convertir un répertoire / dossier entier avec ffmpeg via la ligne de commande ou avec un script batch?
ffmpeg
batch-processing
Eugène
la source
la source
i was unexpected at this time.
do name=`echo "${i%.*}"`;
fonctionnera sur les noms de fichiers contenant des points (et des espaces)..bat
Windows?Pour Linux et macOS, cela peut être fait en une seule ligne, en utilisant l' expansion des paramètres pour changer l'extension du nom de fichier du fichier de sortie:
la source
ffmpeg
vous ne pouvez pas entrer et sortir dans le même fichier. 2) Je ne sais pas si les commandes Bash fonctionnent sur Windows 10 de manière native. Peut-être devrais-je ajouter à la réponse qu'il est destiné aux systèmes qui peuvent utiliser nativement Bash tels que Linux et macOS. lxs a fourni une réponse Windows à cette question.for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
Et sous Windows:
la source
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
Un script bash d'une ligne serait facile à faire - remplacez-le
*.avi
par votre type de fichier:la source
-qscale
. Supprimez-le et utilisez les paramètres par défaut, ou utilisez-le à la-crf
place (la valeur par défaut est-crf 23
).basename
sous-shell backticked n'est pas cité. C'est exactement pourquoi bash a une extension shell à la place: for i in * .avi; do ffmpeg -i "$ i" -qscale 0 "$ (nom de base" $ i ".avi)". mov; donePour convertir avec des sous-répertoires, utilisez par exemple
la source
find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Pour les fenêtres:
Ici, je convertis tous les fichiers (.mp4) en fichiers (.mp3).
Ouvrez simplement cmd, accédez au dossier souhaité et tapez la commande.
Raccourci: (facultatif)
1. Accédez au dossier dans lequel vos fichiers (.mp4) sont présents
2. Appuyez sur Maj et faites un 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. Exécutez la commande
Si vous souhaitez mettre cela dans un fichier de commandes sous Windows 10, vous devez utiliser %% i.
la source
Pour tous ceux qui souhaitent convertir par lots quoi que ce soit avec ffmpeg mais souhaitent disposer d'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.
la source
Si vous avez GNU parallèle, vous pouvez convertir tous les fichiers .avi ci-dessous
vid_dir
en mp4 en parallèle, en utilisant tous sauf un de vos cœurs de processeur avecPour convertir de / vers différents formats, modifiez
'*.avi'
ou.mp4
au besoin. GNU parallel est répertorié dans la plupart des référentiels de distributions Linux dans un paquet qui est généralement appeléparallel
.la source
!
à la fin de l'un des one-liners bash?Je sais que cela peut être redondant, mais j'utilise ce script pour convertir des fichiers par lots.
Il faut 2 arguments pour le rendre plus flexible:
Je crée un alias pour cela mais vous pouvez également l'utiliser manuellement comme ceci:
Cela convertirait tous les
mkv
fichiers enmp4
fichiers.Comme vous pouvez le voir, il est légèrement plus polyvalent. Tant que vous
ffmpeg
pouvez le convertir, vous pouvez spécifier deux extensions.la source
Obtenir un peu comme code golf ici, mais comme presque toutes les réponses jusqu'à présent sont bash (à l'exception d'une seule cmd), voici une commande
Windowsmultiplateforme qui utilise PowerShell (parce que génial):Vous pouvez changer * .avi en ce qui correspond à votre métrage source.
la source
Bien sûr, maintenant PowerShell est venu, spécialement conçu pour rendre quelque chose exactement comme ça extrêmement facile.
Et, oui, PowerShell est également disponible sur d'autres systèmes d'exploitation autres que Windows, mais il est pré-installé sur Windows, donc cela devrait être utile à tout le monde.
Tout d'abord, vous voudrez lister tous les fichiers dans le répertoire actuel, nous allons donc commencer par:
Vous pouvez également l'utiliser
ls -Recurse
si vous souhaitez convertir de manière récursive tous les fichiers des sous-répertoires.Ensuite, nous filtrerons ceux-ci au seul type de fichier que nous voulons convertir - par exemple "avi".
Après cela, nous transmettrons ces informations à FFmpeg via un fichier
ForEach
.Pour l'entrée de FFmpeg, nous utiliserons le
FullName
- c'est le chemin d'accès complet au fichier. Et pour la sortie de FFmpeg, nous utiliserons leName
- mais en remplaçant le.avi
à la fin par.mp3
. Donc, cela ressemblera à quelque chose comme ceci:Alors, mettons tout cela ensemble et voici le résultat:
Cela convertira tous les fichiers ".avi" en fichiers ".mp3" via FFmpeg, remplacez simplement les trois éléments entre guillemets pour décider du type de conversion que vous souhaitez, et n'hésitez pas à ajouter d'autres arguments à FFmpeg dans le
ForEach
.Vous pouvez aller plus loin et ajouter
Remove-Item
à la fin pour supprimer automatiquement les anciens fichiers.Si ce
ffmpeg
n'est pas dans votre chemin, et qu'il se trouve en fait dans le répertoire dans lequel vous vous trouvez actuellement, écrivez-./ffmpeg
y au lieu de simplementffmpeg
.J'espère que cela aide n'importe qui.
la source
.ps1
fichier, pas dans un.bat
fichier. Vous devrez vous exécuter enSet-ExecutionPolicy RemoteSigned
tant qu'administrateur si vous n'avez jamais exécuté de script PS auparavant.Traitement par lots des
flac
fichiers dansmp3
(sans danger pour les noms de fichiers avec des espaces) en utilisant [1] [2]la source
les fenêtres:
il s'agit d'un débit binaire variable de qualité 2, vous pouvez le régler sur 0 si vous le souhaitez mais à moins d'avoir un très bon système d'enceintes, cela ne vaut rien imo
la source
Si vous voulez une interface graphique pour traiter par lots avec ffmpegX, essayez Quick Batcher . C'est gratuit et prendra vos derniers paramètres ffmpegX pour convertir les fichiers que vous y déposez.
Notez que vous ne pouvez pas faire glisser les dossiers sur Quick Batcher. Sélectionnez donc les fichiers, puis placez-les dans Quick Batcher.
la source
Seul celui-ci a fonctionné pour moi, veuillez noter que vous devez créer manuellement le dossier "newfiles" où se trouve le fichier ffmpeg.exe.
Convertissez . fichiers au code audio .wav:
c'est-à-dire que 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é 🙏.
la source
Cela créera une vidéo mp4 à partir de tous les fichiers jpg du répertoire actuel.
la source
Et pour Windows, cela ne fonctionne pas
même si je les double
%
.Je suggérerais même:
aussi:
la source
C'est ce que j'utilise pour convertir par lots avi en 1280x mp4
Fonctionne bien comme un fichier cmd, exécutez-le, la boucle trouve tous les fichiers avi dans ce dossier.
appelle MY (changez pour le vôtre) ffmpeg, transmet le nom d'entrée, les paramètres sont pour le redimensionnement avec accentuation. Je n'ai pas besoin de CRF et de "
-b:v 1024k
" ...Le fichier de sortie est le fichier d'entrée moins l'extension, avec mp4 comme nouvel ext.
la source
J'utilise ce one-liner sous Linux pour convertir des fichiers (généralement H265) en quelque chose que je peux jouer sur Kodi sans problèmes:
Cela convertit en un fichier temporaire, puis remplace l'original afin que les noms restent les mêmes après la conversion.
la source
Aussi si vous voulez la même conversion dans les sous-dossiers. voici le code récursif.
la source
petit script php pour le faire:
la source
escapeshellarg()
, et fonctionne à la fois sur Windows et Linux. Je suis d'accord que c'est un cas de pointe.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 le nom maladroit des fichiers de sortie (par exemple
input.avi.mp4
). Une solution de contournement possible pour cela pourrait être:ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
"la source
ls
parprintf '%s\n'
ici.