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

python基于moviepy實(shí)現(xiàn)音視頻剪輯

 更新時(shí)間:2021年06月15日 11:34:34   作者:ratiger  
為了方便學(xué)習(xí)和復(fù)習(xí),需要把一些長(zhǎng)音視頻剪成一些小片段。本文介紹如何用Python實(shí)現(xiàn),把音視頻中的某一些片段剪出來(lái)。

實(shí)踐步驟

1.尋找合適的Python庫(kù)(安裝是否麻煩、使用是否簡(jiǎn)便、執(zhí)行會(huì)不會(huì)太久)

  • moviepy 音視頻庫(kù)。分析需要用的API:代碼示例

2.定義輸入輸出

  • 輸入:一個(gè)音視頻文件的地址,需要剪出來(lái)的時(shí)間段
  • 輸出:剪輯片段的文件

3.設(shè)計(jì)執(zhí)行流程并一步步實(shí)現(xiàn)(定義函數(shù),與使用具體API相關(guān))

  1. 讀入并創(chuàng)建clip對(duì)象。
  2. 剪輯subclip,輸入時(shí)間參數(shù)可以是時(shí)間格式的字符串。
  3. 導(dǎo)出write_videofile。

4.結(jié)論:時(shí)間太久,片段多長(zhǎng)就花了多久的時(shí)間;CPU全跑滿(mǎn)了。

stackoverflowConcat videos too slow using Python MoviePY 里面有個(gè)答案說(shuō),調(diào)用包里封裝的ffmpeg函數(shù)會(huì)快一些:

You have some functions that perform direct calls to ffmpeg: github.com/Zulko/movie… And are therefore extremely efficient, for simple tasks such as yours.

5.重新設(shè)計(jì)和實(shí)現(xiàn),直接使用moviepy.video.io.ffmpeg_tools里的函數(shù):ffmpeg_extract_subclip(源音視頻文件,起,止,輸出名)。

  • 這個(gè)函數(shù)中輸入的起止時(shí)間參數(shù)只能是數(shù)字,不能是字符串,而庫(kù)基本使用的接口函數(shù)傳入的是字符串。看源碼發(fā)現(xiàn)是有個(gè)把時(shí)間字符串轉(zhuǎn)換成數(shù)字的裝飾器的,一步步找就可以找到那個(gè)轉(zhuǎn)換的函數(shù)了。

6.結(jié)論:時(shí)間快了很多,幾乎是幾秒內(nèi)就完成。

  • 但并不明白為什么快了這么多

7.優(yōu)化:一次處理多個(gè)時(shí)間段

  1. 輸入由一個(gè)起止時(shí)間,變?yōu)橐唤M起止時(shí)間
  2. 循環(huán)處理每一組起止時(shí)間
  3. 輸出的文件名按順序拼接

8.優(yōu)化:每段時(shí)間配上名字

  1. 輸入除了每一組的起止時(shí)間,還有后綴名
  2. 文件名+后綴得到輸出的文件名

9.優(yōu)化:輸入輸出的合法性校驗(yàn)

  • 校驗(yàn)輸入地址是合法文件
  • 校驗(yàn)時(shí)間段(沒(méi)什么必要)
    • 不可以小于0
    • 不可以大于視頻時(shí)間
    • 起小于止

完整代碼

需要pip install moviepy

簡(jiǎn)單的使用

from moviepy.editor import VideoFileClip, concatenate_videoclips

clipOri = VideoFileClip("E:/2020-03-29 19-31-39.mkv")


#截取兩個(gè)subclip再拼接
#time_length = int(clipOri.duration) 這句可以獲取片子的時(shí)
#超過(guò)時(shí)長(zhǎng)會(huì)報(bào)錯(cuò),時(shí)長(zhǎng)默認(rèn)用秒,也可以寫(xiě)得更細(xì),(00:03:50.54)->3分50秒

cut1 = clipOri.subclip(0, 7053)
cut2 = clipOri.subclip(7059, 8941)

finalClip = concatenate_videoclips([cut1,cut2])

finalClip.write_videofile("E:/acut.mp4")
import os
import moviepy.video.io.ffmpeg_tools as fftool
from moviepy.tools import cvsecs

def add_suffix(file_name, suffix): # 文件名拼接后綴
    index = file_name.rfind('.') # 最后一個(gè)點(diǎn)號(hào)
    res = file_name[:index] + '_' + suffix + file_name[index:]
    return res

# 輸入
file_name = r"./XXX.mkv"
output_arr = [
    ('04:20','05:07', '自我介紹'),
    ('05:07','17:47', '項(xiàng)目經(jīng)歷'),
    ('17:37','24:40', 'HTTPS'),
    ('24:40','28:10', '實(shí)現(xiàn)讀寫(xiě)鎖'),
]

