Generiere eine zufällige Zeit zwischen 00:00:20 und 10:10:00

Generiere eine zufällige Zeit zwischen 00:00:20 und 10:10:00

Ich möchte mithilfe einer Variablen in einem Bash-Skript eine einigermaßen zufällige Taktart erzeugen. Ich habe eine Videodatei, die 11 Stunden lang ist, und ich werde einen 50-minütigen MP3-Podcast, den ich an den meisten Wochentagen herunterlade, mit dem Video muxen, indem ich ffmpegdie Option -shortest verwende (die das Video auf die Länge des viel kürzeren Audios kürzt). Ich möchte also, dass das Audio jeden Tag an einer zufälligen Stelle, spätestens 50 Minuten vor dem Ende des Videos, in das Video eingefügt wird.

Was ich mir bisher ausgedacht habe, verwendet die Befehle dateund . Mit generiere ich eine zufällige 5-stellige Zeichenfolge zwischen 36305 und 72850 und gebe diese wie folgt ein:shufshufdate

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

(die 5-stellige Zeichenfolge liegt in dem Sekundenbereich zwischen 10:10 Uhr einerseits und der vorherigen Mitternacht andererseits – 10 Uhr sind 36305 Sekunden und Mitternacht sind 72805 Sekunden, bevor mein Skript ausgeführt wird.) Dies scheint gut zu funktionieren, um den benötigten Zeitstempel zu generieren, aber ich vermute, dass es alternative Möglichkeiten zum Generieren des Zeitstempels gibt, die eleganter und/oder optimaler sein könnten.

Irgendwelche Vorschläge?

Klärung

Der halbzufällige Zeitstempel, den ich zu generieren versuche, wird ffmpegüber den -ssSwitch eingespeist und muss die Form von 3 numerischen Paaren haben, die durch Doppelpunkte getrennt sind und den Konventionen zur Zeiterfassung entsprechen (aus praktischen Gründen im Zusammenhang mit dieser Abfrage sind die numerischen Beschränkungen für die Paarungen 0-24 für das erste Paar und 0-60 für die zweiten beiden – für meine Verwendung sollte das erste Paar jedoch 0-10 und das zweite 0-10 sein, wenn das erste Paar 10 ist, andernfalls 0-60 und das letzte Paar 0-60). Das dateDienstprogramm ist bereits in Übereinstimmung mit diesen Zeiterfassungsbeschränkungen konzipiert, weshalb ich daran dachte, date +%Tzuerst eine Variation davon zu verwenden.

Der ffmpegBefehl, den ich ausführe, sieht ungefähr so ​​aus:

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

Ich brauche einen halbzufälligen Wert, der danach eingefügt werden kann, -ssund der dateZauberspruch, den ich angeboten habe, tut genau das. Wenn ich also beispielsweise diesen Zauberspruch gegen 20 Uhr verwende (die Zeit, zu der mein Skript an den meisten Tagen ausgeführt wird), ffmpegwürde der Befehl ungefähr wie folgt aussehen:

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

Ich erstelle eine Variable in meinem Skript, um den generierten halbzufälligen Wert zu speichern. Also habe ich in meinem Skript so etwas wie

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

Mein Skript wird an den meisten Tagen gegen 20 Uhr ausgelöst. Wenn ich also die angegebene Anzahl von Sekunden abziehe, erhalte ich einerseits einen Zeitstempel nahe der vorherigen Mitternacht und andererseits eine Sekunde nahe 10:10 Uhr. Somit ergibt sich ein Zeitraum von ungefähr 10 Stunden und 10 Minuten, innerhalb dessen ich halb zufällig eine Startzeit auswählen kann, zu der ich mit dem Multiplexen des Audios in das Video beginnen kann.

Ich hoffe, diese Klarstellung hilft. Übrigens gefällt mir Freddys Beschwörungsformel besser als die, die ich vorgeschlagen habe, also werde ich diese wahrscheinlich stattdessen verwenden.

Antwort1

Ich habe mit Ihrem Befehl nicht das erreicht, was Sie erreicht haben date. Daher kann es sein, dass ich mit Ihren Wünschen völlig falsch liege.

Um mit GNU eine Zeit zwischen 00:00:20 und 10:10:00 zu generieren date, können Sie Folgendes tun:

Startzeit:

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

Endzeit (36580 Sekunden später):

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

etwas dazwischen:

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

verwandte Informationen