มา Convert YouTube เป็น MP3 ไว้ฟังเล่นๆ กัน

เริ่มต้นของเรื่องนี้ เกิดมาจากความต้องการที่ไม่สมหวังของผมเอง 555+
คืดผมอยากจะ Convert YouTube มาเป็น ไฟล์ MP3 ไว้ฟังเองเล่นๆ (มันผิดกฎหมายลิขสิทธิ์ แล้วก็ผิดกฎของ YouTube นะจ๊ะ) ก็เลยไป Google เพื่อหา เว็บที่จะ Convert ให้ แบบ Online แต่พอหาๆ ไปมันก็พอมีอยู่หรอก แต่ว่า
เพลงที่ผมจะเอามันดันมี เสียงอะไรเยอะแยะ ก่อนจะเริ่มเพลง ทีนี้ไอ้เว็บพวกนี้มันก้ไม่ยอมให้เลือกเวลา เริ่มต้น สิ้นสุด อะไรแบบนั้น ซึ่งแต่ก่อนผมใช้เว็บนึงมันมีให้ แต่พอดีมันเจ๊งไปแล้ว ไม่รู้โดนจับหรือยังไง 555+
ก็เลยเอาวะ เขียนเองแม่มเลย จะได้ใช้วันหลังด้วย !!!
แต่ก็เหมือนเดิม ด้วยความขี้เกียจ จะไปให้เขียนเองตั้งแต่ 0 มันก็เปลืองแรงไป ก็๋เลยค้นจาก Google ไปเจอ Class สั้นๆ มาตัวนึง (มันทำ HTML มาด้วยโครต ใจดีเลย)
http://www.codingforums.com/showthread.php?t=205066
พอได้โคดมา ก็เอามาแก้ๆ นิดหน่อย (นิดหน่อยจริงๆ แค่ 10 กว่าบรรทัด)
ก่อนอื่นสิ่งที่ต้องมีสำหรับบทความนี้ก็คือ
1. FFMPEG
2. CURL
สำหรับ FFMPEG for Windows ดาวน์โหลดได้ที่นี่
http://sergey89.ru/files/ffmpeg-php-win32-all.zip
* ผมใช้ใน PHP 5.2.5 ได้ แต่ 5.3.0 ไม่ Work!!!!
โดยส่วนที่แก้ไปก็มี
File HTML
1. เติม input ให้สามารถใส่ส่วนที่จะเริ่มตัดลงไปในส่วนของ HTML
<input type="text" name="ss" value="00:00:00" style="width:50px;" />
2. เอาส่วนที่ปิด Error ออก เพื่อจะได้รู้ว่ามี Error ตรงไหนบ้าง
// ini_set('display_errors',0);
3. เพิ่ม method ของส่วน Generate ให้รองรับ ช่วงเวลาได้
$ss = $_POST['ss']; echo ($converter->GenerateMP3($_POST['quality'], $ss)) ? '<p>Success!</p>' : '<p>Error generating MP3 file!</p>';
File Class
1. เอาตัวแปร Constant ของ Class ออกเปลี่ยนเป็น variable ธรรมดาๆ เพราะว่า FFMPEG ผมใช้ใน Windows มันต้องระบุ path เต็มๆ แล้วก็ไม่สามารถไประบุใน const ได้ด้วย
function __construct()
{
$this->_TEMPVIDDIR = dirname(__FILE__) . "/videos/";
$this->_SONGFILEDIR = dirname(__FILE__) . "/mp3/";
$this->_FFMPEG = dirname(__FILE__) . "/tools/ffmpeg/bin/ffmpeg.exe";
}
* ส่วนนี้ต้องตามไล่แก้ในแต่ละ method เองด้วย
2. แก้ method GenerateMP3 ซะใหม่ ให้่ตัดตามช่วงเวลาได้ กับให้ save meta data กลับไปเหมือนต้นฉบับ
function GenerateMP3($audioQuality, $ss='00:00:00')
{
$qualities = $this->GetAudioQualities();
$quality = (in_array($audioQuality, $qualities)) ? $audioQuality : $qualities[1];
//ffmpeg -ss 00:01:00 -t 00:00:45 -map_meta_data new_track.mp3:original.mp3 -acodec copy -i original.mp3 new_track.mp3
$map_meta_data = "-map_meta_data " . $this->GetSongFileName() . ":" . $this->GetTempVidFileName();
$exec_string = $this->_FFMPEG.' ' .$map_meta_data. ' -i '.$this->GetTempVidFileName().' -y -acodec libmp3lame -ab '.$quality.'k -ss '.$ss.' '.$this->GetSongFileName();
shell_exec($exec_string);
// delete temp file
$this->DeleteTempVid();
return is_file($this->GetSongFileName());
}
เท่านี้ผมก็ได้ตัว Convert เพลงจาก YouTube เนียนๆ เอาไว้มาหาเพลงฟังเล่นละ อิอิ

3 comments