產生 00:00:20 到 10:10:00 之間的隨機時間

產生 00:00:20 到 10:10:00 之間的隨機時間

我想使用變數在 bash 腳本中產生稍微隨機的拍號。我有一個 11 小時長的視頻文件,我將使用 's -shortest 選項將我在大多數工作日下載的 50 分鐘 mp3 播客與視頻混合在一起ffmpeg(這會將視頻的長度修剪為最短的長度)較短的音頻)。因此,我希望每天在不晚於影片結束前 50 分鐘的隨機時間點將音訊插入影片中。

到目前為止我所想出的利用了dateshuf命令。使用shuf我產生一個介於 36305 和 72850 之間的隨機 5 位元字串,並將其輸入date如下:

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

(5 位數字字串在範圍內(以秒為單位),一方面是上午 10:10,另一方面是前一天午夜 - 上午 10 點是 36305 秒,午夜是我的腳本運行之前的 72805 秒) 。這似乎可以很好地產生所需的時間戳,但我懷疑還有其他可能更優雅和/或最佳的生成時間戳的方法。

有什麼建議麼?

澄清

我試圖產生的半隨機時間戳記是ffmpeg使用-ss開關提供的,並且必須採用 3 個數字對的形式,用冒號分隔並符合時間跟踪約定(出於與此查詢數字相關的實際目的)對聯的限制是第一個對聯是0-24,第二個對聯是0-60-不過就我的使用而言,如果第一對聯是10,那麼第一對聯應該是0-10,第二個對聯應該是0- 10,否則是0- 60,最後對聯 0-60)。該date實用程式的設計已經符合這些時間追蹤約束,這就是我date +%T首先考慮使用一些變體的原因。

我正在運行的命令ffmpeg類似於以下內容

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

我需要在後面插入一個半隨機值-ss,而date我提供的咒語可以做到這一點。因此,作為示例,在晚上 8 點左右(我的腳本大部分時間運行的時間)使用該咒語,命令ffmpeg將如下所示:

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

我在腳本中創建一個變數來儲存生成的半隨機值。所以我的腳本中有類似的東西

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

我的腳本大多數時候在晚上 8 點左右觸發,因此減去指定的秒數,一方面會得到接近前一個午夜的時間戳,另一方面會得到接近上午 10:10 的時間戳。因此,大約有 10 小時 10 分鐘的時間跨度,在此期間我可以半隨機地選擇一個開始時間,開始將音訊混合到影片中。

希望這個澄清有幫助。順便說一句,我比我提議的更喜歡弗雷迪的咒語,所以我可能會改用它。

答案1

我沒有得到你透過你的date命令得到的東西,所以我可能完全錯誤地了解你想要的東西。

若要使用 GNU 產生 00:00:20 到 10:10:00 之間的時間date,您可以執行下列操作:

開始時間:

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

結束時間(36580秒後):

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

介於兩者之間的東西:

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

相關內容