if not os.path.isfile(file_name): # 校驗(yàn)
    print("不合法的輸入", file_name)

for startStr, endStr, suffix in output_arr:
    start = cvsecs(startStr)
    end = cvsecs(endStr)
    
    if start < 0 or start >= end: # 校驗(yàn)
        print("不合法的時(shí)間",startStr, endStr)
        continue

    full_output_name = add_suffix(file_name, suffix)
    print('處理文件:', file_name, '時(shí)間:', startStr, '-', endStr)
    fftool.ffmpeg_extract_subclip(file_name,start,end,full_output_name) # 剪輯并輸出
    print('處理功成功,輸出:',full_output_name)

參考

以上就是python基于moviepy實(shí)現(xiàn)音視頻剪輯的詳細(xì)內(nèi)容,更多關(guān)于python moviepy實(shí)現(xiàn)音視頻剪輯的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)單例模式的四種方式詳解

    Python實(shí)現(xiàn)單例模式的四種方式詳解

    單例模式可以保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn)。本文為大家介紹了Python實(shí)現(xiàn)單例模式的四種方式,需要的可以參考一下
    2022-05-05
  • python基礎(chǔ)教程之lambda表達(dá)式使用方法

    python基礎(chǔ)教程之lambda表達(dá)式使用方法

    lambda表達(dá)式相當(dāng)于函數(shù)體為單個(gè)return語(yǔ)句的普通函數(shù)的匿名函數(shù),本文主要介紹lambda表達(dá)式使用方法
    2014-02-02
  • Python基礎(chǔ)知識(shí)點(diǎn) 初識(shí)Python.md

    Python基礎(chǔ)知識(shí)點(diǎn) 初識(shí)Python.md

    在本篇文章中我們給大家總結(jié)了關(guān)于Python基礎(chǔ)知識(shí)點(diǎn),通過(guò)初識(shí)Python.md的相關(guān)內(nèi)容分享給Python初學(xué)者,一起來(lái)看下吧。
    2019-05-05
  • Python類(lèi)的基本寫(xiě)法與注釋風(fēng)格介紹

    Python類(lèi)的基本寫(xiě)法與注釋風(fēng)格介紹

    這篇文章主要介紹了Python類(lèi)的基本寫(xiě)法與注釋風(fēng)格,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • python在windows下創(chuàng)建隱藏窗口子進(jìn)程的方法

    python在windows下創(chuàng)建隱藏窗口子進(jìn)程的方法

    這篇文章主要介紹了python在windows下創(chuàng)建隱藏窗口子進(jìn)程的方法,涉及Python使用subprocess模塊操作進(jìn)程的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 使用Python批量連接華為網(wǎng)絡(luò)設(shè)備的操作步驟

    使用Python批量連接華為網(wǎng)絡(luò)設(shè)備的操作步驟

    隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和設(shè)備數(shù)量的增加,手動(dòng)配置和管理每臺(tái)網(wǎng)絡(luò)設(shè)備變得越來(lái)越不現(xiàn)實(shí),因此,自動(dòng)化工具和腳本變得尤為重要,本篇文章將詳細(xì)介紹如何使用Python批量連接華為網(wǎng)絡(luò)設(shè)備,實(shí)現(xiàn)自動(dòng)化配置和管理,需要的朋友可以參考下
    2024-06-06
  • Python去除html標(biāo)簽的幾種方法總結(jié)

    Python去除html標(biāo)簽的幾種方法總結(jié)

    這篇文章主要介紹了Python去除html標(biāo)簽的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python用threading實(shí)現(xiàn)多線(xiàn)程詳解

    Python用threading實(shí)現(xiàn)多線(xiàn)程詳解

    這篇文章主要給大家介紹了Python用threading實(shí)現(xiàn)多線(xiàn)程的方法示例,文中介紹的很詳細(xì),對(duì)大家具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-02-02
  • python自定義封裝帶顏色的logging模塊

    python自定義封裝帶顏色的logging模塊

    大家好,本篇文章主要講的是python自定義封裝帶顏色的logging模塊,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-02-02
  • Python3.x+pycharm+Anaconda中縮小打包的.exe體積的問(wèn)題

    Python3.x+pycharm+Anaconda中縮小打包的.exe體積的問(wèn)題

    這篇文章主要介紹了Python3.x+pycharm+Anaconda中縮小打包的.exe體積的問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家分享解決方案,需要的朋友可以參考下
    2021-08-08

最新評(píng)論