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분, 다른 쪽은 전날 자정입니다. 스크립트가 실행되기 전 오전 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'