解放双手,提高生产力,看我如何用 Python 实现自动化剪视频,


人类和动物最本质的区别就是人类懂的制造并使用工具,这是由上古时代一直延续至今的基因所决定的。

前段时间朋友的一个业务需要大量的原创短视频,问我是否可以帮忙弄下,我了解了具体需求之后发现不需要很高质量的内容,操作也不是很复杂,完全可以通过 Python 实现自动化操作,也是就把这个事给应承了下来。

我们知道 PyAutoGUI 是一个通过编程方式来控制鼠标和键盘的 Python 库,那么就从它身上下手了。

安装

Win 和 macOS 的安装命令有所不同。

  1. ## windows 
  2. py -m pip install pyautogui 
  3.  
  4. ## macOS 
  5. python3 -m pip install pyautogui 

屏幕位置

屏幕上的位置由笛卡尔坐标表示,X 坐标从左上角的 0 开始,向右增加,与数学不同,Y 坐标从左上角 0 开始,向下增加。

因此左上角的像素位于坐标(0,0),如果你的屏幕分辨率为 1920 x 1080,则右下角的像素将为(1919, 1079),因为像素是从坐标 0 开始的。屏幕分辨率大小可以通过 size() 函数获得,当前鼠标位置则可以通过 position() 函数获得。

  1. 0,0       X increases --> 
  2. +---------------------------+ 
  3. |                           | Y increases 
  4. |                           |     | 
  5. |   1920 x 1080 screen      |     | 
  6. |                           |     V 
  7. |                           | 
  8. |                           | 
  9. +---------------------------+ 1919, 1079 
  10. import pyautogui 
  11.  
  12. x, y = pyautogui.position() 
  13. print(x, y) 
  14.  
  15. x, y = pyautogui.size() 
  16. print(x, y) 
  17.  
  18. ## 输出结果 
  19. 545 437 
  20. 1440 900 

鼠标移动

鼠标的移动则分为绝对坐标移动和相对坐标移动。

比如你想将鼠标移动到坐标(100,100)处,直接调用 moveTo 函数即可。

  1. import pyautogui 
  2.  
  3. # 将鼠标移动至(100,200)坐标处 
  4. pyautogui.moveTo(100, 200)    
  5.  
  6. # 将鼠标移动至(100,500 坐标处 
  7. pyautogui.moveTo(None, 500)   
  8.  
  9. # 将鼠标移动至(600,500)坐标处 
  10. pyautogui.moveTo(600, None) 
  11.  
  12. # 将鼠标移动至(100,200)坐标处,该移动过程是一个持续性过程,耗时 2 秒 
  13. pyautogui.moveTo(100, 200, 2) 

而 move 函数则是简单的相对移动。

  1. import pyautogui 
  2.  
  3. # 将鼠标移动至(100,200)坐标处 
  4. pyautogui.moveTo(100, 200) 
  5.  
  6. # 将鼠标向下移动 50 像素 
  7. pyautogui.move(0, 50) 
  8.  
  9. # 将鼠标向左移动 30 像素 
  10. pyautogui.move(-30, 0) 
  11.  
  12. # 将鼠标向左移动 30 像素 
  13. pyautogui.move(-30, None) 

鼠标拖拽

和鼠标移动相比,鼠标拖拽同样分为绝对坐标拖拽和相对坐标拖拽。同样 dragTo 函数使用绝对坐标,drag 使用相对坐标。

  1. import pyautogui 
  2.  
  3. # 按住鼠标左键将目标拖拽至(100,200)坐标处 
  4. pyautogui.dragTo(100, 200, button='left')      
  5.  
  6. # 按住鼠标左键将目标拖拽至(100,200)坐标处,该移动过程是一个持续性过程,耗时 2 秒 
  7. pyautogui.dragTo(100, 200, 2, button='left')   
  8.  
  9. # 按住鼠标右键将目标向右移动 30 个像素,该移动过程是一个持续性过程,耗时 2 秒 
  10. pyautogui.drag(30, 0, 2, button='right') 

鼠标点击

我们可以通过 click() 函数模拟鼠标单击。

  1. import pyautogui 
  2.  
  3. # 在当前位置单击左键 
  4. pyautogui.click() 
  5.  
  6. # 将鼠标移动至(100,200)坐标处,然后单击左键 
  7. # 但是这个方法有点奇怪,有时候会失灵,可以使用 moveTo + click 
  8. pyautogui.click(x=100, y=200) 
  9.  
  10. # 在当前位置单双击左键 
  11. pyautogui.doubleClick() 

控制键盘

键盘控制一般常用的就是输入字符串,按下某个按键以及组合键。

  1. import pyautogui 
  2.  
  3. # 输入 “Hello World” 
  4. pyautogui.write('Hello world!') 
  5.  
  6. # 按下 enter / F1 键  
  7. pyautogui.press('enter') 
  8. pyautogui.press('f1') 
  9.  
  10. # 组合按键 command + a 
  11. pyautogui.hotkey('command', 'a') 

制作视频

有了以上的基础,就可以开始我们的视频制作了,这次使用的是剪映软件。

这里你需要熟悉一下剪映的操作步骤,基本分为三块:将指定图片拖入视频轨道、调整视频时长、导出。

最终效果如下:

原视频

  1. # coding=utf-8 
  2. import time 
  3. import pyautogui 
  4.  
  5. # 将图片拖入轨道 
  6. def drag_img_to_track(): 
  7.     # 选中图片 
  8.     pyautogui.moveTo(170, 270) 
  9.     pyautogui.doubleClick() 
  10.     # 拖拽图片至轨道 
  11.     pyautogui.dragTo(120, 600, 1, button='left') 
  12.  
  13. # 调整视频时长 
  14. def drag_img_to_3_min(): 
  15.     # 选中轨道中的第一张图 
  16.     pyautogui.moveTo(125, 600) 
  17.     pyautogui.click() 
  18.     # 拖拽至第三分钟 
  19.     pyautogui.moveTo(135, 600) 
  20.     pyautogui.dragTo(700, 600, 1, button='left') 
  21.  
  22. # 删除旧的素材 
  23. def delete_top_img(): 
  24.     # 删除轨道中的第二张图片 
  25.     pyautogui.moveTo(300, 160) 
  26.     pyautogui.doubleClick() 
  27.     pyautogui.press("backspace") 
  28.  
  29.     # enter yes 
  30.     pyautogui.moveTo(650, 470) 
  31.     time.sleep(0.5) 
  32.     pyautogui.click() 
  33.  
  34. # 导出 
  35. def export(name): 
  36.     pyautogui.moveTo(126, 600) 
  37.     pyautogui.click() 
  38.  
  39.     pyautogui.hotkey('command', 'e') 
  40.     pyautogui.write(name) 
  41.     time.sleep(1) 
  42.     pyautogui.moveTo(800, 393) 
  43.     pyautogui.click() 
  44.     time.sleep(20) 
  45.     pyautogui.click() 
  46.  
  47. index = 0 
  48. count = 2 
  49. while index < count: 
  50.     drag_img_to_track() 
  51.     drag_img_to_3_min() 
  52.     delete_top_img() 
  53.     export(str(index)) 
  54.     time.sleep(2) 
  55.     index += 1 
  56.     print("end..." + str(index)) 

总结

今天我们通过 pyautogui 实现了全自动制作视频,我们只需要将素材导入到剪映中即可。

由于 gif 大小限制,只录制了一小部分,你可以通过调整主函数中的 count 值来控制制作视频的个数。

评论关闭