2013-08-14 3 views
0

Я пытаюсь создать скрипт bash, который ищет все подпапки по заданному пути для файлов .mov и преобразует их в ffmpeg и выводит их в папку назначения, сохраняя имя клипа.Как подключить несколько файлов к ffmpeg?

Я очень новичок в написании сценариев, и мне сложно узнать, как это решить.

До сих пор я пытался использовать ls и находить для вывода пути к файлам, но не знаю, как правильно это передать ffmpeg.

Любые подсказки?

Edit:

получил некоторый успех на с этим:

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

но, то, кажется, выход в исходной папку с просьбой для перезаписи. Как правильно настроить параметры, чтобы они выходили в «папку назначения» и сохраняли имена файлов?

+0

Что вы * попробовали? – devnull

+0

Вы можете создать небольшую программу на C++/Java, которая содержит ссылки на файлы в массиве и вызывает ffmpeg, а затем передавая ссылки по очереди в цикле. – AsG

+0

@devnull это то, что я до сих пор, от маленькой копии пасты поиск вокруг подобных проблем ... #/бен/Баш эха «исходная папки падения:» источника чтения эха «Папка назначения падения : " read des найти" $ source "-name '* .mov' -exec sh -c 'ffmpeg -i" $ 0 "-vcodec proores -profile: v 0 -an" $ {0 %%. Mov} .mov "{} \; выход; просто нужно знать, как установить целевую переменную в ffmpeg, чтобы проверить, работает ли она. как бы я это сделал? – Olung

ответ

0

Вы могли бы начать с этого:

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

Конечно, вы можете использовать пользовательский каталог для поиска файлов:

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

что-то, как это должно сделать работу:

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

+0

Спасибо, но я не думаю, что это работает, когда все movs находятся в разных подпапках. Ive мастерил успех с этим: #/бен/Баш эха «Источник падения папка:» источника чтения эха «Папка назначения падения:» чтения де находки «$ источник» -name ' * .mov '-exec sh -c' ffmpeg -i "$ 0" -vcodec proores -profile: v 0 -an "$ {0 %%. mov} .mov" '{} \; выход; , но я не знаю, где разместить переменную адресата, чтобы туда переходили все конвертированные movs. ? – Olung

+0

Ваша целевая переменная $ des. Вы должны изменить "$ {0 %%. Mov} .mov" to "$ des/$ {0 %%. Mov} .mov" – maxxxou

+0

Я пробовал это, но в моей тестовой настройке ffmpeg спросит меня, хочу ли я перезаписать, что странно, потому что theres ничего в папке назначения, которую я указал ... похоже, что она выводит исходную папку. – Olung

Смежные вопросы