編程學習網 > 編程語言 > Python > 使用Python+FFMPEG實現視頻分割與合并教程
2023
07-22

使用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('\n'.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()
搞定!
以上就是使用Python+FFMPEG實現視頻分割與合并教程的詳細內容,想要了解更多Python教程歡迎持續關注編程學習網。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取