自动执行我在 python 命令后插入的路径

Automate paths that I insert after command in python

我想用 moviepy 模块制作一个简单的 gif 到 mp4 转换器。问题是每次我必须转换不同的文件时,我必须打开 convert.py 文件并在

中编辑路径

clip = mp.VideoFileClip(path/to/.gif)

我想做类似这样的东西:

./convert.py /home/user/Desktop/file.gif

这样我就可以直接通过终端指定路径而无需更改 python 可执行文件,有什么想法吗?谢谢。

编辑:

这是终端输出和我的脚本

终端机: ./convert.py /home/xinto/Desktop/vanced_9_1.gif

pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "./convert.py", line 10, in <module>
    clip = mp.VideoFileClip('fn')
  File "/home/xinto/.local/lib/python3.7/site-packages/moviepy/video/io/VideoFileClip.py", line 91, in __init__
    fps_source=fps_source)
  File "/home/xinto/.local/lib/python3.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 33, in __init__
    fps_source)
  File "/home/xinto/.local/lib/python3.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 276, in ffmpeg_parse_infos
    "path.")%filename)
OSError: MoviePy error: the file fn could not be found!
Please check that you entered the correct path

这是我的脚本: #!/usr/bin/python3.7

import moviepy.editor as mp
import os.path
import os
import sys

fn = sys.argv

clip = mp.VideoFileClip('fn')
clip.write_videofile("export.mp4")

您好,感谢您第一次 post 来到社区。我想首先让您知道我不是 Python 程序员,但如果我正确理解问题,您很可能也不是。

这很好。

一点点 google-foo 把我带到了那里:

How to use sys.argv in Python

此 Web 资源处理 python sys.argv 以实现我认为您所要求的。我当然相信这可以相当快速和轻松地解决您的问题。

祝你一切顺利,让我们知道你的管理方式。另外,请记住,假设您理解给定的信息,在互联网上快速搜索将帮助您学习和进步

谢谢

编辑:

下面的代码将显示传递给程序的参数

#!/usr/bin/env python
import sys

for x in sys.argv:
        print ("Argument: ", x);

以下代码将确保至少有一个参数被传递给程序。

#!/usr/bin/env python
import sys

if len (sys.argv) != 2 :
        print ("Usage: ", str(sys.argv[0]));
        sys.exit (1)

print ("Passed argument: ", str(sys.argv[1]));

此代码最终将设置变量 'clip' 并打印它

#!/usr/bin/env python
import sys

if len (sys.argv) != 2 :
        print ("Usage: ", str(sys.argv[0]), "[FILEPATH]");
        sys.exit (1)

clip = str(sys.argv[1]) + '.gif';

print ("Clip is: ", clip);

当然,你应该实现文件验证来检查文件是否存在...

了解 sys.argv 的基础知识后,您可以查看其他资源,例如 More fun with sys.argv

--- 更多编辑 ---

看了你最后的评论,说模块不允许变量...我忍不住写了一些代码来验证,因为这是不正常的。这是我想出的,请记住我不是 Python 程序员。

#!/usr/bin/env python
import moviepy.editor as mp
import sys

if len (sys.argv) != 3 :
        print ("Usage:", str(sys.argv[0]), "[GIF FILEPATH] [OUTPUT MP4]");
        sys.exit (1)

gifFILE = str(sys.argv[1]);
outMP4 = str(sys.argv[2]);

print ("GIF filepath:", gifFILE);
print ("MP4 output:", outMP4);

clip = mp.VideoFileClip(gifFILE);
clip.write_videofile(outMP4);

这导致从 2mb 的原始 gif 输入完美输出 mp4 文件。

额外:

如果您只想从 gif 文件创建 mp4,一个简单的 FFMpeg 命令就可以了。

ffmpeg -i INPUT.gif -movflags +faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" OUTPUT.mp4