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

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

변수를 사용하여 bash 스크립트에서 다소 임의의 박자표를 생성하고 싶습니다. 11시간 길이의 비디오 파일이 있고 ffmpeg' -shortest 옵션을 사용하여 비디오와 함께 대부분의 주중에 다운로드하는 50분 길이의 mp3 팟캐스트를 다중화할 것입니다. 짧은 오디오). 그래서 매일 비디오가 끝나기 50분 전에 임의의 지점에서 오디오가 비디오에 삽입되기를 원합니다.

지금까지 내가 생각해낸 것은 dateshuf명령을 활용합니다. 을 사용하여 shuf36305에서 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입니다. 하지만 내 사용법의 경우 첫 번째 커플릿은 0-10이어야 하고 첫 번째 커플릿이 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'

관련 정보