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?

85
demandé sur Eugene 2011-04-26 04:19:16

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
98
répondu Isaac 2017-04-06 16:06:15

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.

104
répondu LordNeckbeard 2017-10-31 18:12:14

Et sous Windows:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
46
répondu lxs 2014-06-17 21:34:17

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
18
répondu yolk 2018-05-08 22:59:14

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

find . -exec ffmpeg -i {} {}.mp3 \;
11
répondu user2707001 2016-12-12 16:59:38

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.

3
répondu Nirav Mehta 2014-04-05 08:58:23
for i in *.flac;
  do name=`echo "${i%.*}"`;
  echo $name;
  ffmpeg -i "${i}" -ab 320k -map_metadata 0 -id3v2_version 3 "${name}".mp3;
done

Traitement par lots flac fichiers dans mp3 (coffre-fort pour les noms de fichiers avec des espaces) en utilisant [1] [2]

3
répondu César 2017-05-23 12:10:29

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.

3
répondu Eibel 2018-04-25 09:34:47

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.

3
répondu Sebastian Scheurer 2018-05-10 09:37:25

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:

  1. l'extension à partir de laquelle vous voulez convertir
  2. 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.

2
répondu Alexander Luna 2018-09-15 20:55:09

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' ) );
}
-3
répondu hanshenrik 2017-11-07 13:47:39