2013-08-14 4 views
0

J'essaye de faire un script de bash qui recherche tous les sous-dossiers sur le chemin donné pour les dossiers de .mov et les convertit avec ffmpeg et les sort dans un dossier de destination, en gardant le nom de plan. Je ne connais pas très bien les scripts et j'ai de la difficulté à trouver une solution à ce problème. Jusqu'à présent, j'ai essayé d'utiliser ls et j'ai trouvé la sortie des chemins de fichiers, mais je n'ai aucune idée de la façon de les rediriger vers ffmpeg de la bonne manière.Comment acheminer plusieurs fichiers vers ffmpeg?

Des indices?

Edit:

obtenu quelques sucess avec ceci:

#!/bin/bash 

echo "drop source folder: " 
read source 

echo "drop destination folder: " 
read des 

find "$source" -name '*.mov' -exec sh -c 'ffmpeg -i "$0" -vcodec prores -profile:v 0 -an "$des/${0%%.mov}.mov"' {} \; 
exit; 

mais, plus il semble sortie dans le dossier source demandant un écrasement. Comment puis-je configurer les paramètres correctement afin qu'il sorte dans le "dossier de destination" et conserve les noms de fichiers?

+0

Qu'est-ce que * vous * avez essayé? – devnull

+0

Vous pouvez créer un petit programme en C++/Java qui contient les références de fichiers dans un tableau et appelle ffmpeg en transmettant les références une par une dans une boucle. – AsG

+0

@devnull ce que j'ai à ce jour, d'une petite copie coller la recherche autour des problèmes similaires ... #/bin/bash echo « dossier source de baisse: » lecture source de echo « dossier de destination de baisse : " lire des trouver" $ source "-name '* .mov' -exec sh -c 'ffmpeg -i" $ 0 "-vcodec prores -profile: v 0 -an" $ {0 %%. Mov} .mov "'{} \; sortie; juste besoin de savoir comment définir la variable de destination à la ffmpeg pour vérifier si cela fonctionne. comment ferais-je ça? – Olung

Répondre

0

Vous pouvez commencer par ceci:

#!/bin/bash 

shopt -s extglob || { 
    echo "Unable to enable exglob." 
    exit 1 
} 

TARGETEXT='.avi' 
TARGETPREFIX='/path/to/somewhere/' ## Make sure it ends with /. 

while IFS= read -r FILE; do 
    BASE=${FILE##*/} 
    NOEXT=${BASE%.*} 
    TARGETFILEPATH=${TARGETPREFIX}${NOEXT}${TARGETEXT} 
    echo ffmpeg -i "$FILE" "$TARGETFILEPATH" ## Remove echo if it's already correct. 
done < <(exec find -type f -name '*.mov') ## You could also use -iname '*.sh' instead. 

Bien sûr, vous pouvez utiliser un répertoire personnalisé pour rechercher les fichiers:

find /path/to/directory -type f -name '*.mov' 
0

quelque chose comme cela devrait faire le travail:

for f in *.mov; do ffmpeg -i "$f" -vcodec copy -acodec copy "/desination/${f%.mov}.mp4"; done

+0

Merci, mais je ne pense pas que cela fonctionne quand tous les movs sont dans différents sous-plumes. Ive hade succès avec ce: #/bin/bash echo "dossier source de goutte:" lecture source de echo "dossier de destination de drop:" lire des trouver "source $" -nom ' * .mov '-exec sh -c' ffmpeg -i "$ 0" -vcodec prores -profile: v 0 -an "$ {0 %%. mov} .mov" '{} \; sortie; mais je ne sais pas où placer ma variable de destination pour que tous les movs convertis s'y rendent. ? – Olung

+0

Votre variable de destination est $ des. Vous devez modifier "$ {0 %%. Mov} .mov" en "$ des/$ {0 %%. Mov} .mov" – maxxxou

+0

j'ai essayé, mais dans mon installation de test ffmpeg demandez-moi si je veux écraser, ce qui est bizarre car il n'y a rien dans le dossier de destination que j'ai spécifié ... on dirait qu'il sort dans le dossier source. – Olung

Questions connexes