3 votes

FFmpeg script pour convertir récursivement l'audio DTS en AC3

J'ai des vidéos avec de l'audio dts que je peux convertir en ac3 séparément, mais j'ai besoin de convertir un tas de vidéos par lot, mais je n'arrive pas à trouver comment.

C'est mon ffmpeg de travail pour les fichiers séparés :

for f in *.mkv; 
do 
    ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/${f%.mkv}".mkv;
done

Toutes les vidéos sont situées dans des dossiers séparés sous mon dossier principal "media". Certains dossiers contiennent des espaces. Dans le script de travail, le fichier est traité dans un répertoire temporaire séparé.

J'ai besoin d'aide pour :

  • Pour que ffmpeg convertisse tous les mkvs de manière récursive.

  • pour que ffmmpeg traite les mkvs convertis séparés dans mon répertoire temporaire.

Et la prochaine étape si quelqu'un a des idées :

  • Utilisez les vidéos traitées dans le répertoire temporaire pour remplacer les fichiers originaux non convertis.

4voto

Stewart Points 1385

Pour le rendre récursif, vous pouvez soit utiliser find ou activer le globstar option bash :

  1. find -exec :

    find . -name '*.mkv' -exec ffmpeg -i {} -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k /srv/dev-disk-by-label-hel/temp/{} \;

    El {} à l'intérieur de la -exec sera converti en nom de fichier courant. Je ne me suis pas préoccupé de votre ${f%.mkv}".mkv; puisque celui-ci est identique au nom du fichier d'entrée, vous supprimez un .mkv et ensuite l'ajouter, donc j'ai supposé que c'était une erreur.

  2. globstar . Cette option permet ** Récupérer dans 0 ou plusieurs sous-répertoires.

    shopt -s globstar
    for f in **/*.mkv; 
    do 
        fname="${f##*/}"
        ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/"$fname";
    done

    C'est celui que vous pouvez le plus facilement faire recopier les fichiers à l'original. Tant que ça ne vous dérange pas d'écraser les originaux que vous pouvez faire :

    shopt -s globstar
    for f in **/*.mkv; 
    do 
        fname="${f##*/}"
        ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/$fname" &&
        mv "/srv/dev-disk-by-label-hel/temp/$fname" "$f"
    done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X