Реклама на сайте Advertise with us

Mencoder не уменьшает видео

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 23/07/11 в 21:15       Ответить с цитатойцитата 

Почему mencoder может не масштабировать видео?
В параметрах указано -vf scale=608:-2
но на выходе видео получается в исходном разрешении, как у исходника.
Жму в flv.

0
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 24/07/11 в 12:37       Ответить с цитатойцитата 

Кароче, в течение бессонной ночи я таки нашел решение.
Опишу тут, чтобы другие не еблись потом с этой задачей.
В Инете я нашел только обрывки разрозненной инфы, собираю в кучу.

Итак, для того чтобы 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.

Если чето будет новое - еще напишу.

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 24/07/11 в 14:05       Ответить с цитатойцитата 

>scale=608:-2
смотрел смотрел - зачем с такими конструкциями извращаться, мало ли какой мувик попадется
кропишь, сайзишь, получается то что доктор прописал

крипта на ByBit

2
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 24/07/11 в 14:25       Ответить с цитатойцитата 

Да мало ли какое виде и с каким разрешением зальют.
Руками-то я сделаю.
Но задача делать автоматом.


Кстати, можешь помочь с регуляркой?

0
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 24/07/11 в 14:33       Ответить с цитатойцитата 

Надо вытащить это:
Код:
-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}


В двух конструкторах проверил - работает.
А в коде - не работает, хоть тресни. В чем может быть проблема?

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 24/07/11 в 15:07       Ответить с цитатойцитата 

Код:

  $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);

крипта на ByBit

8
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 24/07/11 в 15:39       Ответить с цитатойцитата 

Красиво но в мой код не станет, слишком сложно это вкрутить.
Спасибо большое, но как мне именно добыть результат, если есть строка с результатом запуска MPlayer? Я в твоем коде не очень врубился icon_smile.gif

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 24/07/11 в 17:39       Ответить с цитатойцитата 

Код:

preg_match("!-vf crop=(.*?)\)!is",$v,$matches);

крипта на ByBit

8
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 25/07/11 в 00:42       Ответить с цитатойцитата 

О, работает, спасибо!

0
 

Считаю до трех

С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918

Ссылка на сообщениеДобавлено: 25/07/11 в 12:01       Ответить с цитатойцитата 

Вот все же нет полного удовлетворения.
Видимо какие-то есть ограничения, и от чего это зависит - не пойму пока, надо много экспериментировать. Есть видео, которое ну никак не хочет урезаться и ресайзиться. То ли у кодека flv есть ограничения (я находил очень пространное упоминание о том, что большие разрешения он обрабатывать не умеет правильно), либо дело во входящем формате (уже точно вижу что MPEG4 ресайзится нормально, а вот WMV под очень большим подозрением).

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »