欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

在python中優(yōu)雅的使用ffmpeg:PyAV

系統(tǒng) 3330 0

ffmpeg是強(qiáng)大的多媒體處理工具,堪稱多媒體處理的瑞士軍刀,涵蓋了大量的多媒體處理工具。但是ffmpeg是由純C語言寫成,對于python用戶來說使用難度較高,為此今天向大家推薦一款在python中使用ffmpeg的開發(fā)包:PyAV

PyAV提供了ffmpeg的python接口,但實(shí)際是它只是使用ffmpeg做后端,使用Cython封裝了ffmpeg的接口,所以實(shí)際調(diào)用的還是ffmpeg。

PyAV安裝

PyAV是跨平臺的,可以根據(jù)自己的環(huán)境和平臺選擇安裝。

Windows安裝PyAV:

在Windows下安裝PyAV可以參照博客https://blog.csdn.net/Dillon2015/article/details/91358179

Mac OS X和Ubuntu上安裝PyAV:

在Mac OS X和Ubuntu上安裝PyAV可以參考官網(wǎng)安裝方法

PyAV使用

PyAV提供了非常方便的接口使開發(fā)者不需要太關(guān)注底層細(xì)節(jié)。

視頻分割為獨(dú)立的幀

有的時(shí)候做處理時(shí)需要將一段視頻按幀分成一張張圖像,在ffmpeg命令行中只需要一條命令:

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg

-r表示每秒提取圖像的數(shù)量,如果等于幀率則會將所有幀都提取出來。

在PyAV中實(shí)現(xiàn)同樣的功能也很簡單,

            
              import av
?
container = av.open(path_to_video)
#path_to_video是你視頻的路徑
for frame in container.decode(video=0):
 ? ?frame.to_image().save('frame-%04d.jpg' % frame.index)
            
          

保存關(guān)鍵幀

對于一個(gè)視頻序列來說并不是所有幀都一樣,因?yàn)橐曨l編碼在進(jìn)行幀間預(yù)測時(shí)會出現(xiàn)相互參考的情況,如果一幀的參考幀丟失或損壞了那么這一幀就無法正確解碼,所以對于那些用于被參考的幀就相對更重要了。

av.video.frame.VideoFrame 類中有一個(gè)屬性 key_frame 用以表示該幀是否是關(guān)鍵幀。

            
              import av
import av.datasets
?
container = av.open(path_to_video)
# Signal that we only want to look at keyframes.
stream = container.streams.video[0]
stream.codec_context.skip_frame = 'NONKEY'
?
for frame in container.decode(stream):
 ? ?# We use `frame.pts` as `frame.index` won't make must sense with the `skip_frame`.
 ? ?frame.to_image().save(
 ? ? ? ?'night-sky.{:04d}.jpg'.format(frame.pts),
 ? ? ? ?quality=80,
 ?  )
            
          

在以上代碼中跳過了非關(guān)鍵幀,將所有關(guān)鍵幀保存下來。

視頻轉(zhuǎn)封裝

視頻轉(zhuǎn)封裝就是改變視頻的封裝格式而不改變其中視頻流、音頻流等的編碼方式,例如從mp4->mkv

過程如下:

?

在python中優(yōu)雅的使用ffmpeg:PyAV_第1張圖片

            
              import av
import av.datasets
?
input_ = av.open(path_to_video)
output = av.open('remuxed.mkv', 'w')
?
# Make an output stream using the input as a template. This copies the stream
# setup from one to the other.
in_stream = input_.streams.video[0]
out_stream = output.add_stream(template=in_stream)
?
for packet in input_.demux(in_stream):
 ? ?# We need to skip the "flushing" packets that `demux` generates.
 ? ?if packet.dts is None:
 ? ? ? ?continue
?
 ? ?# We need to assign the packet to the new stream.
 ? ?packet.stream = out_stream
 ? ?output.mux(packet)
?
output.close()
            
          

生成視頻

PyAV還可以和numpy配合使用,直接將ndarray轉(zhuǎn)換成視頻幀,使得對幀的操作更加靈活和方便。

            
              from __future__ import division
?
import numpy as np
?
import av
?
duration = 4
fps = 24
total_frames = duration * fps
container = av.open('test.mp4', mode='w')
stream = container.add_stream('mpeg4', rate=fps)
stream.width = 480
stream.height = 320
stream.pix_fmt = 'yuv420p'
?
for frame_i in range(total_frames):
 ? ?img = np.empty((480, 320, 3))
 ? ?img[:, :, 0] = 0.5 + 0.5 * np.sin(2 * np.pi * (0 / 3 + frame_i / total_frames))
 ? ?img[:, :, 1] = 0.5 + 0.5 * np.sin(2 * np.pi * (1 / 3 + frame_i / total_frames))
 ? ?img[:, :, 2] = 0.5 + 0.5 * np.sin(2 * np.pi * (2 / 3 + frame_i / total_frames))
?
 ? ?img = np.round(255 * img).astype(np.uint8)
 ? ?img = np.clip(img, 0, 255)
?
 ? ?frame = av.VideoFrame.from_ndarray(img, format='rgb24')
 ? ?for packet in stream.encode(frame):
 ? ? ? ?container.mux(packet)
?
#Flush stream
for packet in stream.encode():
 ? ?container.mux(packet)
?
#Close the file
container.close()
            
          

以上代碼生成了一段480x320幀率24fps的視頻。

小結(jié)

PyAV還要更多更強(qiáng)大的功能,感興趣的小伙伴可以自己安裝試試哦。

感興趣的請關(guān)注微信公眾號Video Coding

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久一日本道色综合久久m 亚洲三级视频 | 欧美成人精品 | 天天插天天 | 久久精品视频8 | 国产成人精品视频播放 | 欧美成人一级片 | 天堂一区| 日韩中文字幕在线看 | 性aaa| 日韩精品成人 | 操一操日一日 | 欧美日韩精品一区二区在线播放 | 日本精品久久久久护士 | 亚洲欧美国产另类视频 | 日本a视频 | 日本一区二区三区不卡在线看 | 成人毛片100免费观看 | 国产成久久免费精品AV片天堂 | 免费性生活视频 | 国产一区二区在线免费观看 | 999精品国产人妻无码系列久久 | 91大神精品长腿在线观看网站 | 国内精品免费一区二区三区 | 亚洲欧美另类综合 | 又黄又爽免费无遮挡在线观看 | 欧美日韩国产在线观看 | 色婷婷色婷婷 | 久久色亚洲 | 波多野吉衣 免费一区 | 国产一级毛片高清视频 | 国产一级黄色网 | 久久99视频精品 | 天天干天天色综合 | 亚洲综合首页 | a一级免费 | 日本在线免费观看视频 | 毛片基地看看成人免费 | 葫芦娃短视频下载 | 欧美丰满丝袜videossex | 国产精品久久久久久无码人妻 | 婷婷久久五月天 |