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

Python基于MoviePy實現(xiàn)一鍵提取視頻音頻并生成MP3

 更新時間:2025年05月09日 11:17:09   作者:田辛 | 田豆芽  
作為音視頻處理領域的常用需求,視頻轉音頻功能在內容二次創(chuàng)作等場景中應用廣泛,本文將基于MoviePy庫為大家介紹如何實現(xiàn)跨平臺視頻轉MP3工具的開發(fā),感興趣的可以了解下

摘要

昨天, 我在讓一個小朋友給我整理一次培訓的視頻的時候,我看到他把視頻文件放到剪映里面處理。

我以為他要干什么呢, 還很期待,結果他只是為了導出音頻而已。 于是就有了今天的這篇博客。

作為音視頻處理領域的常用需求,視頻轉音頻功能在內容二次創(chuàng)作、語音分析等場景中應用廣泛。本文基于MoviePy庫,手把手教大家實現(xiàn)跨平臺視頻轉MP3工具的開發(fā),涵蓋以下技術要點:

  • 支持MP4/AVI/MOV等主流格式轉換
  • 自動生成同路徑MP3文件
  • 包含異常捕獲與資源管理機制
  • 提供開箱即用的命令行版本

1. 技術方案設計

1.1 工具架構流程圖

1.2 核心依賴說明

# 關鍵庫版本要求
moviepy==1.0.3  # 音視頻處理核心庫

MoviePy官方文檔

MoviePy依賴 Numpy 、 imageio 、 Decorator 和 tqdm ,他們將在安裝MoviePy的同時自動安裝。運行平臺為Windows/Mac/Linux,并使用Python2.7以上的版本和Python3。

MoviePy依賴FFMPEG軟件對視頻進行讀寫。不用對此擔心,在你第一次使用MoviePy的時候,F(xiàn)FMPEG將會自動由ImageIO下載和安裝(不過需要花一些時間)。如果你想使用FFMPEG的特定版本,你可以設置FFMPEG_BINARY環(huán)境變量。

2. 核心代碼實現(xiàn)

2.1 音頻提取函數(shù)

# 導入 moviepy 庫中的 AudioFileClip 類,用于處理視頻文件
from moviepy.audio.io.AudioFileClip import AudioFileClip
# 導入 os 模塊,用于處理文件路徑相關操作
import os

def extract_audio_from_video(video_path, audio_path=None):
    """
    從視頻中提取音頻。
    
    參數(shù):
    video_path (str): 視頻文件的路徑。
    audio_path (str, 可選): 提取后音頻文件的保存路徑,若未提供,則默認與視頻文件同名,擴展名為 .mp3。
    
    返回:
    str: 提取后音頻文件的路徑。
    """
    # 檢查視頻文件是否存在
    if not os.path.isfile(video_path):
        raise FileNotFoundError(f'指定的視頻文件不存在: {video_path}')
    
    # 若未提供音頻保存路徑,則默認使用視頻文件同名且擴展名為 .mp3 的路徑
    if audio_path is None:
        audio_path = os.path.splitext(video_path)[0] + ".mp3"
    
    print(f"提取的音頻路徑: {audio_path}")
    
    try:
        # 創(chuàng)建 AudioFileClip 對象,用于提取視頻中的音頻
        with AudioFileClip(video_path) as audio_clip:
            # 將提取的音頻保存到指定路徑
            audio_clip.write_audiofile(audio_path, codec='mp3')
        return audio_path
    except Exception as e:
        # 打印提取音頻時出現(xiàn)的錯誤信息
        print(f"提取音頻時出錯: {e}")
        # 拋出異常,讓調用者處理
        raise

這里要特別說明: 如果你用過老版本的MoviePy, 你這可能知道這個寫法from moviepy.editor import AudioFileClip。 目前,田辛老師使用這個新版本,已經(jīng)不用再加上.editor這個部分了, 反而加上會報錯。正確的有兩種寫法:

from moviepy.audio.io.AudioFileClip import AudioFileClip

from moviepy import AudioFileClip

2.2 通過streamlit生成調用的圖形界面

2.2.1. 圖形界面layout

初期畫面

上傳文件

處理中

處理結束可以下載,也可以在線聽

2.2.2. 源代碼

import streamlit as st
import os
from datetime import datetime
from video_audio_extractor import extract_audio_from_video
from dotenv import load_dotenv

# 創(chuàng)建輸入和輸出目錄
def create_directories():
    # 獲取當前日期,并格式化為 yyyymmdd 的字符串
    today = datetime.now().strftime('%Y%m%d')
    # 定義輸入目錄,將其設置為 'input' 文件夾下以當前日期命名的子文件夾
    input_dir = os.path.join('input', today)
    # 定義輸出目錄,將其設置為 'output' 文件夾下以當前日期命名的子文件夾
    output_dir = os.path.join('output', today)
    # 創(chuàng)建輸入目錄,如果目錄已存在則不會報錯
    os.makedirs(input_dir, exist_ok=True)
    # 創(chuàng)建輸出目錄,如果目錄已存在則不會報錯
    os.makedirs(output_dir, exist_ok=True)
    # 返回創(chuàng)建好的輸入目錄和輸出目錄路徑
    return input_dir, output_dir

