Конвертирование видео в flv
26 сообщений
#17 лет назад
Цитата ("Stan-87"):О thxразобралсо...
только вот наводящий вопрос: мне обязательно (скриптом) сначало загружать файл в avi на сервер а затем уже только конвертировать с помощью exec()? Ведь это двойная трата времени)) так чтоб сразу конвертировалось нельзя?
Сразу можно конечно, почему ж нет. При условии, что тот процесс, который вы запускаете через exec(), поддерживает чтение из stdin. В таком случае стыкуете напрямую inputstream от веб-сервера с stdin процесса конвертора и все; только за таймаутами следить, чтобы ничего не отвалилось при задержках.
Только это неверный путь, как показывает практика. хттп - не самый надежный протокол для синхронных операций. ну и учитывайте, что в качестве ави вам могут запихать какие угодно данные, плюс еще проблема параллельных выполнений.
Обычно делается так - все, что аплоадят юзеры - оно складывается в отдельную папочку, из которой спец. скрипт (не вебный) выдергивает файлы по одному и, если есть чего, скармливает их конвертеру в порядке очереди (либо параллелит, если железо позволяет, на несколько конверторов). Суть идеи очень проста - разделить процессы аплоада и конвертации, так как рекодинг - это очень трудоемкая задача для любого сервера и крайне легко загрузить сервер на 100% рекодингом чего-нибудь тяжеловесного. Так что аплоад - это всегда риалтайм задача, а рекодинг/конвертация - это всегда оффлайн очередь. Это обычно так, но вам никто не мешает сделать так как хочется, стандартов нет.
Команды для внешних конверторов (любая OS), возможно будут полезны вам:
предполагается, что вы установили на сервер mencoder, flvtool2 и mplayer
про опции пояснять не буду, мануалы писали люди получше меня

Создание flv:
mencoder <исходный файл> -msgleve all=-1 -ofps 25 -of lavf -oac mp3lame -lameopts abr:br=64 -srate 22050 -ovc lavc -lavcopts vcodec=flv:keyint=50:vbitrate=800:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=432:-3,harddup -o <файл вывода .flv>
Получение мета-информации:
mplayer -identify -ao null -vo null -frames 0 <видео-файл>
Апдейт мета-информации:
flvtool2 -U <flv файл>
Нарезка скриншота из видео:
mplayer -really-quiet -nosound -benchmark -vo jpeg -frames 1 -ss <время остановки/скриншота> <видео-файл>