欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入詳解Python如何獲取音視頻時(shí)長(zhǎng)

 更新時(shí)間:2025年08月13日 10:19:44   作者:Tzq@2018  
這篇文章主要為大家詳細(xì)介紹了一個(gè)Python腳本,可以通過(guò)moviepy庫(kù)來(lái)獲取音視頻文件的時(shí)長(zhǎng),并將結(jié)果寫(xiě)入日志文件,有需要的小伙伴可以了解下

Python獲取音視頻時(shí)長(zhǎng)

1、安裝插件

pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple

2、獲取音視頻時(shí)長(zhǎng).py

上代碼:獲取音視頻時(shí)長(zhǎng).py

# -*- coding: utf-8 -*-
from moviepy.editor import VideoFileClip
# import moviepy.editor.VideoFileClip
import os
import time

def get_time(seconds):
    hour = seconds // 3600  #ok,向下取整
    if len(str(hour)) != 2:
        hour2 = "0" + str(hour)
    else:
        hour2 = str(hour)
    miniute = (seconds - hour * 3600) // 60 #取余
    if len(str(miniute)) != 2:
        miniute2 = "0" + str(miniute)
    else:
        miniute2 = str(miniute)
    second = seconds - hour * 3600 - miniute * 60
    if len(str(second)) == 1:
        second2 = "0" + str(second)
    else:
        second2 = str(second)
    return str(hour2) + ":"+ str(miniute2) + ":" + str(second2)

#得到文件夾下的所有文件
def file_name(file_dir,file_type):
    L=[]
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            # if os.path.splitext(file)[1] == '.wmv':
            if os.path.splitext(file)[1] == file_type:
                L.append(os.path.join(root, file))
    return L

# 得到日期格式
# def get_date_string_file():
#     # return time.strftime("%Y%m%d_%H%M%S",time.localtime())
#     return time.strftime("%Y%m%d", time.localtime())

# 在制定目錄創(chuàng)建文件,存在的話(huà)就追加寫(xiě)入
def create_text_file(log_file_name,content):
    with open(log_file_name, 'a+') as f:
        f.write(content + '\n')  # 加\n換行顯示
        f.close()

# file_dir = "D:/wmv"
# file_type = '.wmv'
file_dir = input("請(qǐng)輸入文件目錄,例如:'D:/wmv':")
file_type = input("請(qǐng)輸入文件擴(kuò)展名,例如:'.wmv':")
log_file_name = input("請(qǐng)輸入日志文件存放目錄,例如:'D:/20220115.log':")
# log_file_name = "D:/" + get_date_string_file() + '.txt'
total_times = 0
for file in file_name(file_dir,file_type):
    # print(file)
    # file = "D:/Video_2022-01-08_011427.wmv"
    clip = VideoFileClip(file)
    times = str(clip.duration)
    # times = times.splitlines()[-1].strip()
    # # print(times)
    # # print(int(float(times)))
    file_time = get_time(int(float(times)))
    print(file + " 文件時(shí)長(zhǎng):" + file_time)
    create_text_file(log_file_name, file + " 文件時(shí)長(zhǎng):" + file_time)
    total_times = total_times + int(float(times))
    # print(file+ " 文件時(shí)長(zhǎng):" + str(total_times))
# print("total_times = "+ str(total_times))
print("總時(shí)間為:"+get_time(total_times))
create_text_file(log_file_name, "總時(shí)間為:"+get_time(total_times))
file_type = input("程序執(zhí)行完畢,請(qǐng)按任意鍵退出...")

打包exe

pyinstaller -F 獲取音視頻時(shí)長(zhǎng).py

Python獲取音頻時(shí)長(zhǎng):從基礎(chǔ)到高級(jí)方法

在音頻處理和數(shù)據(jù)分析中,獲取音頻文件的時(shí)長(zhǎng)是一項(xiàng)基礎(chǔ)但關(guān)鍵的任務(wù)。無(wú)論是統(tǒng)計(jì)音樂(lè)庫(kù)的總播放時(shí)間、分析語(yǔ)音數(shù)據(jù),還是開(kāi)發(fā)多媒體應(yīng)用,都需要精確獲取音頻時(shí)長(zhǎng)。Python作為一門(mén)功能強(qiáng)大的編程語(yǔ)言,提供了多種庫(kù)和工具來(lái)實(shí)現(xiàn)這一目標(biāo)。本文將詳細(xì)介紹如何使用Python獲取音頻時(shí)長(zhǎng)的常見(jiàn)方法,并通過(guò)代碼示例和對(duì)比分析幫助讀者選擇最適合的方案。

音頻時(shí)長(zhǎng)的定義與獲取原理

音頻時(shí)長(zhǎng)的基本概念

音頻時(shí)長(zhǎng)是指音頻文件從開(kāi)始到結(jié)束的播放時(shí)間,通常以秒(s)為單位。其計(jì)算方式取決于音頻文件的編碼格式和元數(shù)據(jù)存儲(chǔ)方式。例如:

  • WAV文件:通過(guò)采樣率和幀數(shù)計(jì)算(時(shí)長(zhǎng) = 幀數(shù) / 采樣率)。
  • MP3文件:通過(guò)ID3標(biāo)簽或比特率計(jì)算。
  • M4A文件:依賴(lài)容器格式的元數(shù)據(jù)。

獲取時(shí)長(zhǎng)的核心方法

獲取音頻時(shí)長(zhǎng)的核心思路是讀取文件的元數(shù)據(jù)或解析音頻流。常見(jiàn)的實(shí)現(xiàn)方式包括:

  • 讀取元數(shù)據(jù):通過(guò)ID3標(biāo)簽、FFmpeg等工具直接提取時(shí)長(zhǎng)信息。
  • 解析音頻流:通過(guò)采樣率、比特率等參數(shù)計(jì)算時(shí)長(zhǎng)。
  • 第三方庫(kù)封裝:利用現(xiàn)成的Python庫(kù)簡(jiǎn)化操作。

常用方法及代碼實(shí)現(xiàn)

使用mutagen庫(kù)

安裝與簡(jiǎn)介

mutagen 是一個(gè)用于處理音頻元數(shù)據(jù)的Python庫(kù),支持多種格式(MP3、FLAC、WAV等)。它通過(guò)解析文件頭信息快速獲取時(shí)長(zhǎng)。

pip install mutagen

代碼示例

from mutagen.mp3 import MP3

def get_duration_mutagen(file_path):
    audio = MP3(file_path)
    return audio.info.length  # 返回以秒為單位的時(shí)長(zhǎng)

file_path = "example.mp3"
duration = get_duration_mutagen(file_path)
print(f"音頻時(shí)長(zhǎng): {duration} 秒")

優(yōu)點(diǎn)與限制

  • 優(yōu)點(diǎn)
    • 支持多種音頻格式。
    • 無(wú)需安裝外部工具。
  • 限制
    • 對(duì)非標(biāo)準(zhǔn)格式的支持可能有限。

使用pydub庫(kù)

安裝與簡(jiǎn)介

pydub 是一個(gè)強(qiáng)大的音頻處理庫(kù),依賴(lài) ffmpeglibav 工具。它通過(guò)加載音頻文件并計(jì)算總幀數(shù)來(lái)獲取時(shí)長(zhǎng)。

pip install pydub
# 需要安裝 ffmpeg(Linux/macOS)或 libav(Windows)

代碼示例

from pydub import AudioSegment

def get_duration_pydub(file_path):
    audio = AudioSegment.from_file(file_path)
    return len(audio) / 1000.0  # 毫秒轉(zhuǎn)秒

file_path = "example.wav"
duration = get_duration_pydub(file_path)
print(f"音頻時(shí)長(zhǎng): {duration} 秒")

優(yōu)點(diǎn)與限制

  • 優(yōu)點(diǎn)
    • 支持幾乎所有常見(jiàn)格式(MP3、WAV、M4A等)。
    • 提供豐富的音頻處理功能(如剪切、合并)。
  • 限制
    • 需要安裝 ffmpeg。
    • 對(duì)超大文件(>4GB)可能無(wú)法處理。

使用librosa庫(kù)

安裝與簡(jiǎn)介

librosa 是專(zhuān)為音樂(lè)和音頻分析設(shè)計(jì)的庫(kù),適合需要高精度分析的場(chǎng)景。

pip install librosa

代碼示例

import librosa

def get_duration_librosa(file_path):
    audio, sr = librosa.load(file_path)
    return librosa.get_duration(y=audio, sr=sr)

file_path = "example.wav"
duration = get_duration_librosa(file_path)
print(f"音頻時(shí)長(zhǎng): {duration} 秒")

