bashスクリプトで変数を使用して少しランダムな拍子を生成したいと思います。私は11時間の長さのビデオファイルを持っています。このファイルは -shortestオプションを使用して、ビデオと一緒にほとんどの平日にダウンロードする50分のmp3ポッドキャストをミキシングするために使用しますffmpeg
(これにより、ビデオの長さは可能です短い長さに短くなります)。 )。だから毎日映像が終わる50分前まで、任意の時点で映像にオーディオを挿入したいと思います。
これまで私が思いついたのは、date
コマンドshuf
を活用しています。以下を使用して、36305から72850の間の任意の5桁の文字列を生成し、次のようにshuf
入力します。date
date --date="$(shuf -i 36305-72850 -n 1) sec ago" +%T
(5桁の文字列の範囲(秒単位)は午前10時10分、もう一方は前日の午前0時です。スクリプトが実行される前の午前10時は36305秒、深夜は72805秒です。)これは必要なタイムスタンプを生成します問題はないようですが、よりエレガントで最適なタイムスタンプを作成する別の方法があると思います。
どんな提案がありますか?
言う
私が生成したい準ランダムタイムスタンプはスイッチをffmpeg
使用して提供され、-ss
コロンで区切られた3つの数値ペアの形式でなければならず、時間追跡規則に準拠する必要があります(このクエリ番号に関連する実際の目的のため)。最初のカプラーは0〜24、2番目のカプラーは0〜60です。しかし、私が使用するには、最初のカップレットが10の場合、最初のカップレットは0〜10でなければならず、2番目のカップレットは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時に実行されるので、指定された秒数を減算すると、一方では前の午前0時に近く、他方では午前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'