Srt2vtt in Shell Script (Beta)
Publicado por Perfil removido (última atualização em 17/12/2018)
[ Hits: 1.820 ]
Este script converte legendas.srt para webvtt utilizando ffmpeg, um programa em linha de comando que é composto de uma coleção de software livre e bibliotecas de código aberto.
Para converter a legenda.srt você precisa informar a codificação (encode) da legenda.srt, por exemplo: ASCII text
Uma forma simples de descobrir qual é a codificação do arquivo é utilizando o comando file. Você também pode baixar o encode.txt ou copiar e colar a lista de codificações: https://trac.ffmpeg.org/attachment/ticket/2431/sub_charenc_parameters.txt
Renomeie o download acima para encode.txt. O arquivo encode.txt deve estar no seu diretorio $HOME.
#/usr/bin/env bash
# PATH
log_path=/tmp/srt2vtt.log # the output of ffmpeg
list_path=$(find $HOME -name enccode.txt) # ffmpeg sub charenc parameters (2006)
if [ -z $list_path ];then list_not_found=true ;else list_not_found=false ;fi
# COLORS
red="\033[1;31m"
green="\033[1;32m"
end="\033[0m"
srt=$2 # subtile.srt
check=$(file asd.srt | cut -d':' -f2 | tr -d [:blank:])
# verifies that ffmpeg is installed
if [[ ! -e $(which ffmpeg) ]];then echo -e "${red}ffmpeg isn't installed ${end}" ; exit 1 ;fi
_whitespaces(){
if [ -n "$srt" -a -e "$srt" ];then
file $srt
if [ $? -ne 0 ];then
echo -e "${red}\nError: whitespaces "
echo -e "Please run srt2vtt -r to Rename the subtitle${end}\n"
exit 1
fi
fi
}
_fileExist(){
if ! [ -e "$srt" ];then
echo -e "${red}\nError: no such file or directory${end}"
exit 1
fi
}
_HELP_(){
echo """
srt2vtt version 1.0
Usage: srt2vtt <option> <subtitle.srt>
-c ) Convert srt to vtt whitout verbose
-h ) show this Help message
-v ) enable Verbose mode and convert
-r ) Rename the subtitle (use in case of the sub has whitespaces)
-l ) shows the last sub log
by erickDarko 2018
"""
exit 0
}
_rename(){
if [[ ! -e $(which python3) ]];then echo -e "${red}python3 isn't installed ${end}" ; exit 1 ;fi
echo """
from os import listdir
ls = listdir()
for c,v in enumerate(ls):
if 'srt' in v:
print('mv',end=' ')
print('\"{}\" \"{}\"'.format(ls[c],v.replace(' ','_')))
print()
""" > rename.py
python3 rename.py > rename
chmod +x rename ; ./rename 2> /dev/null ; sleep 0.5s ; rm rename*
echo ; exit 0
}
_convert(){
if [ "$check" == "empty" ];then echo -e "${red}Error: empty file${end}"; exit 2 ;fi
_fileExist # verifies if the file exist
_whitespaces # verifies whitespaces
len=$(expr ${#srt} - 4) # length of the subtile without the extension ".srt"
vtt=$(echo $srt | cut -c-$len)
if [ -e $vtt.vtt ];then rm -iv $vtt.vtt ;fi # delete the subtitle if it already exists
encode=$(file $srt | cut -d":" -f2 | cut -d" " -f2) # get the file encode
if [ $list_not_found == false ];then
# verifies if the encode is on the $list_path
list=$(cat $list_path | grep "$encode")
if [ $1 == false ];then
for enc in $list;do
ffmpeg -fix_sub_duration -sub_charenc $enc -i $srt $vtt.vtt &> $log_path
done
else
for enc in $list;do
ffmpeg -fix_sub_duration -sub_charenc $enc -i $srt $vtt.vtt 0> $log_path
done
fi
if [ $? -ne 0 ];then
echo -ne "${red}Error: ${end}"
echo -e "${red}$(cat $log_path | tail -n1)${end}"
rm $vtt.vtt &> /dev/null
exit 2
fi
else
while true;do
echo "File information: $(file $srt)"
read -p "File encode: " encode
if [ $1 == false ];then
ffmpeg -fix_sub_duration -sub_charenc $encode -i $srt $vtt.vtt &> $log_path
else
ffmpeg -fix_sub_duration -sub_charenc $encode -i $srt $vtt.vtt 0> $log_path
fi
if [ $? -ne 0 ];then
echo -ne "${red}Error: ${end}"
echo -e "${red}$(cat $log_path | tail -n1)${end}"
rm $vtt.vtt &> /dev/null
exit 2
fi
break
done
fi
}
# srt2vtt parameters
case $1 in
-h) _HELP_ ;;
--help) __HELP__ ;;
-c) _convert false ;;
-v) _convert true ;;
-r) _rename ;;
-l) less $log_path ;;
*) echo -e "${red}Error: no option was given${end}" ; _HELP_ ;;
esac
if [ -e $vtt.vtt ];then
echo -e "\nENCODE: $encode"
l=$(wc -l $vtt.vtt | cut -d" " -f1) # lines in the subtitle
if [ $l -eq 0 ];then
echo -e "[ ${red}${l}${end} ]"
else
echo -e "[ ${green}${l}${end} ]"
rm -iv $srt # remove the original subtitle
fi
fi
Estatística dos MB's consumidos pela internet
Converter animes em .mp4 para .avi (e outros) com qualidade perfeita
Remover espaços em branco em nomes de arquivos
Método para verificar e instalar pacotes
Nenhum comentário foi encontrado.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
[Resolvido] Algo deu errado ao abrir seu perfil
Usando o VNSTAT para medir o seu consumo de internet
Habilitando clipboard manager no ambiente COSMIC
Problema com som no laptop (5)
Quando vocês pararam de testar distros? (11)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









