Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Mencoder не уменьшает видео
цитата
23/07/11 в 21:15
 EagleOwl
Почему mencoder может не масштабировать видео?
В параметрах указано -vf scale=608:-2
но на выходе видео получается в исходном разрешении, как у исходника.
Жму в flv.
цитата
24/07/11 в 12:37
 EagleOwl
Кароче, в течение бессонной ночи я таки нашел решение.
Опишу тут, чтобы другие не еблись потом с этой задачей.
В Инете я нашел только обрывки разрозненной инфы, собираю в кучу.

Итак, для того чтобы mencoder корректно смог масштабировать видео фильтром scale, надо чтобы оба параметра (ширина и высота) были кратны 16.
В моем случае Код:
scale=608:-2
первый параметр (ширина 608) соответствует требованию. Проблема во втором. -2 означает, что высота будет подбираться исходя из пропорций, и как раз этот размер и не соответствует требованию кратности 16 в большинстве случаев.

Как обойти. Я придумал так - перед сжатием предварительно запускать видео в mplayer с параметром Код:
-vf cropdetect
, чтобы он указал параметры усечения кадра.
Строка параметров плеера примерно так выглядит:
Код:
videofile -nosound -ss 60 -frames 3 -quiet -vo null -vf cropdetect


Тут - отматываем 60 секунд вперед и проигрываем 3 кадра (меньше 3 не выдает ни одного результата). В итоге получаем длинный результат, в конце которого есть нечто вроде: Код:
Crop area: X: 2..951 Y: 2..717 (-vf crop=944:704:6:8)


Этот результат и надо вытащить регулярным выражением и подставить как параметр для mencoder.

Если чето будет новое - еще напишу.
цитата
24/07/11 в 14:05
 Sterx
>scale=608:-2
смотрел смотрел - зачем с такими конструкциями извращаться, мало ли какой мувик попадется
кропишь, сайзишь, получается то что доктор прописал
цитата
24/07/11 в 14:25
 EagleOwl
Да мало ли какое виде и с каким разрешением зальют.
Руками-то я сделаю.
Но задача делать автоматом.


Кстати, можешь помочь с регуляркой?
цитата
24/07/11 в 14:33
 EagleOwl
Надо вытащить это: Код:
-vf crop=944:704:6:8

Количество цифр может различаться.
Я написал так (может некрасиво, но ниче)
Код:
\W[a-z]{2}\s+[a-z]{4}\W[0-9]{2,4}\W[0-9]{2,4}\W[0-9]{1,5}\W[0-9]{1,5}


В двух конструкторах проверил - работает.
А в коде - не работает, хоть тресни. В чем может быть проблема?
цитата
24/07/11 в 15:07
 Sterx
Код:

  $ar=round($res['height']/$res['width'],3); if(strlen(str_replace("0.","",$ar))>2){$first_ar=$ar;$ar=_AR_DEFAULT_CLIP_;}
  if($first_ar || ($res['width'] % 16) || ($res['height'] % 16))
    {
    exec(__MPLAYER_PATH." -vo null -ao null -frames 10 -vf cropdetect ".$in_file,$resdet);
    foreach($resdet as $v){if(strstr($v,'-vf crop=')){preg_match("!-vf crop=(.*?)\)!is",$v,$matches);$pp=explode(':',$matches[1]);}}
    $suffix=',crop='.implode(":",$pp).',scale='.$pp[0].':'.$pp[1];
    }
  $tf=explode(".",strrev($movie),2);$out_file=_PICS_TEMP_.strrev($tf[1]).'.flv';
  exec(__MENCODER_PATH." ".$in_file." -o ".$out_file." -of lavf -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc -lavcopts vcodec=flv:vbitrate="._VIDEO_BITRATE_.":mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -vf harddup".$suffix);
цитата
24/07/11 в 15:39
 EagleOwl
Красиво но в мой код не станет, слишком сложно это вкрутить.
Спасибо большое, но как мне именно добыть результат, если есть строка с результатом запуска MPlayer? Я в твоем коде не очень врубился icon_smile.gif
цитата
24/07/11 в 17:39
 Sterx
Код:

preg_match("!-vf crop=(.*?)\)!is",$v,$matches);
цитата
25/07/11 в 00:42
 EagleOwl
О, работает, спасибо!
цитата
25/07/11 в 12:01
 EagleOwl
Вот все же нет полного удовлетворения.
Видимо какие-то есть ограничения, и от чего это зависит - не пойму пока, надо много экспериментировать. Есть видео, которое ну никак не хочет урезаться и ресайзиться. То ли у кодека flv есть ограничения (я находил очень пространное упоминание о том, что большие разрешения он обрабатывать не умеет правильно), либо дело во входящем формате (уже точно вижу что MPEG4 ресайзится нормально, а вот WMV под очень большим подозрением).


Эта страница в полной версии