Srt2vtt in Shell Script (Beta)
Publicado por Perfil removido (última atualização em 17/12/2018)
[ Hits: 1.809 ]
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
Alterar o papel de parede aleatoriamente
Algoritmo Fisher-Yates shuffle
Bomba.sh - Estouro de memória RAM com Menu
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
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
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (4)
Conky, alerta de temperatura alta (11)









