เครื่องมือแปลงวิดีโอ MP4 เป็นรูปแบบ HLS (HTTP Live Streaming) พร้อมระบบจัดการงานและ API สำหรับการใช้งาน
- แปลงวิดีโอ MP4 เป็น HLS: รองรับการทำ Adaptive Streaming
- รองรับหลายความละเอียด: 480p, 720p, 1080p, 2160p (4K)
- เร่งความเร็วด้วย GPU: ใช้ NVIDIA GPU สำหรับการเข้ารหัสวิดีโอ (ถ้ามี)
- อัพโหลดอัตโนมัติ: อัพโหลดไฟล์ HLS ไปยัง Cloudflare R2
- ระบบจัดการงาน: สามารถทำงานต่อได้หากการแปลงหรืออัพโหลดถูกขัดจังหวะ
- RESTful API: ใช้งานผ่าน API หรือ Command Line
- ติดตามความคืบหน้า: แสดงสถานะและความคืบหน้าของงานแปลงวิดีโอแบบเรียลไทม์
- Node.js 18+
- Docker และ Docker Compose
- NVIDIA GPU (ตัวเลือก - สำหรับการเข้ารหัสที่เร็วขึ้น)
- FFmpeg (ติดตั้งอัตโนมัติในคอนเทนเนอร์)
git clone https://github.com/your-username/mp4-to-hls-converter.git
cd mp4-to-hls-converterสร้างไฟล์ .env ในโฟลเดอร์โปรเจคโดยใช้รูปแบบต่อไปนี้:
# Cloudflare R2 (สำหรับเก็บไฟล์)
R2_ACCOUNT_ID=your_cloudflare_account_id
R2_ACCESS_KEY_ID=your_access_key
R2_SECRET_ACCESS_KEY=your_secret_key
R2_BUCKET_NAME=your_bucket_name
R2_PATH_KEY=optional_folder_path
# ตั้งค่าการแปลงวิดีโอ
RESOLUTIONS=480p,720p,1080p,2160p # ความละเอียดที่ต้องการแปลง
ENCODING_PRESET=medium # ความเร็วในการเข้ารหัส (ultrafast ถึง veryslow)
USE_GPU=auto # auto, yes, no
SEGMENT_DURATION=10 # ความยาวของแต่ละ segment (วินาที)
KEEP_FILES=true # เก็บไฟล์หลังการแปลงเสร็จสิ้น# สร้างไดเรกทอรีสำหรับเก็บข้อมูล
mkdir -p data/input data/output data/state
# สร้าง Docker Image
docker-compose build- เริ่มเซิร์ฟเวอร์
docker-compose up -dหรือใช้สคริปต์จัดการงาน:
./job-manager.sh start-server- ส่งคำขอแปลงวิดีโอ:
curl -X POST http://localhost:3000/convert \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/video.mp4"}'docker-compose run --rm \
-e SOURCE_URL=https://example.com/video.mp4 \
converterหรือระบุความละเอียดเฉพาะ:
docker-compose run --rm \
-e SOURCE_URL=https://example.com/video.mp4 \
-e RESOLUTIONS=720p,1080p \
converterสคริปต์ job-manager.sh ช่วยให้การจัดการงานแปลงวิดีโอง่ายขึ้น:
# แสดงรายการงานทั้งหมด
./job-manager.sh list
# แสดงรายละเอียดของงาน
./job-manager.sh show JOB_ID
# ดำเนินการต่อสำหรับงานที่ถูกขัดจังหวะ
./job-manager.sh resume JOB_ID https://example.com/video.mp4
# ดำเนินการต่อเฉพาะการอัพโหลด
./job-manager.sh resume-upload JOB_ID https://example.com/video.mp4
# ลบงาน
./job-manager.sh delete JOB_ID
# ลบงานที่เสร็จสมบูรณ์ทั้งหมด
./job-manager.sh cleanup| Endpoint | Method | Description |
|---|---|---|
/health |
GET | ตรวจสอบสถานะเซิร์ฟเวอร์ |
/convert |
POST | แปลงวิดีโอ (ส่ง JSON body) |
/convert-simple |
GET | แปลงวิดีโอโดยใช้ query parameters |
/check-gpu |
GET | ตรวจสอบการใช้งาน GPU |
/jobs |
GET | แสดงรายการงานทั้งหมด |
/jobs/:jobId |
GET | แสดงรายละเอียดของงานที่ระบุ |
/jobs/:jobId |
DELETE | ลบงานที่ระบุ |
/upload-status/:jobId |
GET | ตรวจสอบสถานะการอัพโหลด |
/resume-upload/:jobId |
POST | ดำเนินการต่อเฉพาะการอัพโหลด |
/status-summary |
GET | แสดงสรุปสถานะของงานทั้งหมด |
| พารามิเตอร์ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
RESOLUTIONS |
ความละเอียดที่ต้องการ (คั่นด้วยเครื่องหมายจุลภาค) | 480p,720p,1080p |
ENCODING_PRESET |
ความเร็วในการเข้ารหัส | medium |
USE_GPU |
การใช้งาน GPU (auto, yes, no) |
auto |
SEGMENT_DURATION |
ความยาวของแต่ละ segment (วินาที) | 10 |
KEEP_FILES |
เก็บไฟล์หลังการแปลงเสร็จสิ้น | true |
VIDEO_ID |
กำหนด ID ของวิดีโอเอง (optional) | random ID |
CUSTOM_OUTPUT_PATH |
กำหนดพาธสำหรับผลลัพธ์เอง (optional) | - |
mp4-to-hls-converter/
├── data/ # ไดเรกทอรีสำหรับเก็บข้อมูล
│ ├── input/ # โฟลเดอร์สำหรับไฟล์นำเข้า MP4
│ ├── output/ # โฟลเดอร์สำหรับไฟล์ผลลัพธ์ HLS
│ └── state/ # ไฟล์สถานะของงาน
├── index.js # โค้ดหลักของแอปพลิเคชัน
├── job-manager.sh # สคริปต์จัดการงาน
├── Dockerfile # กำหนดการสร้าง Docker Image
├── docker-compose.yml # กำหนดการรัน Docker Container
├── .env # ไฟล์ตั้งค่าสภาพแวดล้อม
└── README.md # เอกสารโปรเจค
- การเลือกความละเอียด: ระบบจะเลือกแปลงเฉพาะความละเอียดที่ต่ำกว่าหรือเท่ากับความละเอียดของวิดีโอต้นฉบับเท่านั้น
- การใช้ GPU: ถ้าตั้งค่า
USE_GPU=autoระบบจะตรวจสอบอัตโนมัติว่าสามารถใช้ GPU ได้หรือไม่ - ความเร็วในการเข้ารหัส:
ultrafastเร็วที่สุดแต่คุณภาพต่ำสุด,veryslowช้าที่สุดแต่คุณภาพดีที่สุด - กรณีการแปลงล้มเหลว: ใช้สคริปต์
job-manager.sh resumeเพื่อทำต่อจากจุดที่ล้มเหลว
- ตรวจสอบว่ามีสิทธิ์ในการใช้งานวิดีโอที่นำมาแปลง
- วิดีโอ HLS จะใช้พื้นที่เก็บข้อมูลมากกว่าไฟล์ MP4 ต้นฉบับ
- การใช้ GPU จะได้ประสิทธิภาพดีที่สุดกับการ์ดจอ NVIDIA ที่รองรับ NVENC
ติดบั๊ก? ต้องการฟีเจอร์ใหม่? อยากช่วยพัฒนา? สามารถสร้าง issue หรือส่ง pull request ได้ที่ GitHub repository