PDA

View Full Version : سوال: چرا ffmpeg فرمت فایل رو به flv تبدیل نمی کنه؟



idocsidocs
جمعه 27 بهمن 1391, 16:05 عصر
برنامه ffmpeg رو نصب کردم و کد زیر رو توی php اجرا کردم ولی تبدیل انجام نشد، مشکل چیه؟

برنامه رو از این لینک دانلود کردم: http://ffmpeg.zeranoe.com/builds/

کدی که توی ویندوز استفاده می کنم:


<?php
exec("ffmpeg.exe -i ./1.mp4 ./1.flv");
?>

کدی که توی لینوکس استفاده می کنم:


<?php
exec("ffmpeg -i ./1.mp4 ./1.flv");
?>

eshpilen
جمعه 27 بهمن 1391, 16:13 عصر
از شما که این همه مدت کد مینویسی انتظار نمیره.
اینا رو میذاشتی اول کدت:

error_reporting(E_ALL);
ini_set('display_errors', '1');
تا هر درددلی، نصیحتی چیزی داره بریزه بیرون.
یه پیام خطایی چیزی مرد حسابی.

اگر پیام خطا نداد، در قدم بعد باید خروجی فرمان رو بگیری و بررسی کنی که آیا توش خطایی داده یا نه.
مثلا از passthru بجای exec استفاده کنی.

idocsidocs
جمعه 27 بهمن 1391, 16:18 عصر
این کد ها رو امتحان کردم ولی چیزی نشون نداد:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
passthru("ffmpeg.exe -i ./1.mp4 -f flv ./1.flv");
?>


<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
exec("ffmpeg.exe -i ./1.mp4 -f flv ./1.flv");
?>

eshpilen
جمعه 27 بهمن 1391, 16:21 عصر
مطمئنی این تابعهای اجرای فرمان باز هستن روی هاست شما؟

idocsidocs
جمعه 27 بهمن 1391, 16:40 عصر
مطمئنی این تابعهای اجرای فرمان باز هستن روی هاست شما؟


روی لوکال از xampp استفاده می کنم.
چطور می تونم متوجه بشم که exec باز هست؟
خروجی این کد YES شد:

if(function_exists('exec')){
echo 'YES';
}
else{
echo 'NO';
}

eshpilen
جمعه 27 بهمن 1391, 16:46 عصر
خب بابا یه فرمان ساده تر (builtin) رو اجرا کن ببین کار میکنه یا نه.
مثلا:

passthru('echo 1234ABCD')
passthru('echo 1 > out.txt')

اولی باید خروجی 1234ABCD رو بفرسته به مرورگر.
دومی هم یک فایل ایجاد میکنه (به احتمال زیاد باید در دایرکتوری اسکریپت باشه، ولی اگر پیدا نشد جاهای دیگه رو هم سرچ کن).

idocsidocs
جمعه 27 بهمن 1391, 17:09 عصر
passthru('echo 1 > out.txt')هر دو کد اجرا شد و مشکلی نداشت.

بنظرتون نباید آدرس محل قرار گیری ffmpeg.exe رو توی کد مشخص کرد؟

eshpilen
جمعه 27 بهمن 1391, 17:31 عصر
ffmpeg.exe رو کجا ریختی؟
بریز توی فولدر ویندوز.
اگر کار نکرد، مسیر کاملش رو بده.
مال من توی درایو ویندوزه.
الان هم این کد رو تست کردم کار کرد:

<?php
header('content-type: text/plain');
error_reporting(E_ALL);
ini_set('display_errors', '1');
passthru("ffmpeg.exe -i ./1.mp4 -f flv ./1.flv 2>&1");
?>
راستی اون آپشن ‎-f رو برای چی دادی؟ روی فایل ورودی اثر میکنه یا خروجی؟

اون ‎2>&‎1 رو هم گذاشتم چون دیدم خروجی نمیده حدس زدم ffmpeg خروجیش رو میده به stderr. الان با این دستور stderr ریدایرکت میشه به stdout.
دانش و مهارت خط فرمان اینجور جاها بدرد میخوره :چشمک:
این ریدایرکت توی لینوکس هم دقیقا به همین شکل انجام میشه.

idocsidocs
جمعه 27 بهمن 1391, 17:51 عصر
بالاخره شروع به گزارش دادن کرد!

'ffmpeg.exe' is not recognized as an internal or external command, operable program or batch file. مثل همه برنامه روی ffmpeg.exe کلیک کردم و یه صفحه خط فرمان ظاهر شد و زود بسته شد، مگه توی درایو ویندوز نصب نمی شه؟

این برنامه رو چطور نصب کنم؟

eshpilen
جمعه 27 بهمن 1391, 17:53 عصر
درایور ویندوز نه، فولدر ویندوز.
چون یکسری دایرکتوری ها هستن که جزو PATH هستن. یعنی مسیرهایی که ویندوز در اونجاها به دنبال برنامه هایی میگرده که اسمشون رو در خط فرمان آوردی.
البته با دادن آدرس مستقیم یا قرار دادن فایل exe در دایرکتوری اسکریپت هم احتمالا کار میکنه.

idocsidocs
جمعه 27 بهمن 1391, 18:18 عصر
البته با دادن آدرس مستقیم یا قرار دادن فایل exe در دایرکتوری اسکریپت هم احتمالا کار میکنه. ممنون
الان فایل رو توی درایو ویندوز کپی کردم و تبدیل انجام می شه. توی لینوکس هم بدون مشکل تبدیل می شه.
فقط چند سوال باقی مونده:
1- چرا وقتی یه فایل رو ایجاد می کنم مجوزش 644 تعیین می شه؟ می خوام موقع تبدیل و ایجاد فایل، مجوزش به 777 ست بشه.
2- می شه کاری کرد که بعد از تبدیل، فایل ورودی رو حذف کنه؟