優(yōu)點(diǎn)與限制

  • 優(yōu)點(diǎn)
    • 高精度分析(適合科研和工程場(chǎng)景)。
    • 支持復(fù)雜音頻特征提取。
  • 限制
    • 需要加載整個(gè)音頻文件到內(nèi)存。
    • 對(duì)非WAV格式需要額外轉(zhuǎn)換。

使用wave模塊(僅限WAV文件)

代碼示例

import wave

def get_duration_wave(file_path):
    with wave.open(file_path, 'rb') as wav_file:
        frames = wav_file.getnframes()
        rate = wav_file.getframerate()
        return frames / float(rate)

file_path = "example.wav"
duration = get_duration_wave(file_path)
print(f"音頻時(shí)長(zhǎng): {duration} 秒")

優(yōu)點(diǎn)與限制

  • 優(yōu)點(diǎn)
    • Python標(biāo)準(zhǔn)庫(kù),無(wú)需額外安裝。
  • 限制
    • 僅支持WAV格式。
    • 功能單一,擴(kuò)展性差。

使用ffmpeg工具

安裝與簡(jiǎn)介

ffmpeg 是一個(gè)開(kāi)源多媒體處理工具,通過(guò)命令行調(diào)用可獲取音視頻元數(shù)據(jù)。

# 安裝 ffmpeg
sudo apt-get install ffmpeg  # Linux
brew install ffmpeg          # macOS

代碼示例

import subprocess

def get_duration_ffmpeg(file_path):
    result = subprocess.run(
        ["ffprobe", "-v", "error", "-show_entries", "format=duration",
         "-of", "default=noprint_wrappers=1:nokey=1", file_path],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT
    )
    return float(result.stdout.decode())

file_path = "example.mp4"
duration = get_duration_ffmpeg(file_path)
print(f"音頻時(shí)長(zhǎng): {duration} 秒")

優(yōu)點(diǎn)與限制

  • 優(yōu)點(diǎn)
    • 支持幾乎所有音視頻格式。
    • 功能全面,適合復(fù)雜處理。
  • 限制
    • 依賴(lài)外部工具,需安裝 ffmpeg。
    • 調(diào)用方式較復(fù)雜。

方法對(duì)比與選擇建議

方法支持格式依賴(lài)項(xiàng)優(yōu)點(diǎn)缺點(diǎn)
mutagenMP3, FLAC, WAV無(wú)簡(jiǎn)單易用,支持多格式對(duì)非標(biāo)準(zhǔn)格式支持有限
pydub所有常見(jiàn)格式ffmpeg功能豐富,處理靈活需要安裝外部工具
librosaWAV, MP3無(wú)高精度分析,適合科研場(chǎng)景內(nèi)存占用高
waveWAV無(wú)標(biāo)準(zhǔn)庫(kù),無(wú)需額外安裝僅限WAV格式
ffmpeg所有音視頻格式ffmpeg功能全面,支持復(fù)雜處理調(diào)用復(fù)雜,依賴(lài)外部工具

實(shí)際應(yīng)用場(chǎng)景

1.批量統(tǒng)計(jì)文件夾內(nèi)音頻總時(shí)長(zhǎng)

import os
from pydub import AudioSegment

def total_duration_in_folder(folder_path):
    total = 0.0
    for filename in os.listdir(folder_path):
        if filename.endswith((".mp3", ".wav", ".m4a")):
            file_path = os.path.join(folder_path, filename)
            audio = AudioSegment.from_file(file_path)
            total += len(audio) / 1000.0
    return total

folder_path = "audio_files"
total = total_duration_in_folder(folder_path)
print(f"總時(shí)長(zhǎng): {total / 3600:.2f} 小時(shí)")

2.音頻質(zhì)量檢測(cè)

在語(yǔ)音識(shí)別或音樂(lè)推薦系統(tǒng)中,可能需要過(guò)濾掉時(shí)長(zhǎng)過(guò)短或過(guò)長(zhǎng)的音頻文件。例如:

def filter_audio_by_duration(file_path, min_duration, max_duration):
    duration = get_duration_pydub(file_path)
    if min_duration <= duration <= max_duration:
        return True
    return False

3.多媒體播放器開(kāi)發(fā)

在開(kāi)發(fā)播放器時(shí),獲取音頻時(shí)長(zhǎng)是進(jìn)度條設(shè)計(jì)的基礎(chǔ)。結(jié)合 pydub 和 GUI 工具包(如 tkinter),可以實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度顯示。

