3

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

#! /bin/sh
source_dir="/home/eldamar/video"

find $source_dir -type f -regex ".*/.*\.\(mov\|mpg\|mkv\|avi\|m2v\|wmv\|flv\|m2ts\|vob\)" | {
while read file
  do
  ext=${file##*.}
  filename=${file##*/}
  basename=${filename%.*}
  dirname=${file%/*}
  touch converted.txt

  if grep -Fxq "$filename" converted.txt
  then
    echo "$(tput setaf 2)File "$filename" is allready converted, ignoring it :D$(tput setaf 7)"
  else
    # Extract subtitles for mkv files
    echo $ext
    if [ "$ext"=="mkv" ]; then
      # input.srt <- default subtitle
      # input.lang.srt <- other languages
      $sublang=""
      mkvinfo=$(mkvinfo $file | grep subtitles -B3 -A3)

      # Replace existing .srt
      # rm $dirname/$basename.srt

      # Extract subtitle from mkv
      # mkvextract tracks input.mkv -c ISO8859-1 3:$dirname/$basename.$sublang.srt
    fi

    avconv -y -i $file -map 0 -map -0:s -vcodec libx264 -acodec libfaac $dirname/$basename.mp4

    # Store the filename in list
    echo $filename >> converted.txt
  fi
  done;
}

Вот, пожалуйста, извлечение субтитров также продолжается, но у меня возникают проблемы с определением, не работает avconv или нет, есть ли способ?

Редактировать Что-то сделано с этим скриптом сейчас, вот он http://pastebin.com/trMDRaq5 спасибо за помощь!

1 ответ1

3

Большинство команд возвращают ненулевое возвращаемое значение, если произошла ошибка. Вы можете либо захватить этот код возврата, либо воздействовать на него с помощью || и && .

Примеры:

avconv -y -i file1 ; echo command finished

avconv -y -i file1 && echo command finished successfully.

avconv -y -i file1 || echo command finished but indicated failure!

[Редактировать]

Вы также можете проверить $? в оболочке. пример:

#!/bin/sh
/usr/bin/true
echo $?
/usr/bin/false
echo $?

Правда всегда удается. Если вы запустите тестовый скрипт, он вернет 0.
Ложь всегда терпит неудачу. Если вы запустите тестовый скрипт, он вернет ненулевое значение. (в моем случае 1, но это может варьироваться).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .