Get .wav file length or duration

后端 未结 9 727
暗喜
暗喜 2020-12-04 10:17

I\'m looking for a way to find out the duration of a audio file (.wav) in python. So far i had a look at python wave library, mutagen, pymedi

相关标签:
9条回答
  • 2020-12-04 10:55

    we can use ffmpeg to get the duration of any video or audio files.

    To install ffmpeg follow this link

    import subprocess
    import re
    
    process = subprocess.Popen(['ffmpeg',  '-i', path_of_wav_file], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = process.communicate()
    matches = re.search(r"Duration:\s{1}(?P<hours>\d+?):(?P<minutes>\d+?):(?P<seconds>\d+\.\d+?),", stdout, re.DOTALL).groupdict()
    
    print(matches['hours'])
    print(matches['minutes'])
    print(matches['seconds'])
    
    0 讨论(0)
  • 2020-12-04 11:00

    This is short and needs no modules, works with all operating systems:

    import os
    os.chdir(foo) # Get into the dir with sound
    statbuf = os.stat('Sound.wav')
    mbytes = statbuf.st_size / 1024
    duration = mbytes / 200
    
    0 讨论(0)
  • 2020-12-04 11:04

    A very simple method is to use pysoundfile, https://github.com/bastibe/PySoundFile

    Here's some example code of how to do this:

    import soundfile as sf
    f = sf.SoundFile('447c040d.wav')
    print('samples = {}'.format(len(f)))
    print('sample rate = {}'.format(f.samplerate))
    print('seconds = {}'.format(len(f) / f.samplerate))
    

    The output for that particular file is:

    samples = 232569
    sample rate = 16000
    seconds = 14.5355625
    

    This aligns with soxi:

    Input File     : '447c040d.wav'
    Channels       : 1
    Sample Rate    : 16000
    Precision      : 16-bit
    Duration       : 00:00:14.54 = 232569 samples ~ 1090.17 CDDA sectors
    File Size      : 465k
    Bit Rate       : 256k
    Sample Encoding: 16-bit Signed Integer PCM
    
    0 讨论(0)
提交回复
热议问题