# 主函數(shù)
def main():
    # 加載環(huán)境變量文件
    # 若加載成功,繼續(xù)執(zhí)行后續(xù)操作;若失敗,顯示錯誤信息并終止程序
    if not load_dotenv():
        st.error("讀取配置文件失敗,請檢查配置文件是否存在或路徑是否正確")
        return
    
    # 創(chuàng)建輸入和輸出目錄
    input_dir, output_dir = create_directories()

    # 設置應用標題
    st.title('視頻提取音頻工具')

    # 創(chuàng)建文件上傳組件,僅允許上傳指定類型的視頻文件
    uploaded_file = st.file_uploader('請上傳視頻文件', type=['mp4', 'mov', 'avi'])
    # 創(chuàng)建轉換按鈕
    convert_button = st.button('轉換為音頻文件')

    if uploaded_file is not None and convert_button:
        try:
            # 初始化進度條
            progress_bar = st.progress(0)
            # 獲取上傳文件的擴展名
            file_extension = os.path.splitext(uploaded_file.name)[1]
            # 生成帶有時間戳的新文件名
            new_file_name = f'video_audio_extractor_{datetime.now().strftime("%Y%m%d_%H%M%S")}'
            # 拼接視頻文件保存路徑
            video_path = os.path.join(input_dir, f"{new_file_name}{file_extension}")
            # 拼接音頻文件保存路徑
            audio_path = os.path.join(output_dir, f"{new_file_name}.mp3")
            print(audio_path)
            # 保存上傳的視頻文件
            with open(video_path, 'wb') as f:
                f.write(uploaded_file.getbuffer())
            # 更新進度條到 25%
            progress_bar.progress(25)

            # 調用提取音頻的函數(shù)
            audio_path = extract_audio_from_video(video_path, audio_path)
            # 更新進度條到 100%
            progress_bar.progress(100)

            # 顯示音頻保存成功的消息
            st.success(f'音頻已保存至 {audio_path}')
            # 提供音頻文件下載鏈接
            with open(audio_path, 'rb') as audio_file:
                st.download_button('下載音頻', audio_file, file_name=os.path.basename(audio_path))
            # 顯示音頻播放組件
            with open(audio_path, 'rb') as audio_file:
                st.audio(audio_file, format='audio/mp3')

        except Exception as e:
            # 捕獲并顯示處理過程中出現(xiàn)的錯誤
            st.error(f'處理過程中出錯: {e}')

if __name__ == '__main__':
    main()

3. 典型錯誤處理

錯誤類型解決方案
解碼器缺失MoviePy依賴FFMPEG,如果沒有裝雖然它會自己下載,但是并不是最新版, 如果不可用的話,可以嘗試手動安裝最新版本,并設置環(huán)境變量Path
內存溢出增加臨時目錄設置:os.environ["TEMP"] = "D:/temp"

結語

本文完整實現(xiàn)了從視頻文件提取音頻的自動化工具,開發(fā)者可直接集成到媒體處理系統(tǒng)中。建議搭配FFmpeg官方文檔深入學習音視頻編解碼原理。

到此這篇關于Python基于MoviePy實現(xiàn)一鍵提取視頻音頻并生成MP3的文章就介紹到這了,更多相關Python MoviePy提取視頻音頻內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django如何配置mysql數(shù)據(jù)庫

    Django如何配置mysql數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了Django配置mysql數(shù)據(jù)庫的詳細步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 在Tensorflow中查看權重的實現(xiàn)

    在Tensorflow中查看權重的實現(xiàn)

    今天小編就為大家分享一篇在Tensorflow中查看權重的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python面向對象程序設計類的多態(tài)用法詳解

    Python面向對象程序設計類的多態(tài)用法詳解

    這篇文章主要介紹了Python面向對象程序設計類的多態(tài)用法,結合實例形式詳細分析了Python面向對象程序設計中類的多態(tài)概念、原理、用法及相關操作注意事項,需要的朋友可以參考下
    2019-04-04
  • python如何實現(xiàn)圖片轉文字

    python如何實現(xiàn)圖片轉文字

    這篇文章主要介紹了python如何實現(xiàn)圖片轉文字問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python filter過濾器原理及實例應用

    Python filter過濾器原理及實例應用

    這篇文章主要介紹了Python filter過濾器原理及實例應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 實現(xiàn)python版本的按任意鍵繼續(xù)/退出

    實現(xiàn)python版本的按任意鍵繼續(xù)/退出

    本文給大家簡單介紹了在windows以及l(fā)inux下實現(xiàn)python版本的按任意鍵繼續(xù)/退出功能,非常的簡單實用,linux下稍微復雜些,有需要的小伙伴可以參考下
    2016-09-09
  • 人工智能-Python實現(xiàn)多項式回歸

    人工智能-Python實現(xiàn)多項式回歸

    這篇文章主要介紹了人工智能-Python實現(xiàn)多項式回歸,上一次我們講解了線性回歸,這次我們重點分析多項式回歸,需要的小伙伴可以參考一下
    2022-01-01
  • 淺談python的elementtree模塊處理中文注意事項

    淺談python的elementtree模塊處理中文注意事項

    這篇文章主要介紹了淺談python的elementtree模塊處理中文注意事項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    這篇文章主要介紹了pytorch 運行一段時間后出現(xiàn)GPU OOM的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python?scatter繪制散點圖

    python?scatter繪制散點圖

    這篇文章主要介紹了python?scatter繪制散點圖,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06

最新評論