Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 23/07/11 в 21:15 |
Почему mencoder может не масштабировать видео?
В параметрах указано -vf scale=608:-2
но на выходе видео получается в исходном разрешении, как у исходника.
Жму в flv.
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 24/07/11 в 12:37 |
Кароче, в течение бессонной ночи я таки нашел решение.
Опишу тут, чтобы другие не еблись потом с этой задачей.
В Инете я нашел только обрывки разрозненной инфы, собираю в кучу.
Итак, для того чтобы mencoder корректно смог масштабировать видео фильтром scale, надо чтобы оба параметра (ширина и высота) были кратны 16.
В моем случае первый параметр (ширина 608) соответствует требованию. Проблема во втором. -2 означает, что высота будет подбираться исходя из пропорций, и как раз этот размер и не соответствует требованию кратности 16 в большинстве случаев.
Как обойти. Я придумал так - перед сжатием предварительно запускать видео в mplayer с параметром , чтобы он указал параметры усечения кадра.
Строка параметров плеера примерно так выглядит:
Код: | 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.
Если чето будет новое - еще напишу.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 24/07/11 в 14:05 |
>scale=608:-2
смотрел смотрел - зачем с такими конструкциями извращаться, мало ли какой мувик попадется
кропишь, сайзишь, получается то что доктор прописал
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 24/07/11 в 14:25 |
Да мало ли какое виде и с каким разрешением зальют.
Руками-то я сделаю.
Но задача делать автоматом.
Кстати, можешь помочь с регуляркой?
|
|
|
|
Считаю до трех
С нами с 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} |
В двух конструкторах проверил - работает.
А в коде - не работает, хоть тресни. В чем может быть проблема?
|
|
|
|
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);
|
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 24/07/11 в 15:39 |
Красиво но в мой код не станет, слишком сложно это вкрутить.
Спасибо большое, но как мне именно добыть результат, если есть строка с результатом запуска MPlayer? Я в твоем коде не очень врубился
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 24/07/11 в 17:39 |
Код: |
preg_match("!-vf crop=(.*?)\)!is",$v,$matches);
|
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 25/07/11 в 00:42 |
О, работает, спасибо!
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 25/07/11 в 12:01 |
Вот все же нет полного удовлетворения.
Видимо какие-то есть ограничения, и от чего это зависит - не пойму пока, надо много экспериментировать. Есть видео, которое ну никак не хочет урезаться и ресайзиться. То ли у кодека flv есть ограничения (я находил очень пространное упоминание о том, что большие разрешения он обрабатывать не умеет правильно), либо дело во входящем формате (уже точно вижу что MPEG4 ресайзится нормально, а вот WMV под очень большим подозрением).
|
|
|
|