<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python輕松搞定視頻轉(zhuǎn)gif動(dòng)圖

          共 2498字,需瀏覽 5分鐘

           ·

          2022-01-14 02:05

          作者 |?道才
          來(lái)源 | 可以叫我才哥


          不知道大家是不是有過(guò)類似的經(jīng)歷,在看視頻的時(shí)候覺(jué)得某段非常有意思想弄成動(dòng)圖,但是無(wú)從下手!或可以在網(wǎng)上找一些在線工具但是多多少少需要付費(fèi)或者帶有水印之類的,那么!?

          對(duì),今天我們就來(lái)學(xué)習(xí)用Python搞定這一需求吧!

          動(dòng)圖效果

          目錄:

          • 1. 準(zhǔn)備工作

          • 2. 初探

          • 3. 截取區(qū)域轉(zhuǎn)動(dòng)圖

          • 4. 固定區(qū)域轉(zhuǎn)動(dòng)圖

          • 5. 添加自定義文本

          1. 準(zhǔn)備工作

          需要準(zhǔn)備用于生成gif視頻文件,需要用到moviepy庫(kù),關(guān)于這個(gè)庫(kù)更詳細(xì)的介紹可以查看它的官方文檔。

          https://zulko.github.io/moviepy/

          命令行鍵入pip安裝吧

          pip?install?moviepy

          這就搞定第1步了!

          2. 初探

          這一步也是我們開(kāi)篇第一張動(dòng)圖的制作腳本。

          from?moviepy.editor?import?*

          video_path?=?"F:\PythonCool\視頻\【咒術(shù)回戰(zhàn)】第20集五條悟帥的有些過(guò)分了.mp4"
          video?=?VideoFileClip(video_path)
          clip?=?(video.subclip((2,4.5),(2,6.0))
          ????????.resize(0.2))
          clip.write_gif("動(dòng)圖搞定了.gif",fps=8)

          我們?cè)家曨l素材是尺寸1920*1080,幀率是30

          視頻屬性

          本次轉(zhuǎn)動(dòng)圖的參數(shù)設(shè)定如下:

          • subclip((2,4.5),(2,6.0) ?選取的是整個(gè)視頻從2.45秒到2.60秒
          • resize(0.2) 尺寸大小改為原始大小的0.2也就是1/5大小(畢竟動(dòng)圖尺寸大小其文件大小也太大)
          • write_gif("動(dòng)圖搞定了.gif",fps=8) 保存gif的時(shí)候?qū)收{(diào)整為了8

          基于上述參數(shù)設(shè)定下,這個(gè)動(dòng)圖一共其實(shí)是(2.60-2.45)*8=12張圖構(gòu)成!

          動(dòng)圖屬性

          3. 截取區(qū)域轉(zhuǎn)動(dòng)圖

          有時(shí)候我們可能只需要截取屏幕中指定矩形區(qū)域來(lái)進(jìn)行動(dòng)圖的制作,這就要用到crop函數(shù)截圖區(qū)域了。

          video.crop(
          ????x1=None,
          ????y1=None,
          ????x2=None,
          ????y2=None,
          ????width=None,
          ????height=None,
          ????x_center=None,
          ????y_center=None,
          )

          參數(shù):

          x1y1:矩形區(qū)域左上角坐標(biāo)

          x2y2:矩形區(qū)域右下角坐標(biāo)

          widthheight:是寬度和高度

          x_centery_center:表示x1的坐標(biāo)為x_center-width/2,x2的坐標(biāo)為x_center+width/2,y_center類似處理

          比如,我們截圖人物所在區(qū)域制作動(dòng)圖代碼如下:

          crop?=?(video.subclip((2,4.5),(2,6.0))
          ????????.resize(0.2)
          ????????.crop(x1=70,y1=0,?x2=310,y2=216))?
          crop.write_gif("裁剪.gif",fps=8)
          裁剪

          這里關(guān)于左上角和右下角坐標(biāo)的確定可以采用preview方法預(yù)覽視頻,然后鼠標(biāo)點(diǎn)擊對(duì)應(yīng)位置來(lái)獲取。

          video.resize(0.2).preview()

          4. 固定區(qū)域轉(zhuǎn)動(dòng)圖

          對(duì)于上面那個(gè)動(dòng)圖中 的搞定了,我們希望它常駐,那么可以通過(guò)截圖搞定了出現(xiàn)這一時(shí)刻的內(nèi)容,然后覆蓋到原來(lái)位置常駐即可。

          snapshot?=?(crop
          ????????????#?截圖區(qū)域
          ????????????.crop(x1=100,y1=190,?x2=140,y2=216)?
          ????????????#?截取的時(shí)間段(1秒的時(shí)候)
          ????????????.to_ImageClip(1)
          ????????????#?設(shè)置位置(左上角,和截取區(qū)域的左上角一致)
          ????????????.set_position((100,?190))
          ????????????.set_duration(crop.duration))
          #?合并
          composition?=?CompositeVideoClip([crop,?snapshot])
          composition.write_gif('覆蓋.gif',?fps=8)
          覆蓋

          5. 添加自定義文本

          對(duì)于上面這個(gè)操作,我們還有很多方法來(lái)完成,比如用一張帶有搞定了的圖片去覆蓋(和上面的案例類似,只是不需要單獨(dú)截圖而是讀取一張現(xiàn)成的);另外,我們還可以通過(guò)添加蒙版再加上自定義文字的形式來(lái)玩。

          from?moviepy.video.VideoClip?import?TextClip

          #?蒙版
          mask?=?(#?長(zhǎng)寬為40*20的顏色為黑色的mask
          ?????ColorClip((40,?20),?(0,?0,?0))
          ?????#?設(shè)置位置(同第4節(jié))
          ????????.set_pos((100,?190))
          ????????.set_duration(crop.duration)
          ????????)
          #?文字
          text?=?(TextClip("搞定啦",
          ?????????????????fontsize=30,?color='white',
          ?????????????????font='SimHei',?interline=-25)
          ????????.set_pos((80,?160))
          ????????.set_duration(crop.duration))

          composition?=?CompositeVideoClip([crop,?mask,?text])
          composition.write_gif('覆蓋.gif',?fps=8)
          自定義文本

          以上就是本次的全部?jī)?nèi)容了,關(guān)于moviepy這個(gè)庫(kù)還有很多種好玩的用于視頻剪輯的功能,我們后續(xù)再慢慢研究分享與學(xué)習(xí)吧~

          覺(jué)得不錯(cuò),請(qǐng)點(diǎn)個(gè)在看

          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷色婷婷 | 婷婷丁香六月 | 国产成人免费在线视频 | 人人草人人入 | 丁香五月综合激清 |