Пакетное преобразование видео в папки и подпапки - PullRequest
1 голос
/ 01 августа 2010

У меня есть огромная коллекция видео, которые нужно конвертировать в mp4.Структура папок выглядит следующим образом:

Events
  Chicago
  Boston
  San Fran
  London Expo

Внутри каждого события содержатся все видео в формате avi или .mkv.Я хочу, чтобы они были преобразованы в то же имя файла.но с расширением mp4.

Мой вопрос заключается в том, как выполнить цикл по подпапкам папок, а также сохранить имена файлов, поскольку в данный момент в них есть пробелы..

sourcedir="$1"
destdir="$2"
cd "$sourcedir"
for i in `ls`; do
  HandBrakeCLI -i "$i" -o "$destdir/${i%.*}.mp4" --preset="AppleTV"
  echo $i
done

Филлипс Код:

cd "$sourcedir"
echo "Directory: $sourcedir"
destdir = sourcedir
for subdir in *
do
  if [[ -d "$subdir" ]]
  then
    for file in "$subdir"/*
    do
      HandBrakeCLI -i "$file" -o "${file%.*}.mp4" --preset=AppleTV
      echo "$file"
    done
  fi
done

Ответы [ 4 ]

2 голосов
/ 01 августа 2010

Используйте вложенный цикл и не используйте ls:

for subdir in "$sourcedir"/*
do
  if [[ -d "$subdir" ]]
  then
    for file in "$subdir"/*
    do
      HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
      echo "$file"
    done
  fi
done

Другой вариант - использовать find:

find "$sourcedir" -maxdepth 2 -mindepth 2 -type f -exec bash -c 'HandBrakeCLI -i "$0" -o "'"$destdir"'/${0%.*}.mp4" --preset=AppleTV' '{}' ';' -print

Оба решения будут работать с именами файловсодержащие пробелы или переводы строки.

1 голос
/ 02 марта 2012

изменить программу на iVI ссылка на iVi .

эта программа делает trcik даже лучше ручного тормоза ...

1 голос
/ 01 августа 2010

Либо используйте for i in "$sourcedir/*" (или, поскольку вы уже сделали cd, вы можете сделать for i in *).

или сделать find "$sourcedir" -type f | while read -r i (с этим переменная i будетвключите имя исходного каталога, так что вам придется удалить его, используя расширение скобки или basename).

0 голосов
/ 02 августа 2010

Баш 4

shopt -s globstar
destdir="/somewhere"
for file in **/*.mkv **/*.avi
do
  HandBrakeCLI -i "$file" -o "$destdir/${file%.*}.mp4" --preset=AppleTV
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...