Python中使用moviepy進行視頻分割

来源:https://www.cnblogs.com/badaoliumangqizhi/archive/2019/09/15/11523908.html
-Advertisement-
Play Games

場景 moviepy官網: https://pypi.org/project/moviepy/ 是一個用於視頻編輯的Python庫:切割、連接、標題插入、視頻合成、非線性編輯,視頻處理和定製效果的創建。 Github: https://github.com/Zulko/moviepy 實現 首先你需 ...


場景

moviepy官網:

https://pypi.org/project/moviepy/

是一個用於視頻編輯的Python庫:切割、連接、標題插入、視頻合成、非線性編輯,視頻處理和定製效果的創建。

Github:

https://github.com/Zulko/moviepy

實現

首先你需要安裝moviepy

打開cmd輸入:

pip install moviepy

 

 

其次需要安裝ffmpeg,因為網路問題,這裡使用豆瓣鏡像

pip install imageio-ffmpeg -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

 

 

如果之前那麼沒有安裝過PyQt5,你還需要:

pip install PyQt5 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

 然後新建python文件,輸入代碼

 

import imageio
imageio.plugins.ffmpeg.download()
import win_unicode_console
win_unicode_console.enable()
import sys,os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit,QLabel,
                              QApplication,QFileDialog)
from moviepy.video.io.VideoFileClip  import VideoFileClip


class login(QWidget):
    def __init__(self):
        super(login,self).__init__()
        self.initUI()

    def initUI(self):
        #源文件選擇按鈕和選擇編輯框
        self.source_btn = QPushButton('源文件', self)
        self.source_btn.move(30, 30)
        self.source_btn.resize(60,30)
        self.source_btn.clicked.connect(self.select_source)
        self.source_le = QLineEdit(self)
        self.source_le.move(120, 30)
        self.source_le.resize(250,30)

        # 存儲文件選擇按鈕和選擇編輯框
        self.target_btn = QPushButton('目標路徑', self)
        self.target_btn.move(30, 90)
        self.target_btn.resize(60, 30)
        self.target_btn.clicked.connect(self.select_target)
        self.target_le = QLineEdit(self)
        self.target_le.move(120, 90)
        self.target_le.resize(250, 30)

        #截切開始時間輸入框和提示
        self.startLabel = QLabel(self)
        self.startLabel.move(30, 150)
        self.startLabel.resize(60,30)
        self.startLabel.setText("開始秒")
        self.start_le = QLineEdit(self)
        self.start_le.move(120,150)
        self.start_le.resize(50,30)

        # 截切結束時間輸入框和提示
        self.stopLabel = QLabel(self)
        self.stopLabel.move(230, 150)
        self.stopLabel.resize(60,30)
        self.stopLabel.setText("結束秒")
        self.stop_le = QLineEdit(self)
        self.stop_le.move(320,150)
        self.stop_le.resize(50,30)

        #保存按鈕,調取數據增加函數等
        self.save_btn = QPushButton('開始',self)
        self.save_btn.move(30, 210)
        self.save_btn.resize(140, 30)
        self.save_btn.clicked.connect(self.addNum)

 

        #執行成功返回值顯示位置設置
        self.result_le = QLabel(self)
        self.result_le.move(30, 270)
        self.result_le.resize(340, 30)


        #整體界面設置
        self.setGeometry(400, 400, 400, 400)
        self.setWindowTitle('視頻剪切')#設置界面標題名
        self.show()

    # 打開的視頻文件名稱
    def select_source(self):
        target,fileType = QFileDialog.getOpenFileName(self, "選擇源文件", "C:/")
        self.source_le.setText(str(target))
    #保存的視頻文件名稱,要寫上尾碼名
    def select_target(self):
        target,fileType = QFileDialog.getSaveFileName(self, "選擇保存路徑", "C:/")
        self.target_le.setText(str(target))


    def addNum(self):
        source = self.source_le.text().strip()#獲取需要剪切的文件
        target = self.target_le.text().strip()#獲取剪切後視頻保存的文件
        start_time = self.start_le.text().strip()#獲取開始剪切時間
        stop_time = self.stop_le.text().strip()#獲取剪切的結束時間
        video = VideoFileClip(source)#視頻文件載入
        video = video.subclip(int(start_time), int(stop_time))#執行剪切操作
        video.to_videofile(target, fps=20, remove_temp=True)#輸出文件
        self.result_le.setText("ok!")#輸出文件後界面返回OK
        self.result_le.setStyleSheet("color:red;font-size:40px")#設置OK顏色為紅色,大小為四十像素
        self.result_le.setAlignment(Qt.AlignCenter)#OK在指定框內居中

