Srt2vtt in Shell Script (Beta)
Publicado por Perfil removido (última atualização em 17/12/2018)
[ Hits: 1.786 ]
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
MocPList - Enfileirador de áudio e locutor em voz sintetizada
Faciliando copiar DVD com 2 gravadoras pelo terminal
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Estou tentando ser legalista, mas tá complicado! (9)
espelhar monitores nao funciona (2)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)









