Skip to content

wachirachoomsiri/mp4-to-m3u8-R2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MP4 to HLS Converter

เครื่องมือแปลงวิดีโอ 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 (ติดตั้งอัตโนมัติในคอนเทนเนอร์)

🚀 การติดตั้ง

1. Clone โปรเจค

git clone https://github.com/your-username/mp4-to-hls-converter.git
cd mp4-to-hls-converter

2. สร้างไฟล์ .env

สร้างไฟล์ .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                    # เก็บไฟล์หลังการแปลงเสร็จสิ้น

3. สร้าง Docker Image และเตรียมไดเรกทอรี

# สร้างไดเรกทอรีสำหรับเก็บข้อมูล
mkdir -p data/input data/output data/state

# สร้าง Docker Image
docker-compose build

📖 การใช้งาน

การใช้ API Mode

  1. เริ่มเซิร์ฟเวอร์
docker-compose up -d

หรือใช้สคริปต์จัดการงาน:

./job-manager.sh start-server
  1. ส่งคำขอแปลงวิดีโอ:
curl -X POST http://localhost:3000/convert \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/video.mp4"}'

การใช้ Command Line Mode

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

🔍 API Endpoints

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                  # เอกสารโปรเจค

🔧 คำแนะนำการใช้งาน

  1. การเลือกความละเอียด: ระบบจะเลือกแปลงเฉพาะความละเอียดที่ต่ำกว่าหรือเท่ากับความละเอียดของวิดีโอต้นฉบับเท่านั้น
  2. การใช้ GPU: ถ้าตั้งค่า USE_GPU=auto ระบบจะตรวจสอบอัตโนมัติว่าสามารถใช้ GPU ได้หรือไม่
  3. ความเร็วในการเข้ารหัส: ultrafast เร็วที่สุดแต่คุณภาพต่ำสุด, veryslow ช้าที่สุดแต่คุณภาพดีที่สุด
  4. กรณีการแปลงล้มเหลว: ใช้สคริปต์ job-manager.sh resume เพื่อทำต่อจากจุดที่ล้มเหลว

🔒 ข้อควรระวัง

  • ตรวจสอบว่ามีสิทธิ์ในการใช้งานวิดีโอที่นำมาแปลง
  • วิดีโอ HLS จะใช้พื้นที่เก็บข้อมูลมากกว่าไฟล์ MP4 ต้นฉบับ
  • การใช้ GPU จะได้ประสิทธิภาพดีที่สุดกับการ์ดจอ NVIDIA ที่รองรับ NVENC

🤝 การมีส่วนร่วม

ติดบั๊ก? ต้องการฟีเจอร์ใหม่? อยากช่วยพัฒนา? สามารถสร้าง issue หรือส่ง pull request ได้ที่ GitHub repository

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors