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

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

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

摘要

昨天, 我在讓一個(gè)小朋友給我整理一次培訓(xùn)的視頻的時(shí)候,我看到他把視頻文件放到剪映里面處理。

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

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

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

1. 技術(shù)方案設(shè)計(jì)

1.1 工具架構(gòu)流程圖

1.2 核心依賴說明

# 關(guān)鍵庫版本要求
moviepy==1.0.3  # 音視頻處理核心庫

MoviePy官方文檔

MoviePy依賴 Numpy 、 imageio 、 Decorator 和 tqdm ,他們將在安裝MoviePy的同時(shí)自動(dòng)安裝。運(yùn)行平臺(tái)為Windows/Mac/Linux,并使用Python2.7以上的版本和Python3。

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

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

2.1 音頻提取函數(shù)

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

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

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

from moviepy.audio.io.AudioFileClip import AudioFileClip

from moviepy import AudioFileClip

2.2 通過streamlit生成調(diào)用的圖形界面

2.2.1. 圖形界面layout

初期畫面

上傳文件

處理中

處理結(jié)束可以下載,也可以在線聽

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

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

    # 設(shè)置應(yīng)用標(biāo)題
    st.title('視頻提取音頻工具')

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

    if uploaded_file is not None and convert_button:
        try:
            # 初始化進(jìn)度條
            progress_bar = st.progress(0)
            # 獲取上傳文件的擴(kuò)展名
            file_extension = os.path.splitext(uploaded_file.name)[1]
            # 生成帶有時(shí)間戳的新文件名
            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())
            # 更新進(jìn)度條到 25%
            progress_bar.progress(25)

            # 調(diào)用提取音頻的函數(shù)
            audio_path = extract_audio_from_video(video_path, audio_path)
            # 更新進(jìn)度條到 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)的錯(cuò)誤
            st.error(f'處理過程中出錯(cuò): {e}')

if __name__ == '__main__':
    main()

3. 典型錯(cuò)誤處理

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

結(jié)語

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

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

相關(guān)文章

  • 如何基于python實(shí)現(xiàn)不鄰接植花

    如何基于python實(shí)現(xiàn)不鄰接植花

    這篇文章主要介紹了如何基于python實(shí)現(xiàn)不鄰接植花,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python Log文件大小設(shè)置及備份的方法

    Python Log文件大小設(shè)置及備份的方法

    這篇文章主要介紹了Python Log文件大小設(shè)置及備份的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Python進(jìn)程的通信Queue、Pipe實(shí)例分析

    Python進(jìn)程的通信Queue、Pipe實(shí)例分析

    這篇文章主要介紹了Python進(jìn)程的通信Queue、Pipe,結(jié)合實(shí)例形式分析了Python進(jìn)程通信Queue、Pipe基本概念、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • 如何使用Python的OpenCV庫處理圖像和視頻

    如何使用Python的OpenCV庫處理圖像和視頻

    基于opencv可以顯示圖片,并進(jìn)行相應(yīng)的處理,下面這篇文章主要給大家介紹了關(guān)于如何使用Python的OpenCV庫處理圖像和視頻的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 詳解如何使用OpenCV和像素處理圖像灰度化

    詳解如何使用OpenCV和像素處理圖像灰度化

    這篇文章主要為大家介紹了如何使用OpenCV和像素處理圖像灰度化的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • python調(diào)試過程中多顏色輸出方式

    python調(diào)試過程中多顏色輸出方式

    這篇文章主要介紹了python調(diào)試過程中多顏色輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python實(shí)現(xiàn)將HTML轉(zhuǎn)換成doc格式文件的方法示例

    Python實(shí)現(xiàn)將HTML轉(zhuǎn)換成doc格式文件的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)將HTML轉(zhuǎn)換成doc格式文件的方法,涉及Python htmlparser及docx模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2017-11-11
  • python實(shí)現(xiàn)圖片自動(dòng)分類小程序

    python實(shí)現(xiàn)圖片自動(dòng)分類小程序

    這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)圖片自動(dòng)分類小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • pycharm打開chrome自動(dòng)退出錯(cuò)誤的解決方法

    pycharm打開chrome自動(dòng)退出錯(cuò)誤的解決方法

    這篇文章主要給大家介紹了關(guān)于pycharm打開chrome自動(dòng)退出錯(cuò)誤的解決方法,文中通過實(shí)例代碼以及圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Python數(shù)據(jù)存儲(chǔ)之 h5py詳解

    Python數(shù)據(jù)存儲(chǔ)之 h5py詳解

    今天小編就為大家分享一篇Python數(shù)據(jù)存儲(chǔ)之 h5py詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論

隆林| 宣恩县| 麟游县| 淮北市| 华蓥市| 尼木县| 抚顺市| 中方县| 磐石市| 和田市| 砀山县| 阜宁县| 灵宝市| 兴和县| 黑水县| 阿合奇县| 阳原县| 道孚县| 平阳县| 柞水县| 定结县| 丹东市| 丹阳市| 黄山市| 云梦县| 武鸣县| 澳门| 黄龙县| 呼玛县| 北京市| 康乐县| 嘉定区| 马尔康县| 吉隆县| 青川县| 昌图县| 英吉沙县| 皮山县| 广州市| 班戈县| 丘北县|