Uma maneira de capturar a saída de erro do ffmpeg / avconv em um script bash

3

Eu estou tentando converter em lote um monte de arquivos e estou fazendo uma listagem simples dos arquivos convertidos em um documento de texto para que eu possa parar o script e continuar a partir de aproximadamente eu comecei.

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

Lá você vai, a extração de legendas também está em andamento, mas eu estou tendo problemas em saber se o avconv falha ou não, existe alguma maneira?

Editar Feito com este script agora, aqui está link obrigado pela ajuda!

    
por eldamar 03.02.2013 / 15:10

1 resposta

3

A maioria dos comandos retorna um valor de retorno diferente de zero se ocorrer um erro. Você pode capturar esse código de retorno ou usá-lo com || e && .

Exemplos:

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!

[Editar]

Você também pode verificar $? no shell. exemplo:

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

True sempre é bem-sucedido. Se você executar o script de teste, ele retornará um 0.
False sempre falha. Se você executar o script de teste, ele retornará um valor diferente de 0. (no meu caso um 1, mas isso pode variar).

    
por 03.02.2013 / 15:19