ویرایش ، تبدیل فرمت فایل های ویدیویی با ffmpeg در PHP
ویرایش فایل ویدیویی با php – در این آموزش کلی ویرایش بر روی فایل های ویدیویی از جمله برش تکه ای از ویدیو ، تغییر اندازه
افزودن واترمارک ، تبدیل فرمت ، چرخش ویدیو ، تبدیل ویدیو به صوت ، ساخت گیف را انجام خواهیم داد .
در صورتی که با کتابخانه ffmpeg آشنا نیستید پیشنهاد می کنم آموزش نصب PHP ffmpeg را مطالعه کنید .
1- تبدیل فرمت ویدیو ، تغییر اندازه ویدیو با PHP
<?php require 'vendor/autoload.php'; $ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $video->filters()->resize(new FFMpeg\Coordinate\Dimension(480, 270))->synchronize(); $video->save(new FFMpeg\Format\Video\X264(), 'output/car-converted.mp4'); ?>
دلیل استفاده از متود synchronize همگام سازی صدا و تصویر است .
متود save جهت ذخیره فایل است که اولین ورودی نوع کدک ویدیو و دومین مسیر ذخیره آن است .
در صورتی که تمایلی به حفظ Aspect ratio ندارید می توانید به جای متود resize از pad استفاده کنید .
$video->filters()->pad(new FFMpeg\Coordinate\Dimension(720, 405))->synchronize();
تبدیل به فرمت avi
$video->save(new FFMpeg\Format\Video\X264(), 'output/car-converted.avi');
تبدیل به فرمت wmv
$video->save(new FFMpeg\Format\Video\WMV(), 'output/car-converted.wmv');
تبدیل به فرمت webm
$video->save(new FFMpeg\Format\Video\WebM(), 'output/car-converted.webm');
2- خروجی عکس از یک زمان خاص ویدیو
می توانیم با استفاده از متود frame از زمان مورد نظر ویدیو خروجی jpg یا فرمت های picture دیگری را بگیریم .
ورودی اول زمان مورد نظر به ثانیه و دومین مسیر ذخیره فایل
$video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(19))->save('output/screenshot.jpg');
3- نمایش درصد پردازش ویدیو و تنظیم کیفیت صدا و نرخ تصویر
$format = new FFMpeg\Format\Video\X264(); $format->on('progress', function ($video, $format, $percentage) { echo "$percentage% \n"; }); $format ->setKiloBitrate(1000) ->setAudioChannels(2) ->setAudioKiloBitrate(256); $video->save($format , 'output/car-converted.mp4');
4- تبدیل ویدیو به صوت و خروجی موج صوتی
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $audio_format = new FFMpeg\Format\Audio\Mp3(); $video->save($audio_format, 'output/audio.mp3'); $audio = $ffmpeg->open( 'output/audio.mp3' ); $waveform = $audio->waveform(); $waveform->save( 'output/waveform.png' );
5- چرخش تصویر فایل ویدیویی
متود rotate که تصویر ویدیویی را می چرخاند دارای 1 ورودی می باشد که زاویه آن می باشد و فقط 3 ورودی برای آن قابل قبول است :
- FFMpeg\Filters\Video\RotateFilter::ROTATE_90
- FFMpeg\Filters\Video\RotateFilter::ROTATE_180
- FFMpeg\Filters\Video\RotateFilter::ROTATE_270
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $video->filters()->rotate(FFMpeg\Filters\Video\RotateFilter::ROTATE_180)->synchronize(); $video->save(new FFMpeg\Format\Video\X264(), 'output/car-converted.avi')
6- افزودن واترمارک به ویدیو
متود watermark دارای 2 ورودی است :
- فایل واترمارک که می تواند jpg , png یا فرمت تصویری دیگری باشد معمولا png مورد استفاده قرار می گیرد .
- موقعیت واترمارک که به صورت آرایه ای می باشد
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $video->filters()->watermark('files/watermark.png', array( 'position' => 'absolute', 'x' => 90, 'y' => 220, )); $video->save(new FFMpeg\Format\Video\X264(), 'output/car-converted.avi')
همچنین می توان موقعیت watermark را به صورت relative هم وارد کرد :
array( 'position' => 'relative', 'right' => 20, 'bottom' => 35, )
7- برش قسمتی از ویدیو ( ساخت کلیپ ویدیویی )
متود clip دارای 2 ورودی :
- زمان شروع برش ویدیو به ثانیه
- طول برش به ثانیه
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(11), FFMpeg\Coordinate\TimeCode::fromSeconds(30)); $video->save(new FFMpeg\Format\Video\X264(), 'output/car-converted.avi')
8- چسباندن چند ویدیوی مختلف
3 فایل ویدیویی را میخواهیم ادغام کنیم که اولین ، ویدیویی است که سازنده آبجکت video می باشد و 2 فایل دیگر با متود concat قابل انجام است .
در اینجا به جای متود save از متود saveFromDifferentCodecs استفاده می کنیم بدلیل کدک های مختلفی که فایل های ویدیویی دارند .
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('output/car-converted1.avi'); $format = new FFMpeg\Format\Video\X264(); $video ->concat(array('output/car-converted2.avi', 'output/car-converted3.avi')) ->saveFromDifferentCodecs($format, 'output/car.mp4');
9- تبدیل ویدیو به گیف
متود gif دارای 3 ورودی است :
- ثانیه شروع گیف از ویدیو
- اندازه گیف
- مدت زمان گیف
$ffmpeg = FFMpeg\FFMpeg::create(); $video = $ffmpeg->open('files/Car.mkv'); $video ->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(1), new FFMpeg\Coordinate\Dimension(854, 480), 10) ->save('output/car.gif');
10- یک ویرایش پیشرفته ویدیویی
در این ویرایش قرار است که 2 ویدیو را به طور همزمان در کنار یکدیگر نمایش دهیم :
$ffmpeg = FFMpeg\FFMpeg::create(); $inputs = array( 'output/car-converted1.mp4', 'output/car-converted2.mp4', ); $advancedMedia = $ffmpeg->openAdvanced($inputs); $advancedMedia->filters() ->custom('[0:v][1:v]', 'hstack', '[v]'); $advancedMedia ->map(array('0:a', '[v]'), new FFMpeg\Format\Video\X264('aac', 'libx264'), 'output/output.mp4') ->save();
که پیش نمایش آن را در زیر مشاهده می کنید :
لیست نظرات
برای هاست های اشتراکی هم این امکان ممکنه ؟
باید تیکت بزنید بپرسید .
سلام استاد باقری خدا قوت برای استریم ویدیو در php خام روشی وجود داره ؟ من برای راحتی ویدیو رو در آپارات ذخیره میکنم و با تگ iframe نشون میدم شما از چه روشی استفاده میکنید ؟
این که بخواین ویدیو رو استریم کنید با این که بخواین نشونش بدید فرق می کنه ، برای ساخت strem میشه از php استفاده کرد که کتابخانه PHP-FFmpeg-video-streaming به کار میاد که باید منابع هاستینگ خیلی خوبی برخوردار باشید ، اما اگر فقط میخواین یک ویدیو رو در وبسایت تون نشون بدید iframe یا لینک مستقیم ویدیو بهترین روش های ممکن .