GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

jiaaro

pydub – シンプルで簡単な高水準インターフェースでオーディオを操作する

投稿日:

シンプルで簡単な高水準インターフェースでオーディオを操作する http://pydub.com

Pydub

Pydubは愚かではない方法でオーディオに詰め込むことができます。

あなたが探しているもの

クイックスタート

WAVファイルを開く

from pydub import AudioSegment

song = AudioSegment.from_wav("never_gonna_give_you_up.wav")

…またはmp3

song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3")

…またはogg、flv、またはその他のものffmpegはサポートしています

ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")

mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")
wma_version = AudioSegment.from_file("never_gonna_give_you_up.wma", "wma")
aac_version = AudioSegment.from_file("never_gonna_give_you_up.aiff", "aac")

スライスオーディオ:

# pydub does things in milliseconds
ten_seconds = 10 * 1000

first_10_seconds = song[:ten_seconds]

last_5_seconds = song[-5000:]

始まりを大きくし、終わりを静かにする

# boost volume by 6dB
beginning = first_10_seconds + 6

# reduce volume by 3dB
end = last_5_seconds - 3

オーディオを連結する(あるファイルを別のファイルの最後に追加する)

without_the_middle = beginning + end

それはどのくらい長いですか?

without_the_middle.duration_seconds == 15.0

AudioSegmentsは不変です

# song is not modified
backwards = song.reverse()

クロスフェード(再び、開始と終了は変更されません)

# 1.5 second crossfade
with_style = beginning.append(end, crossfade=1500)

繰り返す

# repeat the clip twice
do_it_over = with_style * 2

Fade(すべてがAudioSegmentを返すため、操作を連鎖できることに注意してください)

# 2 sec fade in, 3 sec fade out
awesome = do_it_over.fade_in(2000).fade_out(3000)

結果を保存する(ffmpegがサポートするものであれば)

awesome.export("mashup.mp3", format="mp3")

結果をタグ(メタデータ)で保存する

awesome.export("mashup.mp3", format="mp3", tags={'artist': 'Various artists', 'album': 'Best of 2011', 'comments': 'This album is awesome!'})

オプションのビットレート引数を渡して、ffmpegがサポートする任意の構文を使用してエクスポートすることができます。

awesome.export("mashup.mp3", format="mp3", bitrate="192k")

ffmpegでサポートされているそれ以上の引数は、 ‘parameters’引数のリストとして渡すことができます。 これらのパラメータは検証されず、ffmpeg / avlibの特定のビルドでサポートされているものによって制限される場合があります。

# Use preset mp3 quality 0 (equivalent to lame V0)
awesome.export("mashup.mp3", format="mp3", parameters=["-q:a", "0"])

# Mix down to two channels and set hard output volume
awesome.export("mashup.mp3", format="mp3", parameters=["-ac", "2", "-vol", "150"])

デバッグ

人々が抱えるほとんどの問題は、ffmpeg / avlibを使用してフォーマット間の変換に関連しています。 Pydubは、問題を追跡するのに役立つサブプロセス呼び出しを出力するロガーを提供します。

>>> import logging

>>> l = logging.getLogger("pydub.converter")
>>> l.setLevel(logging.DEBUG)
>>> l.addHandler(logging.StreamHandler())

