00:00:20에서 10:10:00 사이의 임의 시간을 생성합니다.

00:00:20에서 10:10:00 사이의 임의 시간을 생성합니다.

bash 스크립트에서 변수를 사용하여 약간 임의의 박자표를 생성하고 싶습니다. 저는 11시간 길이의 비디오 파일을 가지고 있는데, 이 파일은 -shortest 옵션을 사용하여 비디오와 함께 대부분의 주중에 다운로드하는 50분짜리 mp3 팟캐스트를 믹싱하는 데 사용할 것입니다 ffmpeg(이렇게 하면 비디오 길이가 가능한 가장 짧은 길이로 줄어듭니다). ). 그래서 매일 영상이 끝나기 50분 전까지 임의의 시점에 영상에 오디오를 삽입하고 싶습니다.

지금까지 내가 생각해낸 것은 dateshuf명령을 활용합니다. 다음을 사용하여 36305에서 72850 사이의 임의의 5자리 문자열을 생성하고 다음과 같이 shuf입력합니다 .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

back 에 반무작위 값을 삽입해야 하는데 제가 제공한 주문이 그렇게 합니다 -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'

관련 정보