Хорошо, это очень, очень, очень сложная проблема. Я провел уже 3 дня, и это похоже на математическую задачу на приз тысячелетия.
Хорошо, у меня есть .ttml меток времени, где я проанализировал видео в формате mp4 и удалил субтитры. Предполагается, что эти временные метки являются реальным звуком в видео (в основном эти временные метки являются звуком в видео)
Вот как выглядит .ttml
<p begin="00:00:04.550" end="00:00:06.920" style="s2">hello bob</p>
<p begin="00:00:07.500" end="00:00:10.075" style="s2">hey man lets play hockey/p>
<p begin="00:00:10.366" end="00:00:14.100" style="s2">sure</p>
<p begin="00:00:16.210" end="00:00:18.980" style="s2">actually I cannot</p>
<p begin="00:00:21.260" end="00:00:23.230" style="s2">Ok maybe next time</p>
Я использовал модуль datetime для посчитайте разницу всех временных меток и суммируйте их.
def calculate_time(file_name: str):
print("WTF")
diff = datetime.timedelta()
file_text = "".join(open(file_name).readlines())
p_tags = Selector(text=file_text).xpath("//p").getall()
for ptag in p_tags:
begin = Selector(text=ptag).xpath("//@begin").get()
endie = Selector(text=ptag).xpath("//@end").get()
start_time = dt.strptime(begin, '%H:%M:%S.%f')
endie_time = dt.strptime(endie, '%H:%M:%S.%f')
diff += endie_time-start_time
return diff
for fname in glob.glob(r"temp_results/*.ttml"):
current_time = calculate_time(file_name=fname)
Приведенный выше код говорит, что моя общая временная метка (на самом деле звук в видео) составляет 7: 09 минут
Теперь вот где все становится действительно сложно , Таким образом, в mp4, где я получил эти метки времени / сабы, я преобразовал его в файл WAV. Звук wav-файла 9 минут
Как мне отредактировать wav-файл так, чтобы он на самом деле брал аудио из mp4 или самого себя, а включает только звук, указанный в файл метки времени ??
Я пытался использовать Pydub https://github.com/jiaaro/pydub, но я только вижу это, мне нужно как-то вычесть метки времени или преобразовать в миллисекунды ?? из pydub импортировать AudioSegment
audio = AudioSegment.from_wav("never_gonna_give_you_up.wav")
ten_seconds = 10 * 1000
new_audio = audio[-5000:] . #5000 = timestamp datetime object?