解放雙手,提高生產(chǎn)力,看我如何用 Python 實(shí)現(xiàn)自動(dòng)化剪視頻
本文轉(zhuǎn)載自微信公眾號(hào)「Python技術(shù)」,作者派森醬。轉(zhuǎn)載本文請(qǐng)聯(lián)系Python技術(shù)公眾號(hào)。
人類(lèi)和動(dòng)物最本質(zhì)的區(qū)別就是人類(lèi)懂的制造并使用工具,這是由上古時(shí)代一直延續(xù)至今的基因所決定的。
前段時(shí)間朋友的一個(gè)業(yè)務(wù)需要大量的原創(chuàng)短視頻,問(wèn)我是否可以幫忙弄下,我了解了具體需求之后發(fā)現(xiàn)不需要很高質(zhì)量的內(nèi)容,操作也不是很復(fù)雜,完全可以通過(guò) Python 實(shí)現(xiàn)自動(dòng)化操作,也是就把這個(gè)事給應(yīng)承了下來(lái)。
我們知道 PyAutoGUI 是一個(gè)通過(guò)編程方式來(lái)控制鼠標(biāo)和鍵盤(pán)的 Python 庫(kù),那么就從它身上下手了。
安裝
Win 和 macOS 的安裝命令有所不同。
- ## windows
- py -m pip install pyautogui
- ## macOS
- python3 -m pip install pyautogui
屏幕位置
屏幕上的位置由笛卡爾坐標(biāo)表示,X 坐標(biāo)從左上角的 0 開(kāi)始,向右增加,與數(shù)學(xué)不同,Y 坐標(biāo)從左上角 0 開(kāi)始,向下增加。
因此左上角的像素位于坐標(biāo)(0,0),如果你的屏幕分辨率為 1920 x 1080,則右下角的像素將為(1919, 1079),因?yàn)橄袼厥菑淖鴺?biāo) 0 開(kāi)始的。屏幕分辨率大小可以通過(guò) size() 函數(shù)獲得,當(dāng)前鼠標(biāo)位置則可以通過(guò) position() 函數(shù)獲得。
- 0,0 X increases -->
- +---------------------------+
- | | Y increases
- | | |
- | 1920 x 1080 screen | |
- | | V
- | |
- | |
- +---------------------------+ 1919, 1079
- import pyautogui
- x, y = pyautogui.position()
- print(x, y)
- x, y = pyautogui.size()
- print(x, y)
- ## 輸出結(jié)果
- 545 437
- 1440 900
鼠標(biāo)移動(dòng)
鼠標(biāo)的移動(dòng)則分為絕對(duì)坐標(biāo)移動(dòng)和相對(duì)坐標(biāo)移動(dòng)。
比如你想將鼠標(biāo)移動(dòng)到坐標(biāo)(100,100)處,直接調(diào)用 moveTo 函數(shù)即可。
- import pyautogui
- # 將鼠標(biāo)移動(dòng)至(100,200)坐標(biāo)處
- pyautogui.moveTo(100, 200)
- # 將鼠標(biāo)移動(dòng)至(100,500 坐標(biāo)處
- pyautogui.moveTo(None, 500)
- # 將鼠標(biāo)移動(dòng)至(600,500)坐標(biāo)處
- pyautogui.moveTo(600, None)
- # 將鼠標(biāo)移動(dòng)至(100,200)坐標(biāo)處,該移動(dòng)過(guò)程是一個(gè)持續(xù)性過(guò)程,耗時(shí) 2 秒
- pyautogui.moveTo(100, 200, 2)
而 move 函數(shù)則是簡(jiǎn)單的相對(duì)移動(dòng)。
- import pyautogui
- # 將鼠標(biāo)移動(dòng)至(100,200)坐標(biāo)處
- pyautogui.moveTo(100, 200)
- # 將鼠標(biāo)向下移動(dòng) 50 像素
- pyautogui.move(0, 50)
- # 將鼠標(biāo)向左移動(dòng) 30 像素
- pyautogui.move(-30, 0)
- # 將鼠標(biāo)向左移動(dòng) 30 像素
- pyautogui.move(-30, None)
鼠標(biāo)拖拽
和鼠標(biāo)移動(dòng)相比,鼠標(biāo)拖拽同樣分為絕對(duì)坐標(biāo)拖拽和相對(duì)坐標(biāo)拖拽。同樣 dragTo 函數(shù)使用絕對(duì)坐標(biāo),drag 使用相對(duì)坐標(biāo)。
- import pyautogui
- # 按住鼠標(biāo)左鍵將目標(biāo)拖拽至(100,200)坐標(biāo)處
- pyautogui.dragTo(100, 200, button='left')
- # 按住鼠標(biāo)左鍵將目標(biāo)拖拽至(100,200)坐標(biāo)處,該移動(dòng)過(guò)程是一個(gè)持續(xù)性過(guò)程,耗時(shí) 2 秒
- pyautogui.dragTo(100, 200, 2, button='left')
- # 按住鼠標(biāo)右鍵將目標(biāo)向右移動(dòng) 30 個(gè)像素,該移動(dòng)過(guò)程是一個(gè)持續(xù)性過(guò)程,耗時(shí) 2 秒
- pyautogui.drag(30, 0, 2, button='right')
鼠標(biāo)點(diǎn)擊
我們可以通過(guò) click() 函數(shù)模擬鼠標(biāo)單擊。
- import pyautogui
- # 在當(dāng)前位置單擊左鍵
- pyautogui.click()
- # 將鼠標(biāo)移動(dòng)至(100,200)坐標(biāo)處,然后單擊左鍵
- # 但是這個(gè)方法有點(diǎn)奇怪,有時(shí)候會(huì)失靈,可以使用 moveTo + click
- pyautogui.click(x=100, y=200)
- # 在當(dāng)前位置單雙擊左鍵
- pyautogui.doubleClick()
控制鍵盤(pán)
鍵盤(pán)控制一般常用的就是輸入字符串,按下某個(gè)按鍵以及組合鍵。
- import pyautogui
- # 輸入 “Hello World”
- pyautogui.write('Hello world!')
- # 按下 enter / F1 鍵
- pyautogui.press('enter')
- pyautogui.press('f1')
- # 組合按鍵 command + a
- pyautogui.hotkey('command', 'a')
制作視頻
有了以上的基礎(chǔ),就可以開(kāi)始我們的視頻制作了,這次使用的是剪映軟件。
這里你需要熟悉一下剪映的操作步驟,基本分為三塊:將指定圖片拖入視頻軌道、調(diào)整視頻時(shí)長(zhǎng)、導(dǎo)出。
最終效果如下:
- # coding=utf-8
- import time
- import pyautogui
- # 將圖片拖入軌道
- def drag_img_to_track():
- # 選中圖片
- pyautogui.moveTo(170, 270)
- pyautogui.doubleClick()
- # 拖拽圖片至軌道
- pyautogui.dragTo(120, 600, 1, button='left')
- # 調(diào)整視頻時(shí)長(zhǎng)
- def drag_img_to_3_min():
- # 選中軌道中的第一張圖
- pyautogui.moveTo(125, 600)
- pyautogui.click()
- # 拖拽至第三分鐘
- pyautogui.moveTo(135, 600)
- pyautogui.dragTo(700, 600, 1, button='left')
- # 刪除舊的素材
- def delete_top_img():
- # 刪除軌道中的第二張圖片
- pyautogui.moveTo(300, 160)
- pyautogui.doubleClick()
- pyautogui.press("backspace")
- # enter yes
- pyautogui.moveTo(650, 470)
- time.sleep(0.5)
- pyautogui.click()
- # 導(dǎo)出
- def export(name):
- pyautogui.moveTo(126, 600)
- pyautogui.click()
- pyautogui.hotkey('command', 'e')
- pyautogui.write(name)
- time.sleep(1)
- pyautogui.moveTo(800, 393)
- pyautogui.click()
- time.sleep(20)
- pyautogui.click()
- index = 0
- count = 2
- while index < count:
- drag_img_to_track()
- drag_img_to_3_min()
- delete_top_img()
- export(str(index))
- time.sleep(2)
- index += 1
- print("end..." + str(index))
總結(jié)
今天我們通過(guò) pyautogui 實(shí)現(xiàn)了全自動(dòng)制作視頻,我們只需要將素材導(dǎo)入到剪映中即可。
由于 gif 大小限制,只錄制了一小部分,你可以通過(guò)調(diào)整主函數(shù)中的 count 值來(lái)控制制作視頻的個(gè)數(shù)。