0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3に保存しているWAV形式の音声ファイルの長さを取得する

Posted at

はじめに

とあるコストを見積もるために、S3に保存しているWAV形式の音声ファイルの長さを調べる必要があたったので作成したスクリプトを紹介します

パッケージのインストール

音声データの処理にpython-soundfileを使用しています。python-soundfileを使用するにはlibsndfileが必要なため、適宜インストールください。

Ubuntuの場合は以下でインストール可能です。

sudo apt-get install -y libsndfile1
pip install boto3 soundfile

スクリプト

S3から順番にWAFファイルを取得して、長さ = 総サンプル数 / サンプリングレート で計算しています。
ファイル数が多いとS3の通信料が高額になるため気をつけましょう。

import csv
import io

import boto3
import soundfile as sf

s3_client = boto3.client("s3")

BUCKET_NAME = "your bucket name"
PREFIX = "your directory prefix"


def main():
    result = []
    paginator = s3_client.get_paginator("list_objects_v2")
    for page in paginator.paginate(Bucket=BUCKET_NAME, Prefix=PREFIX):
        for content in page["Contents"]:
            key = content["Key"]

            # 音声ファイルの長さを検索
            response = s3_client.get_object(Bucket=BUCKET_NAME, Key=key)
            audio_data = io.BytesIO(response["Body"].read())
            with sf.SoundFile(audio_data) as f:
                duration = len(f) / f.samplerate

            result.append({"key": key, "size": content["Size"], "duration": duration})

    with open("result.csv", "w") as f:
        writer = csv.DictWriter(f, fieldnames=result[0].keys())
        writer.writeheader()

        for row in result:
            writer.writerow(row)


if __name__ == "__main__":
    main()

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?