محسن بستان
5 سال پیش توسط محسن بستان مطرح شد
6 پاسخ

کمک در استفاده از FFmpeg در لاراول

سلام دوستان.
ضمن تشکر بابت راه حل هاتون برای مشکل قبلی که مطرح کردم ، لطفا اگر میشه به من یکم توی استفاده از FFmpeg کمک کنید.
بنده روش های خیلی زیادی رو امتحان کردم تا بتونم از FFmpeg استفاده کنم اما متاسفانه هربار به مشکل خوردم وراهی جز کمک گرفتن از شما پیدا نکردم.
من از کتابخانه :
https://github.com/pascalbaljetmedia/laravel-ffmpeg برای کارم استفاده میکنم .

1 - در قدم اول ویدو رو به صورت زیر آپلود میکنم.

<?php

namespace App\\Http\\Controllers;

use App\\Http\\Requests\\StoreVideoRequest;  
use App\\Jobs\\ConvertVideoForDownloading;  
use App\\Jobs\\ConvertVideoForStreaming;  
use App\\Video;  
use FFMpeg\\Coordinate\\Dimension;  
use FFMpeg\\FFMpeg;  
use Illuminate\\Support\\Facades\\Storage;

use Illuminate\\Http\\Request;

class VideoController extends Controller  
{  
public function store(Request $request)  
{  
$video = Video::create(\[  
'disk' => 'public',  
'original\_name' => $request->video->getClientOriginalName(),  
'path' => Storage::put('public/videos', $request->file('video')),  
'title' => $request->title,  
\]);

return response()->json([
   'uploaded'
], 201);

}

}

آپلود ویدیو مشکلی نداره و به درستی توی Storage ذخیره میشه.
مشکل از جایی شروع میشه که میخوام اون رو با استفاده از کتابخانه به کیفیت های مختلف تبدیل کنم. برای مثال ویدیویی که 1080 آپلود میشه ، در فایل های 720 و 480 و 144 هم دخیره بشه. اما دقیقا نمیدونم چه طوری این کار رو انجام بدم. از داکیومنت خود پکیج هم اسنتفاده کردم ولی هربار با اررور هایی رو به رو شدم. اررور درمورد disk، اررور درمورد تایپ و ... .
لطفا دوستانی که کار کردند نمونه کدی رو به بنده بدن در این مورد.


ثبت پرسش جدید
رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 5 سال پیش مطرح شد
0

@endworld
ممنون بابت پاسختون.
متاسفانه این روش هم جواب نداد. :(


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 5 سال پیش مطرح شد
0

@endworld
ممنون اما این ویدیو هم یک دمو هستش و عملا هیچی درمورد کد ارائه نداده.


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 5 سال پیش مطرح شد
2

@mohsenbostan
پیوند اولی که دادم آموزش کاملی است و یکبار با دقت پروژه رو پیاده سازی کن..
آموزش دیگری پیدا نکردم..


سعید محمدی
@saeiidm 5 سال پیش مطرح شد
0

سلام
ابتدا این پکیج و نصب کنید
https://github.com/linkthrow/ffmpeg
سپس فراخوانی کنید بصورت زیر

<?php
namespace App\Http\Controllers;
use FFMPEG;

اینم انواع مثال اجرا شده و کاربردی چه سرور چه لوکال برای شما :

        $input_file = '14-reactjs.mp4';
        /*
            -i = input file
            -deinterlace = deinterlace pictures
            -an = disable audio recording
            -ss = start time in the video (seconds)
            -t = duration of the recording (seconds)
            -r = set frame rate
            -y = overwrite existing file
            -s = resolution size
            -f = force format
        */

        FFMPEG::convert()->input(public_path('output_file.mp3'))->bitrate(128)->output(public_path('output_file.aac'))->go();
        FFMPEG::convert()->input(public_path('output_file.avi'))->bitrate(300, 'video')->output(public_path($input_file))->go();
        FFMPEG::getThumbnails('public/1.mp4', 'public/foo-thumb', 5); // Yields 5 thumbnails
        FFMPEG::convert()->input(public_path($input_file))->output(public_path('imageeeeeeeeeeee-thumb.png'))->go('-ss 120 -vframes 1'); // one imge from second of 120
        FFMPEG::convert()->input(public_path($input_file))->output(public_path('sound.mp3'))->go('-b:a 64k -ac 1');
        FFMPEG::convert()->input(public_path($input_file))->output(public_path('animation.gif'))->go('-ss 120 -vf scale=500:-1 -t 60 -r 10');

        $infofile = FFMPEG::getMediaInfo(public_path($input_file));
        //dd($infofile);
        $f_filename  =  isset($infofile['format']['filename']) ? $infofile['format']['filename'] : '';
        $f_format    =  isset($infofile['format']['format_name']) ? $infofile['format']['format_name'] : '';
        $f_duration  =  isset($infofile['format']['duration']) ? $infofile['format']['duration'] : '';
        if(!empty($f_duration)){$splitTime = explode(':', $f_duration); $f_duration = $splitTime[0].':'.$splitTime[1].':'.round($splitTime[2]);}
        $f_size      =  isset($infofile['format']['size']) ? $infofile['format']['size'] : ''; // Kibyte
        $f_bit_rate  =  isset($infofile['format']['bit_rate']) ? $infofile['format']['bit_rate'] : ''; // Kbit/s
        $f_artist    =  isset($infofile['format']['tags']['artist']) ? $infofile['format']['tags']['artist'] : '';
        $f_album     =  isset($infofile['format']['tags']['album']) ? $infofile['format']['tags']['album'] : '';
        $f_track     =  isset($infofile['format']['tags']['track']) ? $infofile['format']['tags']['track'] : '';
        $f_genre     =  isset($infofile['format']['tags']['genre']) ? $infofile['format']['tags']['genre'] : '';
        $f_title     =  isset($infofile['format']['tags']['title']) ? $infofile['format']['tags']['title'] : '';
        $f_date      =  isset($infofile['format']['tags']['date']) ? $infofile['format']['tags']['date'] : '';
        echo 'Name: '.$f_filename.'<hr>Format: '.$f_format.'<hr>Duration: '.$f_duration.'<hr>Size: '.$f_size.'<hr>Bit Rate: '.$f_bit_rate.'<hr>Artist: '.$f_artist.'<hr>Album: '.$f_album.'<hr>Track: '.$f_track.'<hr>Genre: '.$f_genre.'<hr>Title: '.$f_title.'<hr>Date: '.$f_date.'<hr>';

البته پکیج شما رو هم تست نکردم ولی مطمنا کار میکنه فقط شاید توی کدنویسی تون مشکل داشته باشید همین.
در ضمن پیشنهاد میکنم مستقیما بعد آپلود وضایف تبدیل فیلم به کیفیت های مختلف رو انجام ندید و از طریق کران جاب این کارو کنید بهتره البته بستگی به انتظارات شما از پروژه و نوع اون داره خلاصه انواع راه ها برای پیساده سازی هست که شما باید یکی و با توجه به نوع پروژه مسائل امنیتی و سرعت و استاندارد بودنش انتخاب کنید
شاد و پیروز باشید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام