Srt2vtt in Shell Script (Beta)
Publicado por Perfil removido (última atualização em 17/12/2018)
[ Hits: 1.527 ]
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
Instalando o Token Safenet 5110 em linux base debian
Compilação automatica do GCC-4.7.1 no Debian 32 bits em Bash
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Meus HDs não aparecem mais no boot da placa mãe (18)
Problema de Comunicação Entre Bridges após Configuração de Links no RB... (0)
Instalação de Drive - USB para HDMI Ubuntu (0)
Instalação do Ubuntu 22.04 LTS (6)
Linux Mint com GForce 630 e 2 monitores dos quais só um está na resolu... (6)