syncng
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
def get_file_paths():
|
||||
"""Prompts the user for video file paths."""
|
||||
file_paths = []
|
||||
print("Enter the paths to the video files you want to merge.")
|
||||
print("Type 'done' when you are finished.")
|
||||
|
||||
while True:
|
||||
user_input = input(f"File path #{len(file_paths) + 1}: ").strip()
|
||||
|
||||
if user_input.lower() == 'done':
|
||||
if len(file_paths) < 2:
|
||||
print("Please provide at least two video files to merge.")
|
||||
continue
|
||||
break
|
||||
|
||||
if not user_input:
|
||||
continue
|
||||
|
||||
# Remove quotes if the user pasted a path with quotes
|
||||
user_input = user_input.strip('"').strip("'")
|
||||
|
||||
if os.path.exists(user_input) and os.path.isfile(user_input):
|
||||
file_paths.append(user_input)
|
||||
print(f"Added: {user_input}")
|
||||
else:
|
||||
print(f"Error: File not found at '{user_input}'. Please try again.")
|
||||
|
||||
return file_paths
|
||||
|
||||
def main():
|
||||
print("--- Video Merger Tool ---")
|
||||
|
||||
try:
|
||||
# Check if moviepy is installed
|
||||
try:
|
||||
from moviepy.editor import VideoFileClip, concatenate_videoclips
|
||||
except ImportError:
|
||||
print("Error: 'moviepy' library is not installed.")
|
||||
print("Please run: pip install -r requirements.txt")
|
||||
return
|
||||
|
||||
video_files = get_file_paths()
|
||||
|
||||
output_filename = input("Enter the output file name (e.g., merged_video.mp4): ").strip()
|
||||
if not output_filename:
|
||||
output_filename = "merged_output.mp4"
|
||||
print(f"No name provided. Using default: {output_filename}")
|
||||
|
||||
if not output_filename.lower().endswith(".mp4"):
|
||||
output_filename += ".mp4"
|
||||
print(f"Added extension. Output will be: {output_filename}")
|
||||
|
||||
print("\nProcessing videos... This may take a while depending on file size.")
|
||||
|
||||
clips = []
|
||||
try:
|
||||
for path in video_files:
|
||||
print(f"Loading {path}...")
|
||||
clip = VideoFileClip(path)
|
||||
clips.append(clip)
|
||||
|
||||
print("Concatenating clips...")
|
||||
final_clip = concatenate_videoclips(clips)
|
||||
|
||||
print(f"Writing to {output_filename} (H.264 / AAC)...")
|
||||
final_clip.write_videofile(
|
||||
output_filename,
|
||||
codec='libx264',
|
||||
audio_codec='aac',
|
||||
temp_audiofile='temp-audio.m4a',
|
||||
remove_temp=True,
|
||||
logger='bar'
|
||||
)
|
||||
|
||||
print(f"\nSuccess! Merged video saved to: {os.path.abspath(output_filename)}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"\nAn error occurred during processing: {e}")
|
||||
finally:
|
||||
# Clean up resources
|
||||
for clip in clips:
|
||||
try:
|
||||
clip.close()
|
||||
except:
|
||||
pass
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\nOperation cancelled by user.")
|
||||
except Exception as e:
|
||||
print(f"\nUnexpected error: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user