PDA

View Full Version : سوال: درخواست کد آپلود ویدئو ساده ؟



Mohammad-tashi
جمعه 17 مهر 1394, 01:10 صبح
باسلام
من میخام در سایت یه فرم ارسال ویدئو بذارم
که کاربر ویدئو و انتخاب کنه و سیستم اتوماتیک ازش عکس بندانگشت بگیره و ذخیره کنه و من بتونم آدرس و نام فایل رو در دیتابیس بریزم
خیلی سرچ کردم همه جا گفته شده از ffmpeg باید استفاده کرد . اصلا این تابع توی همه هاست ها هست؟



اما من هرچی خوندم نفهمیدم این کد چیکار میکنه و چطور باید ازش استفاده کرد

ممنون میشم یک کد ساده بذارید که این کارا رو بکنه
یا کد زیر رو که پیدا کردم تفسیر کنید ببینید چیه؟

البته این کد برای دروپال ظاهرا
اگه کم و زیادش رو بتونین انجام بدید ممنون میشم


<?php
// Copy this file to the root directory of your drupal site. Note you may have to tweak the options.
//
// Usage: php make_thumbs.php h t t p ://mysite.com/make_thumbs.php
//
// Set these for your site.
$home = "/home/mysite";
$ffmpeg = $home . "/bin/ffmpeg";
$tmp = $home . "/tmp";
$options = "-an -y -f mjpeg -ss 2 -s 160x92 -vframes 1 "; if (isset(
$_SERVER['argv'][1])) {
$url = parse_url($_SERVER['argv'][1]);
$_SERVER['SCRIPT_NAME'] = $url['path'];
$_SERVER['HTTP_HOST'] = $url['host'];
} include_once
'./includes/bootstrap.inc';
// disable error reporting for bootstrap process
error_reporting(E_ERROR);
// let's bootstrap: we will be able to use drupal apis
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// enable full error reporting again
error_reporting(E_ALL); if(!empty(
$_SERVER['REQUEST_METHOD'])) {
print t('This script is only executable from the command line.');
die();
} $result = db_query("SELECT * from {video}");
while ($video = db_fetch_object($result)) {
$vnid = $video->nid;
$data = unserialize($video->serialized_data);
if (is_null($data['iid']) | $data['iid'] == "") {
$thumbpath = $tmp . "/" . $video->nid . ".jpg";
print t("Generating thumbnail for " . $vnid . ".\n");
//print t($ffmpeg . " -i " . $video->vidfile . " " . $options . " " . $thumbpath ."\n");
exec($ffmpeg . " -i " . $video->vidfile . " " . $options . " " . $thumbpath, $output);
print_r($output);
$img = image_create_node_from($thumbpath);
$imgnid = $img->nid;
$data['iid'] = $imgnid;
$data = serialize($data);
db_query("UPDATE {video} SET serialized_data = '%s' WHERE nid = %d", $data, $vnid);
} else {
print t("Skipping " . $vnid . ": iid is " . $data['iid'] . "\n");
}
}
?>

pbm_soy
جمعه 17 مهر 1394, 01:51 صبح
اینکه ffmpg روی همه هاستها هست یا نه
نمیشه قطعی گفت ولی بیشتر هاستهای لینوکسی این فایل اجرایی را دارند واگر نداشته باشند هم با درخواست شما آنرا میگذارند
این تابع نیست در اصل یک فایل اجرایی است برای درک بهتر شما به این ترتیب فکر کنید که اصلا نمیخواهید برنامه تحت وب بنویسید فقط میخواهید در خط فرمان لینوکس از یک فیلم عکس بگیرید و یا روی فیلم water mark بذارید ویا میخواهید فرمت و حجم فیلم را عوض کنید
شما در خط فرمان لینوکس برنامه ffmpeg را باید اجرا کنید و به آن اسم فایل و محل ایجاد عکس بندانگشتی و فرمت آن و اندازه آنرا مشخص میکنید همه این موارد را باید در خط فرمان جلوی نام فایل اجرایی باید قید کنید به عنوان مثال



Ffmpeg -i uploadedvideo.avi -an -y -f mpeg -ss 2 -s 160x92 -vframe 1 thumbpicname thunbpath


