【解決方法】SRT で音声のストレッチの問題が発生する


私のジレンマは次のとおりです。

人工知能が生成した音声を使用して、ビデオを英語からフランス語に翻訳したいと考えています。 そこで、YouTubeで英語の動画を検索してダウンロードし、字幕を抽出します。 次に、これらの字幕を英語からフランス語に翻訳します。 人工知能を使用して SRT ファイルの音声合成を実行します。 これまでのところ、すべてが順調に進んでいます。

次に、ビデオ編集ソフトウェアを開き、音声をミュートして元のビデオ ファイルをインポートします。 次に、フランス語に翻訳された音声を受け取ります。 ただし、生成されたフランス語のテキストが長いことに気付きました。 ここに私の問題があることがわかりますね。

そこで解決策を検討しており、「オーディオストレッチ」という手法を使おうと考えています。 ただし、ビデオが長すぎるため、ビデオ内のすべてのフレーズにこの方法を適用するのは時間がかかりすぎて現実的ではありません。

Pythonプログラミングの知識はある程度あるので、フランス語に翻訳されたSRTファイルを参考に、フランス語の翻訳音声と元の音声を同期させる「オーディオストレッチ」手法を利用したプログラムを作成しようと考えています。 この反省の後、Python コードを作成しようとしていますが、困難に直面し、一貫してエラーが発生します。 ChatGPTも使用してみましたが、まだ問題を解決できません。

基本的に、私が実現したいのは、フランス語に翻訳された SRT ファイルを参照として使用し、「テキスト読み上げ」AI によって生成されたフランス語の音声ファイルに「音声ストレッチ」を適用して、元の音声と一致するようにすることです。 これらはすべて Python を使用して実行する必要があります。 開発環境として Visual Studio Code を使用しています。 さらに、それをすべて Python で動作させるコードを提供していただけますか? あるいは、それが不可能な場合は、別の解決策を提案してもらえますか?

私が試したこと:

プログラムしようとしたが機能しなかったコードは次のとおりです。

from pydub import AudioSegment
import pysrt

# Chargement des fichiers audio
print("Chargement des fichiers audio...")
audio_fr = AudioSegment.from_file("1.mp3", format="mp3")
audio_en = AudioSegment.from_file("He Refused To Become A Hero, So The Gods Cursed Him And He Became A Villain - Manhwa Recap (online-video-cutter.com).mp3")

# Chargement du fichier de sous-titres
print("Chargement du fichier de sous-titres...")
subtitles = pysrt.open("11.srt")

# Ajustement de l'audio en fonction des sous-titres
print("Ajustement de l'audio en fonction des sous-titres...")
adjusted_audio_fr = AudioSegment.silent(duration=0)  # Audio vide initial

for i, subtitle in enumerate(subtitles):
    start_time = subtitle.start.to_time()
    end_time = subtitle.end.to_time()

    # Découpage de l'audio en fonction des durées des sous-titres
    start_ms = start_time.minute * 60 * 1000 + start_time.second * 1000 + start_time.microsecond // 1000
    end_ms = end_time.minute * 60 * 1000 + end_time.second * 1000 + end_time.microsecond // 1000
    segment = audio_fr[start_ms:end_ms]
    adjusted_audio_fr += segment

    # Affichage de l'étape en cours
    print(f"Étape {i + 1}/{len(subtitles)} - Sous-titre : {subtitle.text}")

# Sauvegarde du fichier audio modifié
print("Sauvegarde du fichier audio modifié...")
adjusted_audio_fr.export("chemin/vers/audio_fr_adjusted.mp3", format="mp3")

print("Terminé !")

コメント

タイトルとURLをコピーしました