小結(jié)

獲取音頻時(shí)長(zhǎng)是音頻處理中的基礎(chǔ)任務(wù),Python 提供了多種方法滿(mǎn)足不同需求。以下是關(guān)鍵結(jié)論:

  • 簡(jiǎn)單快速:使用 mutagenpydub 可快速實(shí)現(xiàn),適合日常需求。
  • 高精度分析librosa 提供科研級(jí)精度,適合需要深度分析的場(chǎng)景。
  • 兼容性要求ffmpeg 是全能工具,支持所有格式,但需安裝外部依賴(lài)。
  • 格式限制wave 模塊僅限WAV文件,適合特定場(chǎng)景。

在實(shí)際開(kāi)發(fā)中,應(yīng)根據(jù)具體需求選擇合適的方法。例如,處理WAV文件時(shí)優(yōu)先使用 wave 模塊;需要兼容多種格式時(shí)選擇 pydubffmpeg;進(jìn)行科研分析時(shí)使用 librosa。通過(guò)靈活組合這些工具,可以高效完成音頻時(shí)長(zhǎng)的獲取與處理任務(wù)。

到此這篇關(guān)于深入詳解Python如何獲取音視頻時(shí)長(zhǎng)的文章就介紹到這了,更多相關(guān)Python獲取音視頻時(shí)長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)對(duì)數(shù)據(jù)公鑰加密與私鑰解密

    python實(shí)現(xiàn)對(duì)數(shù)據(jù)公鑰加密與私鑰解密

    這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)對(duì)數(shù)據(jù)公鑰加密與私鑰解密,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-06-06
  • python爬不同圖片分別保存在不同文件夾中的實(shí)現(xiàn)

    python爬不同圖片分別保存在不同文件夾中的實(shí)現(xiàn)

    這篇文章主要介紹了python爬不同圖片分別保存在不同文件夾中的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python實(shí)現(xiàn)希爾密碼加密的示例代碼

    python實(shí)現(xiàn)希爾密碼加密的示例代碼

    本文主要介紹了python實(shí)現(xiàn)希爾密碼加密,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子

    python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子

    這篇文章主要介紹了python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子,例子中包含了控制攝像頭、寫(xiě)入Windows注冊(cè)表方法等,需要的朋友可以參考下
    2014-03-03
  • Flask-WTF表單的使用方法

    Flask-WTF表單的使用方法

    這篇文章主要介紹了Flask-WTF表單的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python利用Rasa框架和SMTPlib庫(kù)實(shí)現(xiàn)郵件回復(fù)助手

    Python利用Rasa框架和SMTPlib庫(kù)實(shí)現(xiàn)郵件回復(fù)助手

    在現(xiàn)代辦公場(chǎng)景中,處理大量郵件是一項(xiàng)既耗時(shí)又容易出錯(cuò)的任務(wù),本文將詳細(xì)介紹如何使用Python的Rasa框架和SMTPlib庫(kù)建一個(gè)智能的郵件自動(dòng)回復(fù)助手,感興趣的可以了解下
    2025-04-04
  • 解決django migrate報(bào)錯(cuò)ORA-02000: missing ALWAYS keyword

    解決django migrate報(bào)錯(cuò)ORA-02000: missing ALWAYS keyword

    這篇文章主要介紹了解決django migrate報(bào)錯(cuò)ORA-02000: missing ALWAYS keyword,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 詳解Python中的正斜杠與反斜杠

    詳解Python中的正斜杠與反斜杠

    這篇文章主要介紹了詳解Python中的正斜杠與反斜杠,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python的bit_length函數(shù)來(lái)二進(jìn)制的位數(shù)方法

    Python的bit_length函數(shù)來(lái)二進(jìn)制的位數(shù)方法

    今天小編就為大家分享一篇Python的bit_length函數(shù)來(lái)二進(jìn)制的位數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 用Python開(kāi)發(fā)app后端有優(yōu)勢(shì)嗎

    用Python開(kāi)發(fā)app后端有優(yōu)勢(shì)嗎

    在本篇文章里小編給大家整理的是關(guān)于app后端開(kāi)發(fā)學(xué)PHP還是Python的先關(guān)問(wèn)題內(nèi)容,需要的朋友們可以參考下。
    2020-06-06

最新評(píng)論