前言
第一次處理視頻素材可以手動(dòng)用剪映來處理,然后再用代碼進(jìn)行自動(dòng)化處理,不然連朝哪個(gè)方向自動(dòng)化處理可能都不知道
那清楚處理流程之后,怎么用Python來處理視頻素材呢?
ffmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序
使用這個(gè)神器,便可以處理各種視頻素材內(nèi)容,極度舒適
下面一行來分享一下如何使用這個(gè)神器
一、安裝
首先需要在ffmpeg的官網(wǎng)下載最新版本,不然可能會(huì)出現(xiàn)各種奇怪的問題
因?yàn)閒fmpeg是個(gè)命令行工具,所以安裝時(shí)需要注意將ffmpeg加入環(huán)境變量中,安裝完之后,可以在終端里輸入下面命令查看是否安裝成功
1
|
ffmpeg - version |
二、subprocess調(diào)用
因?yàn)閒fmpeg是命令行工具,可以通過subprocess的調(diào)用來使用
先查看使用文檔,例如拆分視頻文件的命令是:
1
|
ffmpeg - i [filename] - ss [starttime] - t [length] - c copy [newfilename] |
- i 為需要裁剪的文件
- ss 為裁剪開始時(shí)間
- t 為裁剪結(jié)束時(shí)間或者長(zhǎng)度
- c 為裁剪好的文件存放
好了,用 Python 寫一個(gè)調(diào)用:
1
2
3
4
5
6
7
|
import subprocess as sp def cut_video(filename, outfile, start, length = 90 ): cmd = "ffmpeg -i %s -ss %d -t %d -c copy %s" % (filename, start, length, outfile) p = sp.Popen(cmd, shell = True ) p.wait() return |
- 定義了一個(gè)函數(shù),通過參數(shù)傳入 ffmpeg 需要的信息
- 將裁剪命令寫成一個(gè)字符串模板,將參數(shù)替換到其中
- 用 subprocess 的 Popen 執(zhí)行命令,其中參數(shù) shell=True 表示將命令作為一個(gè)整體執(zhí)行
- p.wait() 很重要,因?yàn)椴眉粜枰粫?huì)兒,而且是另起進(jìn)程執(zhí)行的,所以需要等待執(zhí)行完成再繼續(xù)執(zhí)行后面工作,不然可能找不到文件
三、ffmpy3
ffmpy3是ffmpeg的python包裝器,以可以用這個(gè)包來進(jìn)行處理視頻
需要先用pip進(jìn)行安裝
1
|
pip install ffmpy3 |
例如修改文件格式這種操作就可以使用ffmpy3直接輸出
1
2
3
4
5
6
|
import ffmpy3 ff = ffmpy3.FFmpeg( inputs = { 'input.mp4' : None }, outputs = { 'output.avi' : None } ) ff.run() |
轉(zhuǎn)碼
如果同時(shí)我們想使用不同的編解碼器重新編碼視頻和音頻,在輸出文件同時(shí)必須指定額外的輸出選項(xiàng):
1
2
3
4
5
6
|
ff = FFmpeg( inputs = { 'input.ts' : None }, outputs = { 'output.mp4' : '-c:a mp2 -mpeg2video' } ) ff.cmd ff.run() |
解復(fù)用
還可以將文件的音頻和視頻輸出成兩個(gè)mp4格式的文件
1
2
3
4
5
6
7
8
9
|
ff = FFmpeg( inputs = { 'input.ts' : None }, outputs = { 'video.mp4' : [ '-map' , '0:0' , '-c:a' , 'copy' , '-f' , 'mp4' ], 'audio.mp4' : [ '-map' , '0:1' , '-c:a' , 'copy' , '-f' , 'mp4' ] } ) ff.cmd ff.run() |
復(fù)用
復(fù)用就是將輸入的mp4文件和mp3文件合成同一個(gè)視頻文件
這里使用 OrderedDict 來保留輸入的順序,以便它們與輸出選項(xiàng)中的流的順序相匹配:
1
2
3
4
5
6
|
from collections import OrderedDict inputs = OrderedDict([( 'video.mp4' , None ), ( 'audio_1.mp3' , None ), ( 'audio_2.mp3' , None )]) outputs = { 'output.ts' , '-map 0 -c:v h264 -map 1 -c:a:0 ac3 -map 2 -c:a:1 mp2' } ff = FFmpeg(inputs = inputs, outputs = outputs) ff.cmd ff.run() |
拆分成圖片
處理視頻素材內(nèi)容還需要將視頻拆成一張張圖片,對(duì)圖片進(jìn)行處理,然后再合并成視頻
在輸出的文件類型改成.png結(jié)尾即可
1
2
3
4
5
6
|
import ffmpy3 ff = ffmpy3.FFmpeg( inputs = { 'data.MP4' : None }, outputs = { '1/%d.png' : None } ) ff.run() |
四、最后
通過ffmpeg處理視頻主要還是要了解它的命令用法,可以在官方文檔里進(jìn)行查看
然后再去了解各種熱門視頻的模版,自動(dòng)化生成自己想要的視頻指日可待
到此這篇關(guān)于Python 如何利用ffmpeg 處理視頻素材的文章就介紹到這了,更多相關(guān)Python ffmpeg 視頻素材處理內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/qq_42554007/article/details/121504147