from moviepy.editor import VideoFileClip from PyQt5.QtWidgets import QFileDialog, QApplication import sys import os import subprocess def choose_file(): fname = QFileDialog.getOpenFileName(None, 'Open file', 'E:\Picture\MIUI',"Video files (*.mp4 *.avi)") return fname[0] def main(): app = QApplication(sys.argv) fname = choose_file() if fname: clip = VideoFileClip(fname) duration = min(2, clip.duration) clip = clip.subclip(t_start=1, t_end=1+duration).resize(0.5) clip.write_gif("new.gif",fps = 30) subprocess.call(["convert", "movie.gif[0]", "movie.gif"]) original_dir = os.path.dirname(fname) gif_path = os.path.join(original_dir, "movie.gif") os.rename("new.gif", gif_path) if name == 'main': main() 优化代码提高效率 降低GIF的大小 给我完整代码
时间: 2024-02-28 13:55:57 浏览: 27
以下是优化后的代码,主要通过调整参数和减少I/O操作来提高效率和降低GIF大小:
```python
from moviepy.editor import VideoFileClip
from PyQt5.QtWidgets import QFileDialog, QApplication
import sys
import os
def choose_file():
fname = QFileDialog.getOpenFileName(None, 'Open file', 'E:\Picture\MIUI', "Video files (*.mp4 *.avi)")
return fname[0]
def main():
app = QApplication(sys.argv)
fname = choose_file()
if fname:
clip = VideoFileClip(fname)
duration = min(2, clip.duration)
clip = clip.subclip(t_start=1, t_end=1+duration).resize(0.5)
gif_path = os.path.join(os.path.dirname(fname), "movie.gif")
clip.write_gif(gif_path, fps=15, optimize=True, fuzz=10)
clip.close()
if __name__ == '__main__':
main()
```
主要的优化包括:
1. 将输出文件名直接指定为`gif_path`,不再生成临时文件和重命名;
2. 将帧率降低到15,同时使用`optimize=True`和`fuzz=10`参数来进一步压缩GIF;
3. 在`write_gif`调用后显式关闭`clip`对象,以释放内存。