バッシュスクリプト。秒移動

バッシュスクリプト。秒移動

Bashでこれを行う方法がわかりません。 bashスクリプトを作成する必要があります。 stdinには、次の形式の.srt字幕ファイルがあります。

num
HH:MM:SS,SSS --> HH:MM:SS,SSS
text line 1
text line 2
...

HH:MM:SS,SSS テキストタイトルの先頭と終了です。

スクリプトは秒を移動する必要があります。 (+または-のいずれか)

例:

$cat bmt.srt
5
00:01:02,323 --> 00:01:05,572
Hello, my frieds!
6
....

$./shifter.sh +3<mbt.srt
5
00:01:05,323 --> 00:01:08,572
Hello, my frieds!
6

まず、HH:MM:SSをすべてインポートして秒に変換する必要があります。 sedなしで誰でもこれを行うことができますか?

ベストアンサー1

字幕ファイルの長さが24時間を超えない限り、以下を使用できますdate

#!/usr/bin/env bash

set -o errexit -o noclobber -o nounset -o pipefail

date_offset="$1"

shift_date() {
    date --date="$1 $date_offset" +%T,%N | cut -c 1-12
}

while read -r line
do
    if [[ $line =~ ^[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9][0-9][0-9]\ --\>\ [0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9][0-9][0-9]$ ]]
    then
        read -r start_date separator end_date <<<"$line"
        new_start_date="$(shift_date "$start_date")"
        new_end_date="$(shift_date "$end_date")"
        printf "%s %s %s\n" "$new_start_date" "$separator" "$new_end_date"
        echo "New date"
    else
        printf "%s\n" "$line"
    fi
done

何らかの理由で10進数を使用する必要がありますが、次のように機能します。

$ ./shifter.sh "+3.0 seconds" < bmt.srt
5
00:01:05,323 --> 00:01:08,572
New date
Hello, my frieds!
6

おすすめ記事