سلام دوستان.
ضمن تشکر بابت راه حل هاتون برای مشکل قبلی که مطرح کردم ، لطفا اگر میشه به من یکم توی استفاده از 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، اررور درمورد تایپ و ... .
لطفا دوستانی که کار کردند نمونه کدی رو به بنده بدن در این مورد.
@mohsenbostan
پیوند اولی که دادم آموزش کاملی است و یکبار با دقت پروژه رو پیاده سازی کن..
آموزش دیگری پیدا نکردم..
سلام
ابتدا این پکیج و نصب کنید
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>';
البته پکیج شما رو هم تست نکردم ولی مطمنا کار میکنه فقط شاید توی کدنویسی تون مشکل داشته باشید همین.
در ضمن پیشنهاد میکنم مستقیما بعد آپلود وضایف تبدیل فیلم به کیفیت های مختلف رو انجام ندید و از طریق کران جاب این کارو کنید بهتره البته بستگی به انتظارات شما از پروژه و نوع اون داره خلاصه انواع راه ها برای پیساده سازی هست که شما باید یکی و با توجه به نوع پروژه مسائل امنیتی و سرعت و استاندارد بودنش انتخاب کنید
شاد و پیروز باشید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