FFMpeg-Π°Π΄Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ arhitector\transcoder. Π ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
ΡΡΠΈΠ»ΠΈΡΡ ffmpeg
ΠΈ ffprobe
ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ffmpeg., (*1)
1.1. Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
- PHP 5.5 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ
FFMPEG
ΠΈ FFPROBE
1.2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
$ composer require arhitector/transcoder-ffmpeg
2. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠ°
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ
arhitector\transcoder
(ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π·Π°ΠΏΠΈΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
,
ΡΡΠ°Π½ΡΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅Π΅)., (*2)
ΠΠ΄Π°ΠΏΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΡΡΠΊΠΈ Π½Π°Π΄ Audio
, Video
, Subtitle
., (*3)
public *::__construct(string $filePath [, array $options = array()])
Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄ΠΈΠ°-ΡΠ°ΠΉΠ»Π°., (*4)
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², (*5)
-
$filePath
Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° string, ΠΏΡΡΡ Π΄ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π°ΡΠ΄ΠΈΠΎ, Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π° ΡΡΠ±ΡΠΈΡΡΠΎΠ²., (*6)
-
$options
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ array
, ΠΌΠ°ΡΡΠΈΠ² ΠΎΠΏΡΠΈΠΉ Π°Π΄Π°ΠΏΡΠ΅ΡΠ°., (*7)
ΠΡΠΈΠΌΠ΅ΡΡ, (*8)
ΠΡΠΈΠΌΠ΅Ρ #1: ΠΠ±ΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ., (*9)
// Π΄Π»Ρ Π°ΡΠ΄ΠΈΠΎ
$audio = new Arhitector\Transcoder\FFMpeg\Audio('audio.mp3', [/* ΠΎΠΏΡΠΈΠΈ */]);
// Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
$video = new Arhitector\Transcoder\FFMpeg\Video('video.mp4', [/* ΠΎΠΏΡΠΈΠΈ */]);
// ΠΈ Π΄Π»Ρ ΡΡΠ±ΡΠΈΡΡΠΎΠ²
$subtitle = new Arhitector\Transcoder\FFMpeg\Subtitle('subtitles.ass');
3. ΠΠΏΡΠΈΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠ°
-
ffmpeg.path
ΠΏΡΡΡ Π΄ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ffmpeg
, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΏ string
. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° FFMPEG
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, Π°Π΄Π°ΠΏΡΠ΅Ρ
ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ., (*10)
-
ffmpeg.threads
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ -threads
, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ integer
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 0
(Π½ΠΎΠ»Ρ)., (*11)
-
ffprobe.path
ΠΏΡΡΡ Π΄ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ffprobe
, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΏ string
., (*12)
-
timeout
Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
, ΡΠΈΠΏ integer
, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ., (*13)
ΠΡΠΈΠΌΠ΅ΡΡ, (*14)
ΠΡΠΈΠΌΠ΅Ρ #1: ΠΡΠΈΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°., (*15)
$options = [
'ffmpeg.path' => 'path/bin/ffmpeg.exe',
'ffmpeg.threads' => 12,
'ffprobe.path' => 'usr/bin/ffprobe',
'timeout' => 3600
];
ΠΡΠΈΠΌΠ΅Ρ #2: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΉ., (*16)
$audio = new Arhitector\Transcoder\FFMpeg\Audio('audio.mp3', [
'timeout' => 300,
// 'ffmpeg.path' => 'ffmpeg',
// ...
]);
ΠΡΠΈΠΌΠ΅Ρ #3: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π°Π΄Π°ΠΏΡΠ΅ΡΠ°., (*17)
$adapter = new Arhitector\Transcoder\FFMpeg\Adapter([
/* ΠΎΠΏΡΠΈΠΈ */
]);
4. Π€ΠΈΠ»ΡΡΡΡ
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠ»ΡΡΡΠΎΠ²:, (*18)
5. ΠΡΠ΅ΡΠ΅ΡΡ
....., (*19)
6. ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ transcoder-ffmpeg
Π°Π΄Π°ΠΏΡΠ΅ΡΠ°., (*20)
6.1. Π Π°Π·Π»ΠΎΠΆΠΈΡΡ Π²ΠΈΠ΄Π΅ΠΎΡΡΠ΄ Π½Π° ΠΊΠ°Π΄ΡΡ
ΠΡΠΈΠΌΠ΅Ρ #1: ΠΠ·Π²Π»Π΅ΡΡ 1 ΠΊΠ°Π΄Ρ., (*21)
$video->save(new Jpeg, 'picture.jpg');
ΠΡΠΈΠΌΠ΅Ρ #2: Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π΄ΡΠΎΠ²., (*22)
$video->save(new Png, 'picture-%05d.jpg');
7. ΠΠΈΡΠ΅Π½Π·ΠΈΡ (License)
MIT License (MIT), (*23)