日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python调用ffmpeg_Python - FFmpeg

發(fā)布時(shí)間:2024/10/8 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python调用ffmpeg_Python - FFmpeg 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

before

FFmpeg不屬于Python的包,只是Python在處理音視頻的時(shí)候,可能會用到這個(gè)工具......

about

引用百度百科,FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開發(fā)的。

FFmpeg在Linux平臺下開發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個(gè)項(xiàng)目最早由Fabrice Bellard發(fā)起,2004年至2015年間由Michael Niedermayer主要負(fù)責(zé)維護(hù)。許多FFmpeg的開發(fā)人員都來自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。

ffmpeg組成

構(gòu)成FFmpeg主要有三個(gè)部分:

第一部分是四個(gè)作用不同的工具軟件,分別是:ffmpeg.exe,ffplay.exe,ffserver.exe和ffprobe.exe。

ffmpeg.exe:音視頻轉(zhuǎn)碼、轉(zhuǎn)換器

ffplay.exe:簡單的音視頻播放器

ffserver.exe:流媒體服務(wù)器

ffprobe.exe:簡單的多媒體碼流分析器

第二部分是可以供開發(fā)者使用的SDK,為各個(gè)不同平臺編譯完成的庫。如果說上面的四個(gè)工具軟件都是完整成品形式的玩具,那么這些庫就相當(dāng)于樂高積木一樣,我們可以根據(jù)自己的需求使用這些庫開發(fā)自己的應(yīng)用程序。這些庫有:

libavcodec:包含音視頻編碼器和解碼器

libavutil:包含多媒體應(yīng)用常用的簡化編程的工具,如隨機(jī)數(shù)生成器、數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)函數(shù)等功能

libavformat:包含多種多媒體容器格式的封裝、解封裝工具

libavfilter:包含多媒體處理常用的濾鏡功能

libavdevice:用于音視頻數(shù)據(jù)采集和渲染等功能的設(shè)備相關(guān)

libswscale:用于圖像縮放和色彩空間和像素格式轉(zhuǎn)換功能

libswresample:用于音頻重采樣和格式轉(zhuǎn)換等功能

第三部分是整個(gè)工程的源代碼,無論是編譯出來的可執(zhí)行程序還是SDK,都是由這些源代碼編譯出來的。FFmpeg的源代碼由C語言實(shí)現(xiàn),主要在Linux平臺上進(jìn)行開發(fā)。FFmpeg不是一個(gè)孤立的工程,它還存在多個(gè)依賴的第三方工程來增強(qiáng)它自身的功能。在當(dāng)前這一系列的博文/視頻中,我們暫時(shí)不會涉及太多源代碼相關(guān)的內(nèi)容,主要以FFmpeg的工具和SDK的調(diào)用為主。到下一系列我們將專門研究如何編譯源代碼并根據(jù)源代碼來進(jìn)行二次開發(fā)。

FFmpeg for Windows

下載

在下載頁面上,我們可以看到,對于32位和64位版本,分別提供了三種不同的模式:static、shared和dev:

static: 該版本提供了靜態(tài)版本的FFmpeg工具,將依賴的庫生成在了最終的可執(zhí)行文件中;作為工具而言此版本就可以滿足我們的需求;

share: 該版本的工具包括可執(zhí)行文件和dll,程序運(yùn)行過程必須依賴于提供的dll文件;

dev: 提供了庫的頭文件和dll的引導(dǎo)庫;

這里我選擇static版本的。

完事點(diǎn)擊下載即可。

安裝

將下載到本地的壓縮包解壓到合適的位置。

比如我將它解壓到G:\software目錄。

配置環(huán)境變量

復(fù)制軟件的bin目錄路徑G:\software\ffmpeg-4.2.1-win64-static\bin,將它添加到系統(tǒng)環(huán)境變量的Path中:

測試

終端執(zhí)行ffmpeg -version命令查看是否安裝成功:

PS:可能有的電腦重啟才能生效....

OK,安裝成功。

usage

先說我之前遇到的問題,我使用OpenCV(4.1.1.26版本)錄制屏幕,然后保存為MP4視頻,最開始是保存AVI的,誰知道,這兩種在前端video標(biāo)簽都無法正常播放。

