中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何利用moviepy實現音視頻剪輯

發布時間:2021-06-15 14:25:05 來源:億速云 閱讀:272 作者:chen 欄目:開發技術

這篇文章主要介紹“python如何利用moviepy實現音視頻剪輯”,在日常操作中,相信很多人在python如何利用moviepy實現音視頻剪輯問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python如何利用moviepy實現音視頻剪輯”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

實踐步驟

1.尋找合適的Python庫(安裝是否麻煩、使用是否簡便、執行會不會太久)

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

2.定義輸入輸出

  • 輸入:一個音視頻文件的地址,需要剪出來的時間段

  • 輸出:剪輯片段的文件

3.設計執行流程并一步步實現(定義函數,與使用具體API相關)

  1. 讀入并創建clip對象。

  2. 剪輯subclip,輸入時間參數可以是時間格式的字符串。

  3. 導出write_videofile。

4.結論:時間太久,片段多長就花了多久的時間;CPU全跑滿了。

stackoverflowConcat videos too slow using Python MoviePY 里面有個答案說,調用包里封裝的ffmpeg函數會快一些:

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.重新設計和實現,直接使用moviepy.video.io.ffmpeg_tools里的函數:ffmpeg_extract_subclip(源音視頻文件,起,止,輸出名)。

  • 這個函數中輸入的起止時間參數只能是數字,不能是字符串,而庫基本使用的接口函數傳入的是字符串。看源碼發現是有個把時間字符串轉換成數字的裝飾器的,一步步找就可以找到那個轉換的函數了。

6.結論:時間快了很多,幾乎是幾秒內就完成。

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

7.優化:一次處理多個時間段

  1. 輸入由一個起止時間,變為一組起止時間

  2. 循環處理每一組起止時間

  3. 輸出的文件名按順序拼接

8.優化:每段時間配上名字

  1. 輸入除了每一組的起止時間,還有后綴名

  2. 文件名+后綴得到輸出的文件名

9.優化:輸入輸出的合法性校驗

  • 校驗輸入地址是合法文件

  • 校驗時間段(沒什么必要)

    • 不可以小于0

    • 不可以大于視頻時間

    • 起小于止

完整代碼

需要pip install moviepy

簡單的使用

from moviepy.editor import VideoFileClip, concatenate_videoclips

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


#截取兩個subclip再拼接
#time_length = int(clipOri.duration) 這句可以獲取片子的時
#超過時長會報錯,時長默認用秒,也可以寫得更細,(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('.') # 最后一個點號
    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', '項目經歷'),
    ('17:37','24:40', 'HTTPS'),
    ('24:40','28:10', '實現讀寫鎖'),
]

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

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

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

到此,關于“python如何利用moviepy實現音視頻剪輯”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

垦利县| 平安县| 久治县| 晋州市| 墨江| 永新县| 九龙城区| 正安县| 新民市| 通江县| 渭源县| 涿鹿县| 高淳县| 兴安盟| 原阳县| 偃师市| 襄樊市| 嘉祥县| 随州市| 利辛县| 四子王旗| 鄂尔多斯市| 宕昌县| 武功县| 阳春市| 邓州市| 广平县| 左贡县| 天台县| 阿克陶县| 增城市| 静乐县| 遂平县| 依安县| 古丈县| 苏尼特右旗| 镇康县| 运城市| 枞阳县| 崇阳县| 拉萨市|