Generar una hora aleatoria entre 00:00:20 y 10:10:00

Generar una hora aleatoria entre 00:00:20 y 10:10:00

Quiero generar un compás algo aleatorio en un script bash usando una variable. Tengo un archivo de video que dura 11 horas y estaré mezclando un podcast mp3 de 50 minutos que descargo casi todos los días de la semana con el video usando ffmpegla opción más corta (que recortará el video para que tenga la duración más corta). audio más corto). Por eso quiero que el audio se inserte en el vídeo todos los días en un punto aleatorio a más tardar 50 minutos antes de que finalice el vídeo.

Lo que se me ocurrió hasta ahora utiliza los comandos datey shuf. Usando shuf, genero una cadena aleatoria de 5 dígitos entre 36305 y 72850 y la alimento de datela siguiente manera:

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

(la cadena de 5 dígitos está dentro del rango, en segundos, entre las 10:10 a. m., por un lado, y la medianoche anterior, por el otro; las 10 a. m. son 36305 segundos y la medianoche son 72805 segundos antes de que se ejecute mi script) . Esto parece funcionar bien para generar la marca de tiempo necesaria, pero sospecho que existen formas alternativas de generar la marca de tiempo que pueden ser más elegantes y/u óptimas.

¿Alguna sugerencia?

Aclaración

La marca de tiempo semialeatoria que estoy tratando de generar es algo que se alimenta al ffmpegusar el -ssconmutador y debe tomar la forma de 3 pareados numéricos separados por dos puntos y que se ajusten a las convenciones de seguimiento de tiempo (para fines prácticos relacionados con esta consulta numérica). Las limitaciones en los pareados son 0-24 para el primer verso y 0-60 para los dos segundos, aunque para mi uso el primer verso debe ser 0-10 y el segundo 0-10 si el primer verso es 10; de lo contrario, 0-10. 60, y el pareado final 0-60). La dateutilidad ya está diseñada de acuerdo con estas limitaciones de seguimiento de tiempo, por lo que pensé en usar alguna variación primero date +%T.

El ffmpegcomando que estoy ejecutando es algo como el siguiente

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

Necesito un valor semialeatorio para insertar después -ssy el dateencantamiento que ofrecí hace ese tipo de cosas. Entonces, como ejemplo usando, alrededor de las 8 p.m. (el momento en que mi script se ejecuta la mayoría de los días), ese encantamiento, el ffmpegcomando se vería así:

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

Estoy creando una variable en mi script para almacenar el valor semialeatorio que se genera. Entonces tengo en mi script algo como

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

Mi secuencia de comandos se activa alrededor de las 8 p. m. la mayoría de los días, por lo que al restar la cantidad especificada de segundos se obtiene una marca de tiempo cercana a la medianoche anterior, por un lado, y un segundo cercano a las 10:10 a. m., por el otro. Por lo tanto, hay un lapso de aproximadamente 10 horas y 10 minutos desde el cual seleccionar de forma semialeatoria una hora de inicio en la que puedo comenzar a mezclar el audio en el video.

Espero que esta aclaración ayude. Por cierto, me gusta más el encantamiento de Freddy que el que propuse, así que probablemente lo usaré en su lugar.

Respuesta1

No obtuve lo que tú obtuviste con tu datecomando, por lo que podría estar completamente equivocado acerca de lo que quieres.

Para generar una hora entre 00:00:20 y 10:10:00 con GNU date, puedes hacer:

hora de inicio:

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

hora de finalización (36580 segundos después):

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

algo en el medio:

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

información relacionada