2015-12-30 4 views
0

J'essaie d'utiliser MP4Box pour concaténer plusieurs fichiers .mp4 dans un répertoire. La commande de base sous une forme simple ressemble à ceci:Le script shell MP4Box ne fonctionne pas

mp4box -cat 'Film.mp4' -cat 'Credits.mp4' -new Total.mp4 

J'ai fait ce script, mais il ne fonctionne pas:

#!/bin/bash 
files='*.mp4'; for i in $files; do MP4Box -cat "'"$i"'" -new Total.mp4; done 

Il donne juste:

Error appending '01_Introduction.mp4': Requested URL is not valid or cannot be found 
Error - 2 input names specified, please check usage 
Error - 2 input names specified, please check usage 
Error - 2 input names specified, please check usage 
Error - 2 input names specified, please check usage 
Error - 2 input names specified, please check usage 
Error - 2 input names specified, please check usage 
... etc. 

Qu'est-ce mal avec mon expression?

Je me suis installé avec:

#!/bin/bash 

rm Total.mp4; files='*.mp4'; for i in $files; do 
echo " -cat " "'"$i"'" >>input.txt; done 

file="input.txt"; name=$(cat "$file"); 

eval "MP4Box " $name " -new Total.mp4"; 
+0

Pourquoi vous essayez de bourrer des guillemets simples autour du nom de fichier étendu? Tu ne les veux pas. Utilisez simplement "" $ i "' comme nom de fichier. –

+0

Ajoutez 'set -x' avant votre boucle' for', et 'set + x' après' done'. (Débogage/trace de shell). Vous verrez que MP4box est en cours d'exécution pour chaque fichier dans '* .mp4' plutôt que d'ajouter une commande à exécuter en même temps. Bonne chance. – shellter

+0

J'ai utilisé les guillemets simples parce que les noms de fichiers ont des espaces. – verlager

Répondre

0

Je me suis installé avec:

#!/bin/bash 

rm Total.mp4; files='*.mp4'; for i in $files; do 
echo " -cat " "'"$i"'" >>input.txt; done 

file="input.txt"; name=$(cat "$file"); 

eval "MP4Box " $name " -new Total.mp4";