ホームページ >バックエンド開発 >Python チュートリアル >Pythonオーディオ処理ライブラリpydubの使い方

Pythonオーディオ処理ライブラリpydubの使い方

WBOY
WBOY転載
2023-05-06 11:58:062010ブラウズ

    1. インストール

    pip を使用してインストールします (ffmpeg の依存関係もインストールする必要があります。インストールには conda コマンドを使用することをお勧めします)。環境を設定する必要はありません):

    pip install pydub

    2. 音声ファイルのインポートと読み取り

    from pydub import AudioSegment
    audio = AudioSegment.from_file("path/to/file")

    3. 音声の再生

    from pydub.playback import play
    play(audio)

    4. 音声の長さ

    duration = audio.duration_seconds # 单位为秒

    5. 音声のカット

    # 前10秒
    audio = audio[:10000]
    
    # 后10秒
    audio = audio[-10000:]
    
    # 从第10秒开始到第20秒结束
    audio = audio[10000:20000]
    
    # 从第10秒开始到结尾
    audio = audio[10000:]
    
    # 从开始到第10秒audio = audio[:10000]

    6. 音声の結合

    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    audio_combined = audio1 + audio2

    7. 音声変換

    audio.export("path/to/new/file", format="mp3")

    8. 音量の調整

    # 增加10分贝
    louder_audio = audio + 10
    
    # 减小10分贝
    quieter_audio = audio - 10

    9. 音声の分割

    # 等分分割,按大概每三分钟进行分割
    for i in range(1, 1000):
        if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8:
            number = i
            break
    chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)]  # 切割
    
    # 保存分割后的音频
    for i, chunk in enumerate(chunks):
        chunk.export("path/to/new/file{}.wav".format(title,i), format="wav")

    10. 完全なコード

    次は、前後のオーディオを切り取り、保存するために適切な長さの小さなセグメントにオーディオを分割するために使用される完全なコードです。

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 输出视频时长
    print('视频时长:', audio.duration_seconds / 60)
    
    # 前后切割
    start = int(input('前切割n秒,不切割输入0'))*1000
    end = int(input('后切割n秒,不切割输入0'))*1000
    if start:
        audio = audio[start:-end]
    
    # 计算合适的分割长度
    for i in range(1, 1000):
        if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8:
            number = i
            break
    chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)] 
    # 保存分割后的音频
    for i, chunk in enumerate(chunks):
        print('分割后的时长:', chunk.duration_seconds / 60)
        chunk.export("path/to/new/file{}.wav".format(i), format="wav")

    アプリケーションケース

    1. オーディオ ファイルを指定された形式に変換します

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 转换为mp3格式并保存
    audio.export("path/to/new/file.mp3", format="mp3")

    2. 複数のオーディオ ファイルを 1 つのファイルに結合します

    from pydub import AudioSegment
    
    # 读取音频文件
    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    
    # 合并音频文件并保存
    combined_audio = audio1 + audio2
    combined_audio.export("path/to/new/file", format="wav")

    3 . Make着信音

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 切割并保存
    start = 10000
    end = 15000
    ringtone = audio[start:end]
    ringtone.export("path/to/new/file", format="mp3")

    4. オーディオの音量を調整します

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 增加10分贝
    louder_audio = audio + 10
    
    # 减小10分贝
    quieter_audio = audio - 10
    
    # 保存调整后的音频
    louder_audio.export("path/to/new/file", format="wav")
    quieter_audio.export("path/to/new/file", format="wav")

    ケース: 空の音を識別してオーディオ内の曲を分割します

    from pydub import AudioSegment
    from pydub.silence import split_on_silence
    
    # 读取音频文件
    audio = AudioSegment.from_file("audio.mp3", format="mp3")
    
    # 设置分割参数
    min_silence_len = 700  # 最小静音长度
    silence_thresh =-10  # 静音阈值,越小越严格
    keep_silence = 600  # 保留静音长度
    
    # 计算分割数量
    num_segments = int(audio.duration_seconds/60/3)  # 每首歌曲大概三分钟,计算歌曲数量
    
    # 分割音频文件
    for i in range(-10, 0):
        segments = split_on_silence(audio, min_silence_len=min_silence_len, silence_thresh=i, keep_silence=keep_silence)
        if len(segments) <= num_segments:
            print(f"分割成功,共分割出 {len(segments)} 段")
            break
        else:
            print(f"当前阈值为 {i},分割出 {len(segments)} 段,继续尝试")

    最初に、AudioSegment を使用します。 from_file() メソッドを使用してオーディオ ファイルを読み取り、最小無音長、無音しきい値、保持される無音長をそれぞれ表すセグメンテーション パラメーター min_silence_len、silence_thresh、および keep_silence を設定します。このうち、無音閾値が小さいほど、より多くの小さなセグメントが切り出されますが、切り落としが発生する可能性があり、逆に、無音閾値が大きいほど、切り出されるセグメントは少なくなりますが、切り出し漏れが発生する可能性があります。

    次に、分割数 num_segments、つまりオーディオ ファイルが何つのセグメントに分割されているかを計算します。ここでは1曲を約3分として、何分割する必要があるかを計算してみます。

    最後に、split_on_silence() メソッドを使用してオーディオ ファイルを分割し、分割パラメータを設定し、セグメント化されたセグメントの数が期待を満たすまでループを通じて無音のしきい値を継続的に調整します。分割が成功した場合はループから抜け出し、そうでない場合は試行を続けます。

    つまり、pydub は、オーディオ処理、変換、結合などの操作を簡単に実行できる、非常に実用的なオーディオ処理ライブラリです。同時に、pydub には、着信音の作成、音量の調整などの豊富なアプリケーション シナリオもあります。 pydub を使用する場合は、オーディオ形式の互換性の問題に注意する必要があることに注意してください。

    さらに、pydub を通じてオーディオのエンコード、デコード、ミキシング、リサンプリングなどの操作を実行することもできます。以下に、一般的な操作の例をいくつか示します。

    コーディング、ミキシング、リサンプリング

    1. コーデック

    from pydub import AudioSegment
    
    # 读取音频文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 编码
    encoded_audio = audio.set_frame_rate(16000).set_sample_width(2).set_channels(1)
    
    # 解码
    decoded_audio = encoded_audio.set_frame_rate(44100).set_sample_width(4).set_channels(2)

    2. ミキシング

    from pydub import AudioSegment
    
    # 读取音频文件
    audio1 = AudioSegment.from_file("path/to/file1")
    audio2 = AudioSegment.from_file("path/to/file2")
    
    # 混音
    mixed_audio = audio1.overlay(audio2)
    
    # 保存混音后的音频
    mixed_audio.export("path/to/new/file", format="wav")

    3. リサンプリング

    from pydub import AudioSegment
    
    # 读取音频文件
    audio =AudioSegment.from_file("path/to/file")
    
    # 重采样为44100Hz
    resampled_audio = audio.set_frame_rate(44100)
    
    # 保存重采样后的音频
    resampled_audio.export("path/to/new/file", format="wav")

    pydub を通じて、オーディオのエンコード、デコード、ミキシング、リサンプリングなどの操作を簡単に実行でき、pydub のアプリケーション シナリオをさらに拡張できます。オーディオ ミキシング操作を実行するときは、2 つのオーディオ ファイルのサンプリング レート、サンプリング ビット数、チャンネル数が同じであることを確認する必要があることに注意してください。

    最後に、pydub のメリットとデメリットをまとめます。

    利点:

    軽量: pydub は、インストールと使用が簡単な軽量のオーディオ処理ライブラリです。

    豊富な機能: pydub は、カット、マージ、変換、ボリューム調整、エンコードとデコード、ミキシング、リサンプリングなどを含む、豊富なオーディオ処理機能を提供します。

    幅広い用途: pydub には、オーディオ処理、着信音の作成、オーディオ形式の変換、音声認識など、幅広いアプリケーション シナリオがあります。

    欠点:

    形式との互換性が制限されている: pydub は音声形式との互換性が制限されており、すべての音声形式をサポートしているわけではありません。音声は処理する前にサポートされている形式に変換する必要があります。

    平凡なパフォーマンス: pydub が大きなファイルを処理する場合、そのパフォーマンスは平均的になる可能性があり、ある程度の時間とコンピューティング リソースが必要になります。

    ストリーミング処理をサポートしていません: pydub はストリーミング処理をサポートしていません。オーディオ ファイル全体をメモリに読み込む必要があるため、メモリ フットプリントが大きくなります。

    要約すると、pydub は機能が豊富で広く使用されているオーディオ処理ライブラリです。 pydub を使用する場合は、オーディオ形式の互換性の問題に注意し、大きなファイルを処理するときのパフォーマンスとメモリ使用量に注意する必要があります。より複雑なオーディオ タスクを処理する必要がある場合は、他のより専門的なオーディオ処理ライブラリの使用を検討できます。

    以上がPythonオーディオ処理ライブラリpydubの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。