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