web-dev-qa-db-fra.com

Comment convertir un répertoire entier avec ffmpeg?

Comment convertir un répertoire/dossier complet avec ffmpeg via une ligne de commande ou avec un script batch?

100
Eugene

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
114
Isaac

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
131
llogan

Et sous Windows:

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

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
23
yolk

Pour convertir avec des sous-répertoires, utilisez par exemple 

find . -exec ffmpeg -i {} {}.mp3 \;
12
user2707001

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.

7
Eibel

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.

4

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.

3
Nirav Mehta

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:

  1. l'extension à partir de laquelle vous voulez convertir
  2. la nouvelle extension à convertir

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.

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

Traiter par lots les fichiers flac en mp3 (sans danger pour les noms de fichier avec des espaces) en utilisant [1][2]

3
César

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"
3
shubhamr238

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é ????.

1
Mehrdad995

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

1
user151496

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""

0
telenachos

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.

0
stib