久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python玩轉(zhuǎn)各種多媒體,,視頻、音頻到圖片

 雨潤(rùn)心田品風(fēng)雨 2020-06-04

我們經(jīng)常會(huì)遇到一些對(duì)于多媒體文件修改的操作,,像是對(duì)視頻文件的操作:視頻剪輯,、字幕編輯、分離音頻,、視頻音頻混流等,。又比如對(duì)音頻文件的操作:音頻剪輯,音頻格式轉(zhuǎn)換,。再比如我們最常用的圖片文件,,格式轉(zhuǎn)換、各個(gè)屬性的編輯等,。因?yàn)槎嗝襟w文件的操作眾多,,本文選取一些極具代表性的操作,以代碼的形式實(shí)現(xiàn)各個(gè)操作,。

一,、圖片操作

操作圖片的模塊有許多,其中比較常用的兩個(gè)就是Pillowopencv,兩個(gè)模塊各有優(yōu)勢(shì),。其中opencv是計(jì)算機(jī)視覺(jué)處理的開(kāi)源模塊,,應(yīng)用的范圍更加廣泛,從圖像處理到視頻處理,,再到物體檢測(cè)等,。而pillow相比直線就單純的多,其大多數(shù)操作都是圍繞圖像而展開(kāi)的,。

1.1,、格式轉(zhuǎn)換

圖片格式有多種多樣,,最直觀的感受就是圖片后綴。而格式之間的差異不僅僅是后綴的差異,,最為明顯的就是png格式圖片,,同其它圖片有著最為直觀的區(qū)別。下面我們就看看在Python中如何轉(zhuǎn)換格式,,我們先安裝pillow模塊:

pip install pillow

然后看看如何導(dǎo)入模塊以及如何讀取圖像:

from PIL import Image
# 讀取圖像
img = Image.open('ycjc.jpg')
# 顯示圖像
img.show()

我們有了上面的基礎(chǔ)操作之后,,就可以開(kāi)始進(jìn)行格式轉(zhuǎn)換了,我們用有村大妹子的圖片作為素材:


我們可以看到這是一張白色背景的圖片,,我們將它轉(zhuǎn)成png看看效果:

from PIL import Image
# 讀取圖像
img = Image.open('ycjc.jpg')
# 格式轉(zhuǎn)換,,其中A為透明度
png = img.convert('RGBA')
# 保存圖像,因?yàn)槭荝GBA格式,,所以后綴應(yīng)該為png
png.save('ycjc.png')

輸出的圖片我就不放了,,我們觀察輸出圖片會(huì)發(fā)現(xiàn),白色背景好像變透明了,。不要懷疑,,這只是心理作用,其實(shí)圖片看上去是不會(huì)有任何變化的,。但是實(shí)際上圖片從原來(lái)的RGB三個(gè)色道變成了RGBA四個(gè)色道,,我們會(huì)發(fā)現(xiàn),圖片變大了:

在這里插入圖片描述

雖然A色道的透明度全部都是0,,但是實(shí)際上還是存在這個(gè)色道,,所以大小方面有了明顯的增加。更多轉(zhuǎn)換模式可以參考超全Python圖像處理講解(多圖預(yù)警),。

1.2,、圖片裁剪

圖片裁剪的操作也非常常用,我們來(lái)看看pillow如何裁剪圖片:

from PIL import Image
# 讀取圖像
img = Image.open('ycjc.jpg')
# 裁剪圖像,,調(diào)用crop方法,,傳入裁剪區(qū)域的元組
img_crop = img.crop((100100400400))
# 保存裁剪后的圖像
img_crop.save('ycjc_crop.jpg')

我們調(diào)用crop方法,傳入裁剪區(qū)域的元組進(jìn)行裁剪,,元組的內(nèi)容為左上角的坐標(biāo)(前兩個(gè)參數(shù))即右下角的坐標(biāo)(后兩個(gè)參數(shù)),。效果圖如下:

1.3、截屏

雖然算不上是圖像操作,,但是還是個(gè)非常實(shí)用的操作,。我們實(shí)現(xiàn)截屏是通過(guò)ImageGrap類實(shí)現(xiàn)的:

from PIL import ImageGrab
# 截取全屏
im = ImageGrab.grab()
# 保存圖像
im.save('win.png')

除了截取全屏我們也可以區(qū)域截屏:

im =ImageGrab.grab((3001001400600))

參數(shù)元組含義與crop方法一致。

除了上述操作,,還有更多像是添加濾鏡,、對(duì)比度調(diào)節(jié)、亮度調(diào)節(jié)、色彩調(diào)節(jié)等,,由于內(nèi)容眾多,,所以不在本文詳細(xì)討論,。

二,、音頻操作

音頻的操作也比較繁多,我們最常用到的就是音頻剪輯和音量調(diào)節(jié)了,。我們這里使用pydub模塊來(lái)進(jìn)行音頻文件的操作,。

2.1、pydub的安裝以及讀取音頻

安裝我們還是使用pip:

pip install pydub

然后我們來(lái)讀取一個(gè)wav文件:

from pydub import AudioSegment
# 讀取wav格式的音頻文件
music = AudioSegment.from_wav('百年孤獨(dú).wav')

