BASH não é tão ruim para esse problema. Você só precisa usar o comando date
muito poderoso, mas subutilizado.
for i in {1..10}; do
hrmin=$(date -u -d@$(($i * 10 * 60)) +"%H:%M")
outfile=${hrmin/:/-}.mp4
ffmpeg -i video.mp4 -ss ${hrmin}:00 -t 00:10:00 -c copy ${outfile}
done
date
comando explicado
date
com -d
flags permite que você defina qual data que deseja exibir (em vez da data e hora atuais, que é o padrão). Neste caso, estou configurando-o para uma hora do UNIX, prefixando o símbolo @
antes de um inteiro. O inteiro neste caso é o tempo em incrementos de dez minutos (calculado pela calculadora interna BASH: $((...))
).
O símbolo +
informa ao date
que você gostaria de especificar um formato para exibir os resultados. No nosso caso, nos preocupamos apenas com a hora ( %H
) e os minutos ( %M
).
E, finalmente, o -u
é exibido como hora UTC em vez de local. Isso é importante neste caso porque especificamos a hora como UTC quando fornecemos o horário do UNIX (a hora do UNIX é sempre como UTC). Os números provavelmente não começariam de 0 se você não especificasse -u
.
Substituição de variável BASH explicada
O comando date
nos deu exatamente o que precisávamos. Dois pontos em um nome de arquivo podem ser problemáticos / não padronizados. Então, nós substituímos o ':' por um '-'. Isso pode ser feito pelo comando sed
ou cut
ou tr
, mas como essa é uma tarefa tão simples, por que gerar um novo subshell quando o BASH pode fazer isso?
Aqui usamos a simples substituição de expressão do BASH. Para fazer isso, a variável deve estar contida nas chaves ( ${hrmin}
) e, em seguida, usar a notação de barra normal. A primeira string após a primeira barra é o padrão de pesquisa. A segunda string após a segunda barra é a substituição.
A substituição de variáveis BASH e muito mais pode ser encontrada no link .