pyvideotrans / videotrans /task /update_ffmpeg.py
jameson512
Upload files via LFS
1f235c3
Raw
History Blame Contribute Delete
3.08 kB
"""
# License
This script for downloading/updating ffmpeg was created by Thiago Ramos.
Contact: thiagojramos@outlook.com
The ffmpeg executables (ffmpeg.exe and ffprobe.exe) are created and maintained by the FFmpeg developers.
For more information, visit the FFmpeg GitHub repository: https://github.com/BtbN/FFmpeg-Builds
This script is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the script or the use or other dealings in the script.
"""
import os
import shutil
import zipfile
import requests
# Gets the current script's directory
script_dir = os.path.dirname(os.path.abspath(__file__))
# Defines the destination directory and temporary directory relative to the script directory
dest_dir = os.path.join(script_dir, "..", "..", "ffmpeg")
temp_dir = os.path.join(dest_dir, "temp_ffmpeg")
os.makedirs(dest_dir, exist_ok=True)
# GitHub API URL to get the latest ffmpeg version
api_url = "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
response = requests.get(api_url)
latest_release = response.json()
latest_version = latest_release["tag_name"]
download_url = "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.0-latest-win64-gpl-7.0.zip"
# Destination path for the download
zip_path = os.path.join(dest_dir, "ffmpeg.zip")
# Download the zip file
print("Downloading ffmpeg.zip...")
with requests.get(download_url, stream=True) as r:
r.raise_for_status()
with open(zip_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
# Extract the contents of the zip file
print("Extracting the contents of ffmpeg.zip...")
with zipfile.ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(temp_dir)
# Paths to the binaries within the extracted zip file
ffmpeg_exe = os.path.join(
temp_dir, "ffmpeg-n7.0-latest-win64-gpl-7.0", "bin", "ffmpeg.exe"
)
ffprobe_exe = os.path.join(
temp_dir, "ffmpeg-n7.0-latest-win64-gpl-7.0", "bin", "ffprobe.exe"
)
# Checks if the files already exist and removes them if necessary
if os.path.exists(os.path.join(dest_dir, "ffmpeg.exe")):
print("Removing existing ffmpeg.exe file...")
os.remove(os.path.join(dest_dir, "ffmpeg.exe"))
if os.path.exists(os.path.join(dest_dir, "ffprobe.exe")):
print("Removing existing ffprobe.exe file...")
os.remove(os.path.join(dest_dir, "ffprobe.exe"))
# Moves the new binaries to the destination directory
print("Moving new binaries to the destination directory...")
shutil.move(ffmpeg_exe, os.path.join(dest_dir, "ffmpeg.exe"))
shutil.move(ffprobe_exe, os.path.join(dest_dir, "ffprobe.exe"))
# Clean up temporary files
print("Cleaning up temporary files...")
os.remove(zip_path)
shutil.rmtree(temp_dir)
print("Download, extraction, and replacement completed!")