ویرایش ، تبدیل فرمت فایل های ویدیویی با ffmpeg در PHP

ویرایش ، تبدیل فرمت فایل های ویدیویی با 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 ورودی برای آن قابل قبول است :

  1. FFMpeg\Filters\Video\RotateFilter::ROTATE_90
  2. FFMpeg\Filters\Video\RotateFilter::ROTATE_180
  3. 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 ورودی است :

  1. فایل واترمارک که می تواند jpg , png یا فرمت تصویری دیگری باشد معمولا png مورد استفاده قرار می گیرد .
  2. موقعیت واترمارک که به صورت آرایه ای می باشد
$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 ورودی :

  1. زمان شروع برش ویدیو به ثانیه
  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 ورودی است :

  1. ثانیه شروع گیف از ویدیو
  2. اندازه گیف
  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
ویدیوی ویرایش شده با php و ffmpeg

ویرایش فایل ویدیویی با php

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. میثم
    میثم

    برای هاست های اشتراکی هم این امکان ممکنه ؟

    02 مهر 1402 | 13:19:14
  • حسین باقری
    حسین باقری

    باید تیکت بزنید بپرسید .

    03 مهر 1402 | 19:21:20
  • محمود رنجبر نورآبادی
    محمود رنجبر نورآبادی

    سلام استاد باقری خدا قوت برای استریم ویدیو در php خام روشی وجود داره ؟ من برای راحتی ویدیو رو در آپارات ذخیره میکنم و با تگ iframe نشون میدم شما از چه روشی استفاده میکنید ؟

    12 دی 1401 | 19:45:15
    • حسین باقری
      حسین باقری

      این که بخواین ویدیو رو استریم کنید با این که بخواین نشونش بدید فرق می کنه ، برای ساخت strem میشه از php استفاده کرد که کتابخانه PHP-FFmpeg-video-streaming به کار میاد که باید منابع هاستینگ خیلی خوبی برخوردار باشید ، اما اگر فقط میخواین یک ویدیو رو در وبسایت تون نشون بدید iframe یا لینک مستقیم ویدیو بهترین روش های ممکن .

      12 دی 1401 | 19:49:32
    contact us