اگر شما دستور فوق را در لینوکس بزنید سعی میکند از فایل ویدیویی به نام uploadedvideo.avi عکس کوچک تهیه کند و نام آن عکس کوچک را thunbnamepic میگذارد و آن فایل کوچک را در فولدری به نام thumbpath ذخیره میکند که آن فولدر و فایل ویدیو هر دو باید در مسیر جاری شما باید موجود باشند در غیراینصورت قبل از این اسمها باید آدرس محل قرار گرفتن آنها را باید قید کنید
و همینطور در این دستور پارامترهایی مانند فرمت عکس کوچک واندازه آن نیز مشخص شده و یا عکس کوچک از کجای فیلم گرفته شود .....
در هرصورت بطور خلاصه بخوام بگم شما با استفاده از این برنامه اجرایی در لینوکس میتوانید فیلمها را تبدیل کنید یعنی اول تمرین کنید در خط فرمان چطوری میتوانید اینکار را انجام دهید وبعد میاید این دستور را در php اجرا میکنید اگر در کد بالا دقت کنید تابع exec وجود دارد کارش اجرا کردن دستورات سیستم عامل و یا برنامه های اجرایی موجود را اجرا میکند
مثلا هاست شما ویندوزی باشد مینوشتید exec("calc.exe"); برنامه ماشین حساب ویندوز اجرا میشد دقت کنید این برنامه بروی سرور هاست اجرا میشد نه کاربری که این صفحه را باز کرده چون این دستورات در سمت سرور در حال اجرا هستند
البته اگر هاست ویندوزی هم داشته باشید و ffmpeg را در اختیارتون بگذارند در اون خط execبعداز نام فایل اجرایی حتما .exe بگذارید
چون میدانم نسخه ویندوزی هم دارد در واقع برای ویندوز کامپایل شد من تحت ویندوز استفاده نکردم

در ضمن همه این موارد زمانی کار میکند که شما دسترسی به ffmpeg داشته باشید یعنی بروی سرور نصب شده باشد و به شما دسترسی داده باشند وحق اجرای دستورات سیستم عامل را داشته باشید! چون اجازه اجرای دستورات سیستم عامل و یا اجرای برنامه های دیگر خودش یک مشکل امنیتی بزرگ است البته اگر سرور درست تنظیم باشد به چشم مشکل دیده نمیشود

pbm_soy
جمعه 17 مهر 1394, 02:07 صبح
یک مورد یادم رفته بود
اگه از هاست ویندوزی استفاده میکنید شرکت sothink ابزاری را برای تبدیل فیلمها دارد که میتوان در خط فرمان نیز کار تبدیل فایلهای فیلم را انجام داد و نحوه عملکرد کار دقیقا مانند روش بالاست که این برنامه را توسط exec باید اجرا کنید
البته یادم میاد توسایتش مثال کاملی گذاشته بودند که اجرا هم میشد البته چند سال پیش من باهاش کار کرده بودم ولی برای asp انجام دادهدبودم فکر میکنم برای php هم جواب میده ولی باید خریداری شود و یا کرک تهیه بشه
Http://www.sothink.com

Mohammad-tashi
جمعه 17 مهر 1394, 10:24 صبح
یک مورد یادم رفته بود
اگه از هاست ویندوزی استفاده میکنید شرکت sothink ابزاری را برای تبدیل فیلمها دارد که میتوان در خط فرمان نیز کار تبدیل فایلهای فیلم را انجام داد و نحوه عملکرد کار دقیقا مانند روش بالاست که این برنامه را توسط exec باید اجرا کنید
البته یادم میاد توسایتش مثال کاملی گذاشته بودند که اجرا هم میشد البته چند سال پیش من باهاش کار کرده بودم ولی برای asp انجام دادهدبودم فکر میکنم برای php هم جواب میده ولی باید خریداری شود و یا کرک تهیه بشه
Http://www.sothink.com

خیلی ممنونم از پاسخ هاتون
اما از آنجا که من تازه با این روش آشنا شدم و وقت برای تحویل پروژه کم دارم امکانش هست بفرمایید من در فرمی که 3تا فیلد دارم یکی ویدئو یکی عنوان و یکی کلید مخفی چه کدی رو در صفحه پردازش بزارم که ویدئو و تصویرش رو ذخیره کنه و اسم فایل ها رو به ما بده ؟

این کد در کل گوگل فارسی که سرچ کردم نبودش....
ممنون میشم راهنمایی نمایید
باسپاس