راکت
حل شده

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

6 پاسخ

سلام دوستان.
ضمن تشکر بابت راه حل هاتون برای مشکل قبلی که مطرح کردم ، لطفا اگر میشه به من یکم توی استفاده از 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، اررور درمورد تایپ و ... .
لطفا دوستانی که کار کردند نمونه کدی رو به بنده بدن در این مورد.

ثبت پرسش جدید

پاسخ‌ها

6
رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

بهترین پاسخ
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

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

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

شاید پاسخ شما همین‌جا باشد

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

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

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

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

سعید محمدی
سعید محمدی
@saeiidm

سلام
ابتدا این پکیج و نصب کنید
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>';

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

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

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