日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

使用Python+FFMPEG实现视频分割与合并

發布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用Python+FFMPEG实现视频分割与合并 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

日常中偶爾會遇到需要簡單剪輯處理視頻的場景,以前我可能會拿出PR來剪輯一下,(別跟我說國產那些軟件,剪輯完視頻強制加上廣告片頭片尾惡心的一批),但是PR畢竟太重量級,剪個簡單的視頻都要花不少時間,直到我發現了FFmpeg……

這個FFmpeg真的是神器,免費開源功能強大,好像很多軟件都是基于這個開發的,它本身提供了命令行接口就已經能滿足我們日常的簡單視頻處理需求,我用來簡單處理視頻分割、合并,真的很香。

不過命令行用來處理一兩個還行,如果是要處理多個視頻,或者是服務端有視頻處理的需求(如轉碼、加水印這類),就需要有一種方便的方法在代碼里運用FFmpeg,于是本文打算介紹python和FFmpeg間的無縫接入調用~

ffmpy

首先FFmpeg是一個可執行文件,要在Python中調用FFmpeg并且監控它的狀態,需要使用類似os.system()或者是subprocess模塊來創建子進程,需要自己處理很多工作,比較麻煩……

ffmpy庫就是幫我們解決這個問題的,完美整合FFmpeg,把子進程管理封裝好了,我們直接輸入好參數調用就完事了

代碼

本文只是簡單介紹python中調用ffmpeg的方法,FFmpeg的功能很強大,限于篇幅本文不能一一介紹FFmpeg的功能,想深入了解FFmpeg的同學可以查看最后的參考資料~

視頻分割

例子是最簡單的從一個視頻中分割出一個片段的用法,并且使用了-vcodec copy -acodec copy參數,表示音頻和視頻都不轉碼提高處理視頻的速度。

操作看下面的代碼就知道了,輸入輸出,安排得明明白白,輸入和輸出都是字典類型,文件名是key,參數是value。

import ffmpy

ff = ffmpy.FFmpeg(
    inputs={'input.mp4': None},
    outputs={'output.mp4': [
        '-ss', '00:01:20',
        '-t', '02:00:00',
        '-vcodec', 'copy',
        '-acodec', 'copy'
    ]}
)

ff.run()

在執行ff.run()之前,可以先用print(ff.cmd)把命令打印出來看看。

上述的視頻分割操作,對應的FFmpeg命令是:

ffmpeg -i input.mp4 -ss 00:01:20 -t 02:00:00 -vcodec copy -acodec copy output.mp4

視頻合并

視頻合并就比較麻煩了,如果直接用FFmpeg命令輸入多個視頻文件,輸出一個的話,需要轉碼過程,這樣速度就很慢了,失去了合并的意義。

我找了資料,只有使用文件列表的方式來合并視頻是可以直接合并不轉碼的,不過這要求先創建一個文件用來保存視頻列表,在Python中,我們可以通過創建臨時文件來實現。

代碼如下:

import os
import tempfile
import ffmpy

# 創建臨時文件
temp_dir = tempfile.mktemp()
os.mkdir(temp_dir)
concat_file = os.path.join(temp_dir, 'concat_list.txt')

with open(concat_file, 'w', encoding='utf-8') as f:
    f.write('
'.join([
        'file C:/1.mp4',
        'file C:/2.mp4',
        'file C:/3.mp4',
    ]))

ff = ffmpy.FFmpeg(
    global_options=['-f', 'concat'],
    inputs={concat_file: None},
    outputs={'output.mp4': ['-c', 'copy']}
)

ff.run()

搞定!

參考資料

ffmpy官方文檔:https://ffmpy-zh.readthedocs.io/zh/latest/ffmpy.html
用 Python 代碼生成視頻的縮略圖:https://blog.csdn.net/fei347795790/article/details/102068777
FFMPEG 視頻分割和合并:https://www.jianshu.com/p/cf1e61eb6fc8
FFmpeg 視頻處理入門教程:https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

歡迎交流

程序設計實驗室專注于互聯網熱門新技術探索與團隊敏捷開發實踐,在公眾號「程序設計實驗室」后臺回復 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號后臺留言~

博客園:https://www.cnblogs.com/deali/
打代碼直播間:https://live.bilibili.com/11883038
知乎:https://www.zhihu.com/people/dealiaxy

It never rains but it pours.
歡迎關注我的公眾號:DealiAxy 提供更多技術文章

總結

以上是生活随笔為你收集整理的使用Python+FFMPEG实现视频分割与合并的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。