Trong bài viết này, tôi sẽ hướng dẫn bạn cách cắt một đoạn video từ YouTube bằng Python. Chúng ta sẽ sử dụng hai công cụ mạnh mẽ là `yt-dlp` để lấy URL trực tiếp của video và `ffmpeg` để cắt video theo khoảng thời gian mong muốn.


Yêu Cầu

Trước khi bắt đầu, bạn cần đảm bảo rằng máy tính của bạn đã cài đặt các công cụ sau:

1. Python: Bạn có thể tải và cài đặt Python từ trang chủ Python
2. yt-dlp: Đây là công cụ giúp lấy URL trực tiếp của video từ YouTube. Bạn có thể cài đặt bằng lệnh sau:
  
   pip install yt-dlp

ffmpeg: Công cụ này dùng để xử lý video. Bạn có thể tải và cài đặt từ trang chủ FFmpeg.

Code Python


Dưới đây là đoạn code Python giúp bạn cắt video từ YouTube:

import subprocess

def trim_youtube_video_stream(url, start_time, end_time, output_filename="output_cut.mp4"):
    """
    Fetch direct streaming URL using yt-dlp, then pass that URL to ffmpeg to cut from start_time to end_time.
    Times are in HH:MM:SS format.
    """
    try:
        # Use yt-dlp to get the streaming URL
        direct_url = subprocess.check_output(
            ["yt-dlp","-f", "best", "-g", url],
            text=True
        ).strip()

        # Calculate duration for the cut
        start_parts = list(map(int, start_time.split(':')))
        end_parts = list(map(int, end_time.split(':')))
        
        start_seconds = start_parts[0] * 3600 + start_parts[1] * 60 + start_parts[2]
        end_seconds = end_parts[0] * 3600 + end_parts[1] * 60 + end_parts[2]
        
        duration = end_seconds - start_seconds
        duration_str = f"{duration // 3600:02}:{(duration % 3600) // 60:02}:{duration % 60:02}"

        # Use ffmpeg to cut the stream
        command = [
            "ffmpeg",
            "-ss", start_time,
            "-i", direct_url,
            "-t", duration_str,
            "-c", "copy",
            output_filename
        ]
        subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print(f"Hoàn thành! File đã được lưu tại: {output_filename}")

    except subprocess.CalledProcessError as e:
        print(f"Lỗi khi xử lý video: {e}")
    except Exception as e:
        print(f"Đã xảy ra lỗi không mong muốn: {e}")

if __name__ == "__main__":
    youtube_link = "https://www.youtube.com/watch?v=1fMjeHNUCNs"
    start_cut = "00:17:40"
    end_cut = "00:18:02"
    trim_youtube_video_stream(youtube_link, start_cut, end_cut, "cut_output.mp4")

Giải Thích Code


Lấy URL Trực Tiếp: Chúng ta sử dụng yt-dlp để lấy URL trực tiếp của video từ link YouTube. Lệnh yt-dlp -f best -g sẽ trả về URL của video với chất lượng tốt nhất.

Tính Toán Thời Gian: Chúng ta chuyển đổi thời gian bắt đầu và kết thúc từ định dạng HH:MM:SS sang giây để tính toán khoảng thời gian cần cắt.

Cắt Video: Sử dụng ffmpeg để cắt video từ thời gian bắt đầu đến thời gian kết thúc. Lệnh ffmpeg -ss -i -t -c copy sẽ thực hiện việc cắt video mà không cần encode lại, giúp tiết kiệm thời gian.

Xử Lý Lỗi: Chúng ta sử dụng try-except để bắt và xử lý các lỗi có thể xảy ra trong quá trình thực thi.

Kết Quả


Sau khi chạy đoạn code trên, bạn sẽ nhận được một file video đã được cắt theo khoảng thời gian mong muốn. File sẽ được lưu với tên mà bạn đã chỉ định (trong ví dụ này là cut_output.mp4).

Kết Luận


Với sự kết hợp của yt-dlp và ffmpeg, bạn có thể dễ dàng cắt video từ YouTube một cách tự động bằng Python. Đây là một công cụ hữu ích cho những ai thường xuyên làm việc với video và muốn tự động hóa quy trình của mình.

Nếu bạn có bất kỳ câu hỏi hoặc gặp khó khăn gì trong quá trình thực hiện, đừng ngần ngại để lại bình luận bên dưới. Chúc bạn thành công!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

Chỉ mục
Trang web này sử dụng cookie để cung cấp cho bạn trải nghiệm duyệt web tốt hơn. Bằng cách duyệt trang web này, bạn đồng ý với việc chúng tôi sử dụng cookie.