Se você está planejando expandir esse script - o que, a partir de sua pergunta sobre um banco de dados, você é -, eu recomendaria a alteração de parâmetros tanto quanto possível.
Também recomendamos o uso de ffmpegthumbnailer
para gerar as miniaturas, que devem ser um simples yum install ffmpegthumbnailer
/ apt-get install ffmpegthumbnailer
longe. Marque as opções - no meu script eu gerei uma miniatura do mesmo tamanho ( -s0
) como original, mas você pode não querer isso.
Este script de exemplo deve ajudá-lo a começar:
#!/bin/bash
# Convert files using ffmpeg
# USE AT YOUR OWN RISK!
# Parameters
OrDir="/tmp/video/" # Original directory
NewDir="/tmp/video/out/" # New directory
PicsDir=${NewDir}pictures/
ignore="m4v" # ignore single filetype being converted
convto="$ignore" # in case you want to convert to something else
thumbnailseek=5 # Seek % at which to generate thumbnail
# Change to original directory
# For each file:
# check appropriate (exists, not directory, not already same type)
# convert to $convto type media file (ffmpeg)
# generate thumbnail (ffmpegthumbnailer)
# (optional) remove original if new version smaller
cd "$OrDir"
for oldfile in *.mkv; do # indeed every file; globbing will eat up spaces properly
ext=${i##*.}
# ignore 1) non-existant files 2) directories 3) $ignore-extentioned files
if [[ ! -e "$oldfile" ]] || [[ -d "$oldfile" ]] || [[ "$ext" = "$ignore" ]]; then
continue
fi
filename=${oldfile%.*}
newfile="$NewDir$filename.$convto"
oFS=$(stat --printf="%s" $oldfile) # old file size
ffmpeg -y -loglevel quiet -i "$oldfile" -c:v libx264 -crf 23 -preset ultrafast -c:a aac -strict experimental -$
nFS=$(stat --printf="%s" $newfile) # new file size
ffmpegthumbnailer -s0 -i "$newfile" -t $thumbnailseek -o "$PicsDir$filename.jpg" &>/dev/null
if [ "$oFS" -gt "$nFS" ]; then
#rm -- "$OrDir$oldfile" # AT OWN RISK: uncomment to remove older file if smaller
fi
done
Não sou especialista, pois qualquer leitura cuidadosa do código acima será exibida. Eu misturei minhas próprias convenções de nomeação de variáveis com as do código original (minha intenção era manter alguma familiaridade); Eu poderia ter mais parâmetros; Eu codifiquei um número razoável de suposições no script (como OrDir
contendo apenas arquivos de vídeo, por exemplo); alguns testes condicionais poderiam ser simplificados; manuseio de nome de arquivo e diretório poderia ser feito uniforme.
Mas isso não é Revisão de código . Não deve haver nenhum erro gritante, e funciona localmente em alguns mkvs que eu tinha chutando apenas esperando por algo assim.
Se você pretende fazer muito mais com o bash scripting, vale a pena ler algumas armadilhas comuns , e se você tenha o tempo que o Guia de script avançado do Bash .
Para o 'banco de dados SQL', mais informações são necessárias para fornecer qualquer tipo de aviso. Que tipo de banco de dados? SQLite? Por que SQL em tudo, versus um simples arquivo simples (CSV, etc)? Quais detalhes?