Gere um horário aleatório entre 00:00:20 e 10:10:00

Gere um horário aleatório entre 00:00:20 e 10:10:00

Quero gerar uma assinatura de compasso um tanto aleatória em um script bash usando uma variável. Eu tenho um arquivo de vídeo com 11 horas de duração e estarei mixando um podcast mp3 de 50 minutos que baixo na maioria dos dias da semana com o vídeo usando a ffmpegopção -shortest (que cortará o vídeo para ter a duração do muito áudio mais curto). Então, quero que o áudio seja inserido no vídeo todos os dias em um ponto aleatório, no máximo 50 minutos antes do final do vídeo.

O que descobri até agora utiliza os comandos datee shuf. Usando shufeu gero uma string aleatória de 5 dígitos entre 36305 e 72850 e a alimento da dateseguinte maneira:

date --date="$(shuf -i 36305-72850 -n 1) sec ago" +%T

(a sequência de 5 dígitos está dentro do intervalo, em segundos, entre 10h10, por um lado, e a meia-noite anterior, por outro - 10h sendo 36.305 segundos e meia-noite sendo 72.805 segundos antes da execução do meu script) . Isso parece funcionar bem para gerar o carimbo de data/hora necessário, mas suspeito que existam maneiras alternativas de gerar o carimbo de data/hora que podem ser mais elegantes e/ou ideais.

Alguma sugestão?

Esclarecimento

O carimbo de data / hora semi-aleatório que estou tentando gerar é algo que é alimentado ffmpegpelo -ssswitch e deve assumir a forma de 3 dísticos numéricos separados por dois pontos e em conformidade com as convenções de controle de tempo (para fins práticos relacionados a esta consulta numérica as limitações nos dísticos são 0-24 para o primeiro dístico e 0-60 para os dois segundos - embora para meu uso o primeiro dístico deva ser 0-10 e o segundo 0-10 se o primeiro dístico for 10, caso contrário 0- 60, e o dístico final 0-60). O dateutilitário já foi projetado em conformidade com essas restrições de controle de tempo, e é por isso que pensei em usar algumas variações date +%Tprimeiro.

O ffmpegcomando que estou executando é algo como o seguinte

ffmpeg -ss 02:54:32 -i 11-hr_video.mp4 -i todays_50-min_audio.mp3 -codec copy -shortest muxed_video-audio.mp4

Preciso de um valor semi-aleatório para inserir depois -sse o dateencantamento que ofereci faz esse tipo de coisa. Então, como exemplo, por volta das 20h (horário em que meu script é executado na maioria dos dias), esse encantamento, o ffmpegcomando seria parecido com o seguinte:

ffmpeg -ss $(date --date="$(shuf -i 36305-72850 -n 1) sec ago" +%T) -i 11-hr_video.mp4 -i todays_50-min_audio.mp3 -codec copy -shortest muxed_video-audio.mp4

Estou criando uma variável no meu script para armazenar o valor semi-aleatório que está sendo gerado. Então eu tenho no meu script algo como

starttime=$(date --date="$(shuf -i 36305-72850 -n 1) sec ago" +%T)

Meu script é acionado por volta das 20h na maioria dos dias, portanto, subtrair o número especificado de segundos obtém um carimbo de data/hora próximo à meia-noite anterior, por um lado, e um segundo próximo às 10h10, por outro. Assim, um intervalo de aproximadamente 10 horas e 10 minutos para selecionar semi-aleatoriamente um horário de início onde posso começar a mixar o áudio no vídeo.

Espero que este esclarecimento ajude. A propósito, gosto mais do encantamento de Freddy do que daquele que propus, então provavelmente irei usá-lo.

Responder1

Não entendi o que você conseguiu com seu datecomando, então posso estar completamente errado sobre o que você deseja.

Para gerar um horário entre 00:00:20 e 10:10:00 com GNU date, você pode fazer:

hora de início:

$ date --date "1970-01-01 00:00:20" '+%T'
00:00:20

hora de término (36.580 segundos depois):

$ date --date "1970-01-01 00:00:20 36580 sec" '+%T'
10:10:00

algo intermediário:

date --date "1970-01-01 00:00:20 $(shuf -n1 -i0-36580) sec" '+%T'

informação relacionada