import gradio as gr import subprocess import os def enhance_video(input_file): """ Hàm xử lý video đầu vào và trả về video đã tăng cường. """ # Kiểm tra xem input_file có tồn tại không if not input_file: return "Không có file video nào được tải lên." # Sử dụng đường dẫn file do Gradio cung cấp input_path = input_file output_path = "enhanced_output.mp4" # Định nghĩa các bộ lọc ffmpeg filters = [ "scale='if(gt(a,16/9),1920,-1)':'if(gt(a,16/9),-1,1080)'", # Giữ tỷ lệ màn hình "pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black", # Đệm viền đen nếu cần "nlmeans=s=3:p=3:r=3", # Giảm nhiễu "unsharp=5:5:1.0", # Làm sắc nét "eq=contrast=1.2:brightness=0.1", # Điều chỉnh tương phản/sáng "yadif=mode=1" # Deinterlace ] # Kết hợp các bộ lọc thành chuỗi filter_chain = ",".join(filters) # Xây dựng lệnh ffmpeg với tùy chọn -y để ghi đè file đầu ra command = [ "ffmpeg", "-y", # Tự động ghi đè file đầu ra "-i", input_path, # File đầu vào "-vf", filter_chain, # Áp dụng các bộ lọc "-c:v", "libx265", # Codec HEVC (hiệu quả hơn H.264) "-crf", "23", # Chất lượng video (thấp hơn = tốt hơn) "-preset", "medium", # Tốc độ mã hóa (medium là cân bằng) "-c:a", "copy", # Sao chép âm thanh nguyên bản output_path # File đầu ra ] try: # Thực thi lệnh ffmpeg subprocess.run(command, check=True) return output_path # Trả về file đầu ra except subprocess.CalledProcessError as e: return f"Lỗi khi xử lý video: {e}" # Tạo giao diện Gradio with gr.Blocks() as demo: gr.Markdown("# Video Enhancement with FFmpeg") gr.Markdown("Upload a video and get an enhanced version with improved quality.") with gr.Row(): input_video = gr.File(label="Upload Video") output_video = gr.Video(label="Enhanced Video") submit_button = gr.Button("Enhance Video") submit_button.click(enhance_video, inputs=input_video, outputs=output_video) # Khởi chạy ứng dụng demo.launch()