eshpilen
جمعه 27 بهمن 1391, 18:37 عصر
چرا وقتی یه فایل رو ایجاد می کنم مجوزش 644 تعیین می شه؟
چطور مگه باید پرمیشن دیگری باشه؟

می خوام موقع تبدیل و ایجاد فایل، مجوزش به 777 ست بشه.
چرا؟

می شه کاری کرد که بعد از تبدیل، فایل ورودی رو حذف کنه؟
چرا نمیشه!
منتها واسه لینوکس یا ویندوز؟

idocsidocs
جمعه 27 بهمن 1391, 18:50 عصر
چطور مگه باید پرمیشن دیگری باشه؟تنظیمات سرور طوریه که اگر مجوز 777 نباشه، php نمی تونه فایلها رو حذف کنه.

چرا نمیشه!
منتها واسه لینوکس یا ویندوز؟ برای هر دو.

یه سوال دیگه، الان توی سرور از تابع exec استفاده کردم ولی تبدیل انجام نشده ولی تابع passthru بدون مشکل تبدیل رو انجام داد. مشکل چیه؟

eshpilen
جمعه 27 بهمن 1391, 19:10 عصر
حالا که توی PHP محدودیت نداری بهتره از توابع خود PHP برای حذف و تغییر پرمیشن و اینها استفاده کنی. اینطوری کنترل راحتتر و بیشتری داری. توی خط فرمان نوشتن بنظرم دنگ و فنگش بیشتره (بخصوص از نظر باگیابی و تست) و منم همه چیش یادم نیست و سیستم لینوکس هم زیر دستم نیست که تست کنم.
شاید بخوای اول هم چک کنی که تبدیل با موفقیت انجام شده و بعد فایل اصلی رو حذف کنی.

idocsidocs
جمعه 27 بهمن 1391, 19:36 عصر
شاید بخوای اول هم چک کنی که تبدیل با موفقیت انجام شده و بعد فایل اصلی رو حذف کنی.
این سرور طوری هست که اگر php فایلی رو ایجاد کنه و مجوزش 777 نباشه، نمی شه با php حذفش کرد یا مجوزهاش رو تغییر داد!

توی این پست (http://barnamenevis.org/showthread.php?362074-%D8%B3%D9%86%D8%AA%D9%88%D8%B3-%D9%88-ffmpeg-%D9%88-php-%D8%9F&p=1601325&viewfull=1#post1601325) توضیح دادن که چطور مجوزها رو تغییر داد. این دستورارت رو باید کجا اجرا کنم؟


chmod -R 755 /usr/bin/ffmpeg
chown -R apache:apache /usr/bin/ffmpeg
chmod -R 755 /var/www/*

برای تبدیل فایلهای صوتی به فرمت mp3 باید از چه کدی استفاده کنم؟

eshpilen
جمعه 27 بهمن 1391, 19:48 عصر
توی این پست (http://barnamenevis.org/showthread.php?362074-%D8%B3%D9%86%D8%AA%D9%88%D8%B3-%D9%88-ffmpeg-%D9%88-php-%D8%9F&p=1601325&viewfull=1#post1601325) توضیح دادن که چطور مجوزها رو تغییر داد. این دستورارت رو باید کجا اجرا کنم؟


chmod -R 755 /usr/bin/ffmpeg
chown -R apache:apache /usr/bin/ffmpeg
chmod -R 755 /var/www/*


قاعدتا در شل سیستم.
یعنی مثلا اگر ssh داری در خط فرمان ssh.
فقط یک بار این دستورات رو اجرا میکنی.

idocsidocs
جمعه 27 بهمن 1391, 19:53 عصر
قاعدتا در شل سیستم.
چطور متوجه بشم به شل سیستم دسترسی دارم؟

برای تبدیل فایلهای صوتی به فرمت mp3 باید از چه کدی استفاده کنم؟ می شه از همین کد که برای تبدیل فایلهای ویدیوی استفاده می شه، برای تبدیل فایلهای صوتی هم استفاده کرد؟

passthru("ffmpeg.exe -i input -f mp3 file.mp3 2>&1");

eshpilen
جمعه 27 بهمن 1391, 20:01 عصر
چطور متوجه بشم به شل سیستم دسترسی دارم؟
نمیدونم دیگه زیاد شاخه شاخه شد و رفتی توی چیزهایی که حضور ذهن ندارم و تحقیق و تست و اینها میخواد.
بنده هم که وقت و حوصله در این حد ندارم الان.
البته اگر VPS داشته باشی قاعدتا باید این امکانات رو داشته باشی.


برای تبدیل فایلهای صوتی به فرمت mp3 باید از چه کدی استفاده کنم؟ می شه از همین کد که برای تبدیل فایلهای ویدیوی استفاده می شه، برای تبدیل فایلهای صوتی هم استفاده کرد؟
چرا نمیشه؟
بعدم یه تست ساده هست خب تست کن :متفکر:

idocsidocs
جمعه 27 بهمن 1391, 20:41 عصر
البته اگر VPS داشته باشی قاعدتا باید این امکانات رو داشته باشی.VPS دارم ولی حوصله دستکاری تنظیمات سرور رو ندارم.

بعدم یه تست ساده هست خب تست کن :متفکر: هرچی فایل صوتی دارم همه mp3 بودن و فرمت صوتی دیگه ندارم!