Конвертация AVI в FLV на сервере
Сегодня я напишу долгожданную статью для многих моих посетителей: "Как конвертировать AVI в FLV на сервере". Возможно, Вы читали одну из моих прошлых статей о том, что AVI на сайте никак не просмотреть. И если пользователь загружает к Вам на сайт видео в формате AVI, надеясь потом его просмотреть (например, как на Youtube), то на сервере необходимо данное видео конвертировать во Flash-формат, например, в FLV. И в этой статье Вы узнаете, как это сделать.
Как я уже говорил, потребуется стороннее приложение, которое называется ffmpeg. Данное приложение должно быть у Вас уже установлено: установка ffmpeg на Denwer.
Теперь такой момент. В интересах простоты я советую Вам скопировать приложение ffmpeg в корень Вашего сайта.
Итак, сейчас у Вас должна быть установлена библиотека php_ffmpeg.dll, а также приложение ffmpeg должно находиться в корне сайта.
Теперь привожу код конвертации AVI в FLV с помощью приложения ffmpeg и библиотеки php_ffmpeg.dll:
<?php
//Полный путь к исходному файлу
$input = $_SERVER['DOCUMENT_ROOT']."/video.avi";
//Имя выходного файла
$output = "video.flv";
//Создание объекта ffmpeg_movie
$ffmpeg = new ffmpeg_movie($input);
//Увеличиваем ширину и высоту видео в 2 раза
$width = 2 * $ffmpeg->getFrameWidth();
$height = 2 * $ffmpeg->getFrameHeight();
//Вызываем приложение ffmpeg с соответствующими параметрами
system("ffmpeg -i $input -ar 44100 -s ".$width."x".$height." -f flv $output");
?>
Фактически, мы данным кодом не только провели конвертацию видео из AVI в FLV, но ещё и увеличили размеры видео. Разумеется, Вы можете этого не делать.
Полное описание параметров приложения ffmpeg я приводить здесь не буду, так как их огромное количество. Подробное описание всевозможных параметров описано здесь: http://www.ffmpeg.org/ffmpeg.html. От себя хочу добавить, что данное приложение позволяет изменять не только все возможные параметры видео, но и аудио, поэтому оно является универсальным. Всё, что нужно - это узнать синтксис команды, а дальше Вы можете спокойно вызывать его в PHP с помощью функции system().
Также чтобы использовать это приложение на полную катушку очень важно знать API библиотеки php_ffmpeg.dll, которое подробно описано здесь: http://ffmpeg-php.sourceforge.net/doc/api/.
-
- Михаил Русаков
Комментарии (26):
Михаил я зделал как ты писал но у меня ни чево не полочилось по советуй куда обратить внимания
Ответить
ffmpeg точно установлен? Код скрипта выдаёт какие-нибудь ошибки?
Ответить
Михаил спасиба я там разабрался. Как мне зделать чтобы не увиличывалося видео.
Ответить
Если имеет ввиду размер файла, то так и должно быть. Другой формат - другой размер.
Ответить
У меня выдает ошибку Parse error: syntax error, unexpected T_VARIABLE in X:\home\mysite.local\www\index.php on line 31 В чем может быть проблема?
Ответить
Возможно, забыли поставить точку с запятой.
Ответить
Теперь выдает такое: Warning: Can't open movie file X:/home/mysite.local/www/videos.avi in X:\home\mysite.local\www\index.php on line 31 Fatal error: Call to a member function getFrameWidth() on a non-object in X:\home\mysite.local\www\index.php on line 32
Ответить
Значит, не существует такого файла.
Ответить
Может дело в коде? <?php $input = $_SERVER['DOCUMENT_ROOT']."/shakira.avi"; $output = "shakira.flv"; $ffmpeg = new ffmpeg_movie($input); $width = 2 * $ffmpeg->getFrameWidth(); $height = 2 * $ffmpeg->getFrameHeight(); system("ffmpeg -i $input -ar 44100 -s ".$width."x".$height." -f flv $output"); ?>
Ответить
Здравствуйте! Подскажите, пожалуйста, где может быть косяк. Модуль установлен, кадр картинкой вывести удается, но видео не ковертируется из avi в flv. Ничего вообще не происходит, файл не создается. Код я урезала до минимума, дабы проверить. Вот код: $input = $_SERVER['DOCUMENT_ROOT']."/test.avi"; $output = "test.flv"; $ffmpeg = new ffmpeg_movie($input); exec("ffmpeg -i $input $output");
Ответить
У этого расширения были проблемы с новой версией PHP. Может быть, проблема в этом.
Ответить
Спасибо за ответ! А это не странно, что как раз кадры создаются через php оболочку, а не работает функция вызываемая через командную строку? Если дело все-таки в версии, вы не посоветуете другое расширение, которое можно было бы использовать для тех же целей?
Ответить
О! Проблема была найдена - оно работает, если скопировать ffmpeg.exe , pthreadGC2.dll и SDL.dll в папку с кодом и видео... Подскажите, плз, как настроить это счастье, чтобы он видел эти файлы в usr\bin\ffmpeg\ как написано в инструкции по установке?
Ответить
Проверьте что у Вас в PATH правильно указана корневая директория php.
Ответить
Там все по умолчанию.. =(
Ответить
у меня вот такая ошибка.... Warning: system() has been disabled for security reasons in /home/andre118/public_html/download/includes/fileControl/view.php on line 71
Ответить
Функция system() отключена хостером.
Ответить
все разобрался функция заработала просто htacess поврежден был...Но видео тепеь тоже не конвертируем страничка тупо виснет.... А кстати есть разница если заместо ави файла вудет мп4..?
Ответить
Страница виснет, потому что этот процесс не двух секунд, а, возможно, и двух дней, если видео огромное.
Ответить
ну видео всго семь mb формат mр4 страничку не грузит только шапку грузит и файл переформатированый не создается.... Может я не туда вставляю? Я этот код вставляю в код загруз центра сайта там где встроен код плеера для просмотра видео онлайн это правильно?
Ответить
Михаил, здравствуйте! Установил ffmpeg по вашей инструкции, все прошло без проблем, тестовый файл выводит "Все работает!", конвертирует в flv без проблем. Нсколько я знаю, ffmpeg кодирует не только в flv.Решил попробовать перекодировать в mp4. Выставляю -f mp4, на выходе получаю файл mp4 со звуком но без изображения. Если поставить -f mp4 -vcodec libx264 то вообще не кодируется: создается файл mp4 размером в 1кб, ну и соответсвенно флеш плеер не воспроизводит. В чем может быть проблема. Спасибо
Ответить
Попробуйте другие ролики преобразовать в mp4.
Ответить
Ни один ролик не конвертируется в MP4
Ответить
У вас ошибка в слове "количество", в предложении "так как их огромное количетво"
Ответить
Спасибо, исправил!
Ответить
Скажите, почему ваш пример работает, а когда пытаюсь конверnировать mp4 в mp4 таким же методом, только наоборот уменьшая размер видео, ничего не работает. Подскажите пожалуйста в чем причина? Все подряд пробовал, создаются файлы - 0 byte;
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.