使用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实现视频分割与合并的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉牛人(转载)(最早在自动化所论
- 下一篇: 介绍几个医学图像处理会议