Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
elebumm
GitHub Repository: elebumm/RedditVideoMakerBot
Path: blob/master/utils/ffmpeg_install.py
327 views
1
import os
2
import subprocess
3
import zipfile
4
5
import requests
6
7
8
def ffmpeg_install_windows():
9
try:
10
ffmpeg_url = (
11
"https://github.com/GyanD/codexffmpeg/releases/download/6.0/ffmpeg-6.0-full_build.zip"
12
)
13
ffmpeg_zip_filename = "ffmpeg.zip"
14
ffmpeg_extracted_folder = "ffmpeg"
15
16
# Check if ffmpeg.zip already exists
17
if os.path.exists(ffmpeg_zip_filename):
18
os.remove(ffmpeg_zip_filename)
19
20
# Download FFmpeg
21
r = requests.get(ffmpeg_url)
22
with open(ffmpeg_zip_filename, "wb") as f:
23
f.write(r.content)
24
25
# Check if the extracted folder already exists
26
if os.path.exists(ffmpeg_extracted_folder):
27
# Remove existing extracted folder and its contents
28
for root, dirs, files in os.walk(ffmpeg_extracted_folder, topdown=False):
29
for file in files:
30
os.remove(os.path.join(root, file))
31
for dir in dirs:
32
os.rmdir(os.path.join(root, dir))
33
os.rmdir(ffmpeg_extracted_folder)
34
35
# Extract FFmpeg
36
with zipfile.ZipFile(ffmpeg_zip_filename, "r") as zip_ref:
37
zip_ref.extractall()
38
os.remove("ffmpeg.zip")
39
40
# Rename and move files
41
os.rename(f"{ffmpeg_extracted_folder}-6.0-full_build", ffmpeg_extracted_folder)
42
for file in os.listdir(os.path.join(ffmpeg_extracted_folder, "bin")):
43
os.rename(
44
os.path.join(ffmpeg_extracted_folder, "bin", file),
45
os.path.join(".", file),
46
)
47
os.rmdir(os.path.join(ffmpeg_extracted_folder, "bin"))
48
for file in os.listdir(os.path.join(ffmpeg_extracted_folder, "doc")):
49
os.remove(os.path.join(ffmpeg_extracted_folder, "doc", file))
50
for file in os.listdir(os.path.join(ffmpeg_extracted_folder, "presets")):
51
os.remove(os.path.join(ffmpeg_extracted_folder, "presets", file))
52
os.rmdir(os.path.join(ffmpeg_extracted_folder, "presets"))
53
os.rmdir(os.path.join(ffmpeg_extracted_folder, "doc"))
54
os.remove(os.path.join(ffmpeg_extracted_folder, "LICENSE"))
55
os.remove(os.path.join(ffmpeg_extracted_folder, "README.txt"))
56
os.rmdir(ffmpeg_extracted_folder)
57
58
print(
59
"FFmpeg installed successfully! Please restart your computer and then re-run the program."
60
)
61
except Exception as e:
62
print(
63
"An error occurred while trying to install FFmpeg. Please try again. Otherwise, please install FFmpeg manually and try again."
64
)
65
print(e)
66
exit()
67
68
69
def ffmpeg_install_linux():
70
try:
71
subprocess.run(
72
"sudo apt install ffmpeg",
73
shell=True,
74
stdout=subprocess.PIPE,
75
stderr=subprocess.PIPE,
76
)
77
except Exception as e:
78
print(
79
"An error occurred while trying to install FFmpeg. Please try again. Otherwise, please install FFmpeg manually and try again."
80
)
81
print(e)
82
exit()
83
print("FFmpeg installed successfully! Please re-run the program.")
84
exit()
85
86
87
def ffmpeg_install_mac():
88
try:
89
subprocess.run(
90
"brew install ffmpeg",
91
shell=True,
92
stdout=subprocess.PIPE,
93
stderr=subprocess.PIPE,
94
)
95
except FileNotFoundError:
96
print(
97
"Homebrew is not installed. Please install it and try again. Otherwise, please install FFmpeg manually and try again."
98
)
99
exit()
100
print("FFmpeg installed successfully! Please re-run the program.")
101
exit()
102
103
104
def ffmpeg_install():
105
try:
106
# Try to run the FFmpeg command
107
subprocess.run(
108
["ffmpeg", "-version"],
109
check=True,
110
stdout=subprocess.PIPE,
111
stderr=subprocess.PIPE,
112
)
113
except FileNotFoundError as e:
114
# Check if there's ffmpeg.exe in the current directory
115
if os.path.exists("./ffmpeg.exe"):
116
print(
117
"FFmpeg is installed on this system! If you are seeing this error for the second time, restart your computer."
118
)
119
print("FFmpeg is not installed on this system.")
120
resp = input(
121
"We can try to automatically install it for you. Would you like to do that? (y/n): "
122
)
123
if resp.lower() == "y":
124
print("Installing FFmpeg...")
125
if os.name == "nt":
126
ffmpeg_install_windows()
127
elif os.name == "posix":
128
ffmpeg_install_linux()
129
elif os.name == "mac":
130
ffmpeg_install_mac()
131
else:
132
print("Your OS is not supported. Please install FFmpeg manually and try again.")
133
exit()
134
else:
135
print("Please install FFmpeg manually and try again.")
136
exit()
137
except Exception as e:
138
print(
139
"Welcome fellow traveler! You're one of the few who have made it this far. We have no idea how you got at this error, but we're glad you're here. Please report this error to the developer, and we'll try to fix it as soon as possible. Thank you for your patience!"
140
)
141
print(e)
142
return None
143
144