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? Я в твоем коде не очень врубился
цитата
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 под очень большим подозрением).
Новая тема
Ответить
Эта страница в полной версии