Trim and Download youtube videos easily
import yt_dlp
import datetime
def download_youtube_segment(video_url, start_time, end_time, output_path="output.mp4"):
"""Downloads a segment of a YouTube video.
Args:
video_url (str): The URL of the YouTube video.
start_time (str): Start time in HH:MM:SS format (e.g., "00:24:30").
end_time (str): End time in HH:MM:SS format (e.g., "00:24:30").
output_path (str): Path to save the downloaded segment. Defaults to "output.mp4".
"""
def convert_time_to_seconds(time_str):
time_obj = datetime.datetime.strptime(time_str, "%H:%M:%S").time()
return time_obj.hour * 3600 + time_obj.minute * 60 + time_obj.second
start_sec = convert_time_to_seconds(start_time)
end_sec = convert_time_to_seconds(end_time)
ydl_opts = {
'format': '137+140/best', # Select format 137 for video and 140 for audio or the best available
'outtmpl': output_path,
'postprocessor_args': ['-movflags', 'frag_keyframe+empty_moov'],
'download_ranges': lambda info_dict, ydl: [{'start_time': start_sec, 'end_time': end_sec}],
'verbose': True,
'noplaylist': True, #Added no playlist option to stop yt-dlp from downloading entire playlist
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
try:
ydl.download([video_url])
except yt_dlp.utils.DownloadError as e:
print(f"Error downloading video: {e}")
if __name__ == "__main__":
video_url = input("Enter the YouTube video URL: ")
start_time = input("Enter the start time (HH:MM:SS): ")
end_time = input("Enter the end time (HH:MM:SS): ")
output_path = input("Enter the output file name (e.g., my_segment.mp4, or press Enter for 'output.mp4'): ")
if not output_path:
output_path = "output.mp4" #Set default name
download_youtube_segment(video_url, start_time, end_time, output_path)
print("Download complete!")