if __name__=="__main__":
    app = QApplication(sys.argv)
    ex = login()
    sys.exit(app.exec_())

 

 

效果


 

 

 

選擇要分割的視頻以及目標路徑(帶尾碼),然後設置開始與結束時間,單位為秒。

 

 

點擊開始

 

 

完成之後,找到設置的目標路徑

可能出現的問題:

Python中使用pip安裝庫時提示:遠程主機強迫關閉了一個現有的連接:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100851841

imageio.ffmpeg.download() has been deprecated. Use 'pip install im ageio-ffmpeg' instead.':

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100853266

Imageio: 'ffmpeg-win32-v3.2.4.exe' was not found on your computer; downloading it now.:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100857437

ffmpeg-win32-v3.2.4exe.zip:

https://download.csdn.net/download/badao_liumang_qizhi/11747539

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新聞 "宣告ML.NET 1.4的預覽版及更新模型構建器" ".NET展示會:一系列的活動!" "Octopus入門版:對於小團隊免費" "宣告.NET Core 3.0預覽版9" "使用IntelliCode更簡單地進行重構" ".NET Core 3.0預覽版9中ASP.NET Core與Bla ...
  • Python3實戰Spark大數據分析及調度 搜索QQ號直接加群獲取其它學習資料:715301384 部分課程截圖: 鏈接:https://pan.baidu.com/s/12VDmdhN4hr7ypdKTJvvgKg 提取碼:cv9z PS:免費分享,若點擊鏈接無法獲取到資料,若如若鏈接失效請加群 ...
  • 記憶體四區 代碼區:存放函數體第二進位代碼,由操作戲臺進行管理 數據區:存放全局變數和靜態變數以及常量 棧區:由編譯器自動分配釋放,存放函數的參數值,局部變數等 堆區:由程式員分配和釋放,若程式員不是放,程式結束時由操作系統回收 代碼區:存放函數體第二進位代碼,由操作戲臺進行管理 數據區:存放全局變數 ...
  • 初識工廠模式 我們先看工廠模式的介紹 這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的介面來指向新創建的對象。 簡單來說,使用了C++ 多態 的特性,將存在 繼承 關係的類,通過一個 工廠類創建 對應 ...
  • 兩步驗證是指用戶登錄賬戶的時候,除了要輸入用戶名和密碼,還要求用戶輸入一個動態密碼,為帳戶添加了一層額外保護。這個動態密碼要麼是專門的硬體,要麼由用戶手機APP提供。即使入侵者竊取了用戶密碼,也會因不能使用用戶手機而無法登錄帳戶。許多游戲客戶端和網銀採用這種方式。以銀行為例,當用戶進行轉賬操作時,第... ...
  • 給定一個無序單鏈表,實現單鏈表的選擇排序(按升序排序)。 代碼註釋挺詳細,直接上代碼! ...
  • 背景 1、本人本科一本雙非墊底的那種,碩士211。本碩電子通信,完全0基礎,轉行一年。 2、研一上第一學期上課+外派到老師合作公司寫MATLAB。去年4月開始學習Java。 起步 1、實話說,剛決定轉行的時候完全零基礎一開始真的啥也不會,甚至不知道怎麼去學習。的確,電腦資源很多,自學足夠的但是完全 ...
  • Hello python 2019年9月2號是我學Python的第一天,在接下來6個月里,我要做到的是精通。 對,就是精通。 附上我高中時最喜歡的一句:Where there is a will,there is a way ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...