Questão Script para aparar com ffmpeg


Estou gravando transmissões de rádio via DVB-C e gnutv. Para cortar as gravações eu uso o ffmpeg.

A sintaxe demora muito tempo para entrar no Terminal. Então, estou trabalhando em um script para automatizar isso. Oi é:

#!/bin/bash
#Getting the input file:
read -e -p "Enter the absolute path for the .mpg-file: " PATH
# Start time of trimming:
read -p "Where should the trimming start? (Please enter in this format hh:mm:ss): " START
# End time of trimming:
read -p "When should the trimming end? (Please enter in this format hh:mm:ss): " END
# Informations about the song:
read -p "What song is it? " TITLE
read -p "Who sang it? " ARTIST
read -p "Which album?" ALBUM
# Determine the duration of trimming (given in seconds).
START2=$(echo $START | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
END2=$(echo $END | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
DURATION=$(expr $END2 - $START2)
ffmpeg -ss $ANFANG -i $PATH -t $DURATION -acodec copy -vcodec copy -metadata title=$TITLE -metadata author=$ARTIST $TITLE' · '$ARTIST'.mpg'

Quando eu corro este script para "St. Elmos Fire" por "John Parr", recebo:

Unable to find a suitable output format for 'Elmo's'

Eu acho que é por causa dos espaços em branco em $ TITLE e $ ARTISTA. Eu já tentei \ e '', bem como a opção -e para leitura. Mas produz uma mensagem de erro semelhante. O que estou fazendo de errado?

Atenciosamente um obrigado antecipadamente, Markus


1
2018-01-20 10:13


origem




Respostas:


Primeiro, e mais importante, não use nomes de variáveis ​​maiúsculas. Você corre o risco de substituir variáveis ​​de ambiente e variáveis ​​de shell especiais e, nesse caso, você fez exatamente isso sobrescrevendo PATH variável.

Segundo. As citações são muito importantes no script de shell; citando expansões de variáveis ​​evita que o resultado seja submetido a expansão de nome de caminho e divisão de palavras.

Por exemplo, se var="St. Elmo's Fire.mpg", então $var vai se tornar as três palavras St., Elmo's e Fire.mpg, enquanto "$var" vai se tornar a única palavra St. Elmo's Fire.mpg. Então sempre cite expansões variáveis. "$var", não $var.

Algo como isso deveria ser mais correto:

#!/bin/bash
read -ep "Enter path for the .mpg-file: " file
IFS=: read -rp "Where should the trimming start? (HH:MM:SS): " shour smin ssec
IFS=: read -rp "When should the trimming end? (HH:MM:SS): " ehour emin esec
read -rp "What song is it? " title
read -rp "Who sang it? " artist
read -rp "Which album?" album

start=$(( shour*3600 + smin*60 + ssec ))
end=$(( ehour*3600 + emin*60 + esec ))
duration=$(( end - start ))

ffmpeg -i "$file" -t "$duration" -acodec copy -vcodec copy -metadata "title=$title" \
       -metadata "author=$artist" "$title · $artist.mpg"

Seu comando ffmpeg tinha -ss "$ANFANG", mas ANFANG nunca foi definido em seu script, então eu omiti isso.


2
2018-01-20 10:36



Muito obrigado. Isso funciona perfeitamente agora. O roteiro original é alemão. Eu perdi para substituir "ANFANG" = começo. Eu acho, é também por isso que o PATH não foi um problema, porque no meu roteiro alemão era o PFAD. - Markus