這樣我們就完成了音頻文件的讀取,,wav文件是一種未經(jīng)壓縮的文件,,我們可以通過(guò)pydub直接讀取。讀取其它類型的文件pydub同樣提供了相應(yīng)的方法:

music = AudioSegment.from_mp3('music.mp3')
music = AudioSegment.from_ogg('music.ogg')
music = AudioSegment.from_flv('music.flv')

因?yàn)樵趯?shí)際操作過(guò)程中遇到了一個(gè)未找明緣由的錯(cuò)誤,,所以本文的音頻操作只針對(duì)wav格式,。

2.2、音頻剪切

音頻剪輯的實(shí)現(xiàn)我們是通過(guò)類似ndarray的中括號(hào)操作的:

# 截取前20秒
clip = music[:20*1000]
# 截取后20秒
clip = music[-20000:]
# 從第20秒截取到第40秒
clip = music[20*1000:40*1000]

剪切好的片段我們可以另外存一個(gè)文件:

# 保存文件為clip.mp3,,格式為mp3
clip.export('clip.mp3', format='mp3')

3.3,、增加/減少音量

音量的控制我們只需要用音頻對(duì)象加一個(gè)常數(shù)即可:

# 音量減5
music -= 5
# 音量加5
music += 5

3.4、音頻拼接

我們先看看重復(fù)拼接:

# 在音頻文件末尾重復(fù)拼接該音頻
music = music*2

拼接后的音頻的效果就是原音頻循環(huán)兩次,。接下來(lái)我們看看拼接不同的音頻:

# 裁剪前20秒音頻
clip1 = music[:20*1000]
# 裁剪后20秒音頻
clip2 = music[-20*1000:]
# 拼接音頻
clip = clip1 + clip2

3.5,、 交叉漸入漸出

交叉漸入漸出是一種比較柔和的音頻轉(zhuǎn)場(chǎng)方式,在兩個(gè)音頻切換的間歇會(huì)有一個(gè)重合,,用代碼實(shí)現(xiàn)如下:

# 截取前20秒
begin = music[20*1000:40*1000]
# 截取后20秒
end = music[-20*1000:]
# 添加交叉漸入漸出 效果
clip = begin.append(end, crossfade=1500)

我們可以看到我們一共裁剪了40秒,,在生成的文件我們可以看到只有38秒,因?yàn)檗D(zhuǎn)場(chǎng)的時(shí)候有個(gè)重合的效果,。當(dāng)然還有更多的操作,,大家可以自己去了解。

三,、視頻操作

視頻的操作可以通過(guò)moviepyopencv進(jìn)行,,我們先分別安裝兩個(gè)模塊:

pip install opencv-python
pip install moviepy

3.1、視頻剪輯

相比之下moviepy操作視頻要更便利,,我們看看使用moviepy如何剪輯視頻:

from moviepy.editor import *
# 剪切視屏bws.mp4中第50秒到第60秒
clip = VideoFileClip('bws.mp4').subclip(5060)
# 將剪切的片段保存
clip.write_videofile('clip.mp4')

3.2,、提取音頻文件

VideoFileClip類中,音頻文件作為其中的一個(gè)參數(shù),,我們可以直接獲?。?/p>

from moviepy.editor import *
# 讀取視頻文件
video = VideoFileClip('bws.mp4')
# 獲取其中音頻
audio = video.audio
# 保存音頻文件
audio.write_audiofile('audio.mp3')

3.3、混流

我們還可以將音頻同視頻混流,,在moviepy中,,提供了一個(gè)讀取音頻文件的類,我們?cè)O(shè)置視頻的音頻需要?jiǎng)?chuàng)建這個(gè)類的對(duì)象:

from moviepy.editor import *
# 讀取視頻
video = VideoFileClip('bws.mp4')
# 讀取音頻
audio = AudioFileClip('百年孤獨(dú).mp3')
# 設(shè)置視頻的音頻
video = video.set_audio(audio)
# 保存新的視頻文件
video.write_videofile('bws_audio.mp4')

3.4、逐幀提取畫(huà)面

我們都知道,,視頻是由一幀一幀的圖片組成的,,我們也可以將畫(huà)面一幀一幀提取出來(lái):

import cv2
# 讀取視頻
video = cv2.VideoCapture('bws.mp4')
# 逐幀讀取,當(dāng)還有畫(huà)面時(shí)ret為True,,frame為當(dāng)前幀的ndarray對(duì)象
ret, frame = video.read()
i = 0
# 循環(huán)讀取
while ret:
    i += 1
    cv2.imwrite('v'+str(i) + '.jpg', frame)
    ret, frame = video.read()

上述代碼就能將視屏的每一幀以圖片的形式保存下來(lái),。

3.5、截取gif

截取gif和截取視頻沒(méi)有什么區(qū)別,,不過(guò)為了減少gif的大小,,我們通常會(huì)對(duì)視頻進(jìn)行尺寸縮放:

from moviepy.editor import *
# 讀取視頻
video = VideoFileClip('bws.mp4')
# 裁剪視頻,并縮小一半
video = video.subclip(2030).resize((0.5))
# 保存gif圖片
video.write_gif('bws.gif')

在上面subclip方法中,,我們可以傳入元組,,例如:

video.subclip((120), (230))

其含義為從1分20秒截取到2分30秒。

好文和朋友一起看~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多