2015-12-30 2 views
0

Я пытаюсь использовать MP4Box для конкатенации нескольких файлов .mp4 в каталог. Основная команда в простой форме выглядит следующим образом:Сценарий оболочки MP4Box не работает

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

Я сделал этот сценарий, но он не работает:

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

Это просто дает:

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. 

Что такое неправильно с моим выражением?

я поселилась с:

#!/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

Почему вы пытаетесь засунуть одиночные кавычки вокруг имени расширенного файла? Вы не хотите их. Просто используйте '' $ i "' как имя файла. –

+0

добавьте 'set -x' перед вашим циклом' for' и 'set + x' после' done'. (отладка/трассировка оболочки). Вы увидите, что MP4box выполняется для каждого файла в '* .mp4', а не для выполнения одной команды для выполнения в одно и то же время. Удачи. – shellter

+0

Я использовал одинарные кавычки, потому что имена файлов имеют пробелы. – verlager

ответ

0

Я поселилась с:

#!/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"; 
Смежные вопросы