最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入詳解Python如何獲取音視頻時長

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

Python獲取音視頻時長

1、安裝插件

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

2、獲取音視頻時長.py

上代碼:獲取音視頻時長.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)建文件,存在的話就追加寫入
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("請輸入文件目錄,例如:'D:/wmv':")
file_type = input("請輸入文件擴展名,例如:'.wmv':")
log_file_name = input("請輸入日志文件存放目錄,例如:'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 + " 文件時長:" + file_time)
    create_text_file(log_file_name, file + " 文件時長:" + file_time)
    total_times = total_times + int(float(times))
    # print(file+ " 文件時長:" + str(total_times))
# print("total_times = "+ str(total_times))
print("總時間為:"+get_time(total_times))
create_text_file(log_file_name, "總時間為:"+get_time(total_times))
file_type = input("程序執(zhí)行完畢,請按任意鍵退出...")

打包exe

pyinstaller -F 獲取音視頻時長.py

Python獲取音頻時長:從基礎(chǔ)到高級方法

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

音頻時長的定義與獲取原理

音頻時長的基本概念

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

  • WAV文件:通過采樣率和幀數(shù)計算(時長 = 幀數(shù) / 采樣率)。
  • MP3文件:通過ID3標簽或比特率計算。
  • M4A文件:依賴容器格式的元數(shù)據(jù)。

獲取時長的核心方法

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

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

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

使用mutagen庫

安裝與簡介

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

pip install mutagen

代碼示例

from mutagen.mp3 import MP3

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

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

優(yōu)點與限制

  • 優(yōu)點
    • 支持多種音頻格式。
    • 無需安裝外部工具。
  • 限制
    • 對非標準格式的支持可能有限。

使用pydub庫

安裝與簡介

pydub 是一個強大的音頻處理庫,依賴 ffmpeglibav 工具。它通過加載音頻文件并計算總幀數(shù)來獲取時長。

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"音頻時長: {duration} 秒")

優(yōu)點與限制

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

使用librosa庫

安裝與簡介

librosa 是專為音樂和音頻分析設(shè)計的庫,適合需要高精度分析的場景。

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"音頻時長: {duration} 秒")

優(yōu)點與限制

  • 優(yōu)點
    • 高精度分析(適合科研和工程場景)。
    • 支持復(fù)雜音頻特征提取。
  • 限制
    • 需要加載整個音頻文件到內(nèi)存。
    • 對非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"音頻時長: {duration} 秒")

優(yōu)點與限制

  • 優(yōu)點
    • Python標準庫,無需額外安裝。
  • 限制
    • 僅支持WAV格式。
    • 功能單一,擴展性差。

使用ffmpeg工具

安裝與簡介

ffmpeg 是一個開源多媒體處理工具,通過命令行調(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"音頻時長: {duration} 秒")

優(yōu)點與限制

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

方法對比與選擇建議

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

實際應(yīng)用場景

1.批量統(tǒng)計文件夾內(nèi)音頻總時長

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"總時長: {total / 3600:.2f} 小時")

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

在語音識別或音樂推薦系統(tǒ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.多媒體播放器開發(fā)

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

小結(jié)

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

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

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

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

相關(guān)文章

  • Python使用pymysql模塊操作mysql增刪改查實例分析

    Python使用pymysql模塊操作mysql增刪改查實例分析

    這篇文章主要介紹了Python使用pymsql模塊操作mysql增刪改查,結(jié)合實例形式分析了Python使用pymsql模塊針對mysql進行增刪改查操作的相關(guān)實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2019-12-12
  • Python中子類繼承父類傳遞參數(shù)的方法

    Python中子類繼承父類傳遞參數(shù)的方法

    在面向?qū)ο缶幊讨?繼承是一種使得一個類(稱為子類)能夠獲取另一個類(稱為父類)的屬性和方法的機制,Python支持繼承,并提供了靈活的方式來繼承和擴展類的功能,本文將詳細介紹如何在Python中使用子類繼承父類,并傳遞參數(shù),需要的朋友可以參考下
    2025-03-03
  • Python實現(xiàn)快速將pdf文件剪切成多個圖片

    Python實現(xiàn)快速將pdf文件剪切成多個圖片

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)快速將pdf文件剪切成多個圖片,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 基于Python實現(xiàn)視頻轉(zhuǎn)字符畫動漫小工具

    基于Python實現(xiàn)視頻轉(zhuǎn)字符畫動漫小工具

    大家都知道視頻就是一幀一幀的圖片構(gòu)成的。那么想要實現(xiàn)將視頻轉(zhuǎn)換為字符畫,就要將一部視頻全部逐幀拆解成圖片,然后采取和以前相同的將圖片轉(zhuǎn)換為字符畫的算法即可。本文將詳細為大家介紹如何實現(xiàn),需要的可以參考一下
    2021-12-12
  • python concurrent.futures模塊的使用測試

    python concurrent.futures模塊的使用測試

    大家都知道concurrent.futures 是 3.2 中引入的新模塊,它為異步執(zhí)行可調(diào)用對象提供了高層接口,今天通過本文給大家介紹python concurrent.futures模塊的使用測試 ,感興趣的朋友一起看看吧
    2021-07-07
  • Python grpc超時機制代碼示例

    Python grpc超時機制代碼示例

    這篇文章主要介紹了Python grpc超時機制代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • logging level級別介紹

    logging level級別介紹

    今天小編就為大家分享一篇logging level級別介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • VSCode設(shè)置Python語言自動格式化的詳細方案

    VSCode設(shè)置Python語言自動格式化的詳細方案

    VSCode Python自動格式化是指使用VSCode編輯器中的Python插件,可以自動對Python代碼進行格式化,使其符合PEP 8規(guī)范,這篇文章主要給大家介紹了關(guān)于VSCode設(shè)置Python語言自動格式化的詳細方案,需要的朋友可以參考下
    2023-07-07
  • Python入門教程(十一)Python中的運算符

    Python入門教程(十一)Python中的運算符

    這篇文章主要介紹了Python入門教程(十一)Python中的運算符,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python 身份驗證和授權(quán)庫使用詳解(python jwt庫)

    Python 身份驗證和授權(quán)庫使用詳解(python jwt庫)

    python_jwt是一個Python庫,用于生成、解析和驗證JSON Web Tokens(JWT),它完全符合JWT標準規(guī)范(RFC 7519),并提供了簡單而強大的API,使得用戶可以輕松地在Python應(yīng)用中實現(xiàn)JWT功能,通過本文的介紹,深入探討了python_jwt庫的功能特性、使用方法以及應(yīng)用場景
    2021-01-01

最新評論

洪洞县| 出国| 昌平区| 滁州市| 瑞丽市| 彭水| 登封市| 乐昌市| 仪陇县| 得荣县| 盐亭县| 临桂县| 界首市| 福州市| 红桥区| 巧家县| 麻江县| 红原县| 将乐县| 肥乡县| 广南县| 新余市| 昆山市| 高碑店市| 库车县| 东兰县| 黄山市| 朝阳区| 东安县| 宁河县| 莱西市| 梅河口市| 岳池县| 通化县| 德保县| 武乡县| 黄平县| 集贤县| 博爱县| 绥德县| 黔东|