后來,才知道MP4并不是簡單地.mp4就是我們看到的MP4了。有別的視頻編碼格式不對,瀏覽器仍然無法識別。

經(jīng)過分析,瀏覽器支持的video標(biāo)簽識別h264編碼的MP4視頻。我才有了查詢我用OpenCV錄制的視頻格式的想法。這不是就用到了FFmpeg這個(gè)好用的東東。

查看編碼

ffmpeg -i test.mp4

示例:

C:\Users\Anthony>ffmpeg -i M:\demo\AT2\more\test.mp4

Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D)

省略了其他部分,重點(diǎn)看Video: mpeg4,沒錯(cuò),我用OpenCV錄制的是mpeg4格式的MP4視頻。雖然本地能播放,但瀏覽器卻不能播放,反正我的谷歌和火狐瀏覽器都不能播放,但用別的電腦卻可以,這個(gè)結(jié)果讓我一度認(rèn)為我的視頻沒問題......有大神知道怎么回事的,歡迎指正。

在看個(gè)我的瀏覽器能播放的:

C:\Users\Anthony>ffmpeg -i M:\demo\AT2\more\b.mp4

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 /

沒錯(cuò),h264格式!

不糾結(jié)其中的原因,只思考解決辦法,我只要把mpeg4格式的轉(zhuǎn)換為h264格式的不就完了嘛,是的,我也是這么干的。

視頻編碼轉(zhuǎn)換

是的,將編碼方式是mpeg4格式的MP4視頻轉(zhuǎn)換為h264格式的MP4視頻。

mpeg4轉(zhuǎn)h264

終端執(zhí)行:

ffmpeg -i input.mp4 -vcodec h264 output.mp4 //input.mp4是指要轉(zhuǎn)換視頻的地址;output.mp4是轉(zhuǎn)化后視頻的存放路徑

h264轉(zhuǎn)mpeg4

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

問題

上面的問題,終端使用就沒問題,但是,全部使用Python代碼來解決還是會出現(xiàn)一些問題。

就是在使用Python執(zhí)行終端命令時(shí),出現(xiàn)問題。

問題1

使用下面命令時(shí)會提示,ffmpeg不是可執(zhí)行的命令,意思是說,Python沒有找到ffmpeg可執(zhí)行文件,也可能是我下面代碼寫的有問題。

subprocess.Popen('ffmpeg -i {} -vcode h264 {}'.format('./test.mp4', './test1.mp4'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

解決辦法:

法1,將ffmpeg.exe文件拷貝與腳本文件同級目錄即可。

法2,拿到ffmpeg.exe文件的絕對路徑也一樣。

我選擇法2,但是依然轉(zhuǎn)碼失敗。

后來,我下載了一個(gè)Python相關(guān)庫:

pip install ffmpy3

pip install ffmpy3==3-0.2.3

使用ffmp3解決問題:

import ffmpy3

ffmpy3.FFmpeg(inputs={'./test.mp4': None}, outputs={'test1.mp4':None}).run()

當(dāng)然,此時(shí)的ffmpeg.exe可執(zhí)行文件仍然在腳本的同級目錄,不然依然報(bào)錯(cuò):

ffmpy3.FFExecutableNotFoundError: Executable 'ffmpeg' not found

完整示例:

import cv2

import numpy as np

from PIL import ImageGrab

from threading import Thread

import ffmpy3

a = False

def f1():

ffmpy3.FFmpeg(inputs={'./test.mp4': None}, outputs={'test1.mp4': None}).run()

def f2():

p = ImageGrab.grab()

width, height = p.size

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')

video = cv2.VideoWriter('./test.mp4', fourcc, 8, (width, height), True)

while 1:

img = ImageGrab.grab()

img_bgr = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)

video.write(img_bgr)

if a:

break

video.release()

f1()

def f3():

global a

import time

time.sleep(3)

a = True

if __name__ == '__main__':

Thread(target=f3).start()

f2()

歡迎斧正,that's all

see also:

總結(jié)

以上是生活随笔為你收集整理的python调用ffmpeg_Python - FFmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。