Audacityのラベルを書きだしたファイルをapplication/json+chapters形式のJSONファイルに変換するPythonスクリプトを作成してください。
以下は、Audacityのラベルを書き出したファイルをcsv
形式で保存し、そのファイルを読み込んでapplication/json+chapters
形式のJSONファイルに変換するPythonスクリプトの例です。
import csv
import json
# csvファイルからラベルを読み込む
def read_labels_from_csv(csv_file):
labels = []
with open(csv_file, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter='\\t')
for row in reader:
if len(row) >= 3:
label = {
"startTime": float(row[0]),
"endTime": float(row[1]),
"title": row[2]
}
labels.append(label)
return labels
# JSONファイルに書き出す
def write_json_file(labels, json_file):
chapters = []
for label in labels:
chapter = {
"start_time": label["startTime"],
"end_time": label["endTime"],
"title": label["title"]
}
chapters.append(chapter)
with open(json_file, "w") as outfile:
json.dump({"chapters": chapters}, outfile, indent=2)
if __name__ == '__main__':
csv_file = "labels.csv"
json_file = "labels.json"
labels = read_labels_from_csv(csv_file)
write_json_file(labels, json_file)
このスクリプトは、Audacityのラベルをcsv
形式で保存し、そのファイルをread_labels_from_csv()
関数で読み込んで、labels
リストに格納します。次に、write_json_file()
関数を使って、labels
リストをapplication/json+chapters
形式のJSONファイルに変換します。json.dump()
関数は、chapters
リストを{"chapters": chapters}
のような形式でJSONファイルに書き出します。
他のラベルが定義されている範囲内にあるラベルは無視する処理を付け加えることはできますか?
はい、他のラベルが定義されている範囲内にあるラベルを無視する処理を追加することができます。以下は、Audacityのラベルをcsv
形式で保存し、そのファイルを読み込んでapplication/json+chapters
形式のJSONファイルに変換するPythonスクリプトで、他のラベルが定義されている範囲内にあるラベルを無視する処理が追加されたものです。
import csv
import json
# csvファイルからラベルを読み込む
def read_labels_from_csv(csv_file):
labels = []
with open(csv_file, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter='\\t')
for row in reader:
if len(row) >= 3:
label = {
"startTime": float(row[0]),
"endTime": float(row[1]),
"title": row[2]
}
# 他のラベルが定義されている範囲内にあるラベルを無視する
if not any(label["startTime"] <= x["endTime"] and label["endTime"] >= x["startTime"] for x in labels):
labels.append(label)
return labels
# JSONファイルに書き出す
def write_json_file(labels, json_file):
chapters = []
for label in labels:
chapter = {
"start_time": label["startTime"],
"end_time": label["endTime"],
"title": label["title"]
}
chapters.append(chapter)
with open(json_file, "w") as outfile:
json.dump({"chapters": chapters}, outfile, indent=2)
if __name__ == '__main__':
csv_file = "labels.csv"
json_file = "labels.json"
labels = read_labels_from_csv(csv_file)
write_json_file(labels, json_file)
このスクリプトでは、read_labels_from_csv()
関数内に、他のラベルが定義されている範囲内にあるラベルを無視する処理が追加されています。この処理は、以下の式を使って実現されています。
label["startTime"] <= x["endTime"] and label["endTime"] >= x["startTime"]
この式は、現在処理しているラベルの開始時刻が他のラベルの終了時刻よりも小さく、かつ現在処理しているラベルの終了時刻が他のラベルの開始時刻よりも大きい場合に、他のラベルが定義されている範囲内にあると判定します。この場合、現在処理しているラベルはlabels
リストに追加されません。