>>> AudioSegment.from_file("./test/data/test1.mp3")
subprocess.call(['ffmpeg', '-y', '-i', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpeZTgMy', '-vn', '-f', 'wav', '/var/folders/71/42k8g72x4pq09tfp920d033r0000gn/T/tmpK5aLcZ'])
<pydub.audio_segment.AudioSegment object at 0x101b43e10>

変換に使用される一時ファイルについては心配しないでください。 それらは自動的にクリーンアップされます。

バグと質問

私たちのgithub問題追跡ツールでバグを報告し、pydubタグを使ってStack Overflowに関する技術的な質問をすることができます。 私たちは両方を見守ります。

インストール

pydubをインストールするのは簡単ですが、ffmpeg / avlib(この文書の次のセクション)をインストールすることを忘れないでください。

pip install pydub

または、githubから最新の@master版をインストールしてください(または@master@v0.12.0ようなリリース版に置き換えて@v0.12.0 )…

pip install git+https://github.com/jiaaro/pydub.git@master

-OR-

git clone https://github.com/jiaaro/pydub.git

-OR-

pydubディレクトリをpythonパスにコピーします。 ここにジップ

依存関係

純粋なPythonでWAVファイルを開いて保存することができます。 mp3のような非wavファイルを開いて保存するには、 ffmpegまたはlibavが必要です。

ffmpegをセットアップする

libavまたはffmpegを使用できます。

Mac( 自作を使用):

# libav
brew install libav --with-libvorbis --with-sdl --with-theora

####    OR    #####

# ffmpeg
brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora

Linux(aptitudeを使用):

# libav
apt-get install libav-tools libavcodec-extra-53

####    OR    #####

# ffmpeg
apt-get install ffmpeg libavcodec-extra-53

Windows:

  1. ここで提供されるWindowsバイナリからlibavをダウンロードして抽出します
  2. あなたのPATHにlibav /binフォルダを追加するenvvar
  3. pip install pydub

重要な注意点

AudioSegmentオブジェクトは不変です

Oggのエクスポートとデフォルトのコーデック

Oggの仕様( http://tools.ietf.org/html/rfc5334 )では、使用するコーデックが指定されていません。この選択肢はユーザーに任されています。 VorbisとTheoraは、カプセル化されたデータに使用できるいくつかの潜在的なコーデック(rfcの3ページを参照)のほんの一部です。

コーデックが指定されていない場合、 oggへのエクスポートはデフォルトで vorbisを納得のいくものとして使用します あれは:

from pydub import AudioSegment
song = AudioSegment.from_mp3("test/data/test1.mp3")
song.export("out.ogg", format="ogg")  # Is the same as:
song.export("out.ogg", format="ogg", codec="libvorbis")

使用例

mp4flvのビデオでいっぱいのディレクトリがあり、そのすべてをmp3に変換してmp3プレーヤーで聞くことができるとします。

import os
import glob
from pydub import AudioSegment

video_dir = '/home/johndoe/downloaded_videos/'  # Path where the videos are located
extension_list = ('*.mp4', '*.flv')

os.chdir(video_dir)
for extension in extension_list:
    for video in glob.glob(extension):
        mp3_filename = os.path.splitext(os.path.basename(video))[0] + '.mp3'
        AudioSegment.from_file(video).export(mp3_filename, format='mp3')

他の例はどうですか?

from glob import glob
from pydub import AudioSegment

playlist_songs = [AudioSegment.from_mp3(mp3_file) for mp3_file in glob("*.mp3")]

first_song = playlist_songs.pop(0)

# let's just include the first 30 seconds of the first song (slicing
# is done by milliseconds)
beginning_of_song = first_song[:30*1000]

playlist = beginning_of_song
for song in playlist_songs:

    # We don't want an abrupt stop at the end, so let's do a 10 second crossfades
    playlist = playlist.append(song, crossfade=(10 * 1000))

# let's fade out the end of the last song
playlist = playlist.fade_out(30)

# hmm I wonder how long it is... ( len(audio_segment) returns milliseconds )
playlist_length = len(playlist) / (1000*60)

# lets save it!
out_f = open("%s_minute_playlist.mp3" % playlist_length, 'wb')

playlist.export(out_f, format='mp3')

ライセンス( MITライセンス

著作権©2011 James Robert、 http://jiaaro.com

本ソフトウェアおよび関連するドキュメンテーションファイル(以下「本ソフトウェア」といいます)のコピーを取得した者は、本ソフトウェアを制限なく使用、複製、改変、マージする権利を含むがこれに限定されるものではなく、本ソフトウェアのコピーを発行、配布、サブライセンス許諾、および/または販売すること、および本ソフトウェアが提供されている人に、以下の条件に従うことを許可すること。

上記の著作権表示およびこの許可通知は、本ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。

本ソフトウェアは、商品性、特定の目的への適合性および非侵害性の保証を含むが、明示的または黙示的ないかなる保証もなく、現状のまま提供されます。 作者または著作権者は、いかなる場合も、本ソフトウェアまたはその使用に関連して発生したものであっても、その使用に起因するものであっても、契約違反、その他の損害賠償その他の損害賠償の責任は負わないものとします。ソフトウェア。







-jiaaro

執筆者: