Ffmpeg (debian) как правильно доработать команду, для вертикального видео?

Здравствуйте, уважаемые специалисты. Нужна помощь с командой.
У меня уже есть готовая команда, которая конвертирует видео на сервере при заливке пользователем. И даже есть проверка на вертикальное видео, чтобы оно автоматически переворачивалось. Но хотелось бы еще сделать, как сейчас везде делают, при вертикальном видео размытые края, вместо черного фона. Кто знает как уже готовую команду доработать для таких потребностей?

Для начала я получаю данные о видео, не повернуто ли оно использую функцию
function search_array_returnKey($haystack, $needles) {
 	$res = '';
 	// Если пришел массив, то проверяем его
    if ( is_array($needles) ) {
    	// Начинаем обработку цикла
        foreach ($needles as $keyStr => $str) {
            if ( is_array($str) ) {
            // Если есть многомерный массив, то перебираем в цикле
                $pos = strpos_array($haystack, $str);
            } else {
            	// выполняем поиск в ключе
                $pos = strpos($str, $haystack);
            }

            if ($pos !== FALSE) {
            	// Результат есть - записываем и заканчиваем обработку цикла
            	$keyMass = $keyStr;
                break;
            }
        }
    } else {
        $pos = strpos($needles, $haystack);
    }
                    if(isset($keyMass)){return $keyMass;}else{return 0;}

 }
$rotate = search_array_returnKey("rotate", $ret);
    	       if(isset($rotate) && $rotate != '0'){$strRotate = explode(":", $ret[$rotate]);$rotateRES = preg_replace('/\s/', '', $strRotate[1]);$rotateImg = $rotateRES;}

В итоге записал данные в переменную и потом в БД, чтобы при конвертировании знать позицию видео....
# После запроса данных из БД собираю команду
# Подготовим разворот видео, если было запрошено
        if($video['rotate'] == '0' || $video['rotate'] == '360' || $video['rotate'] == ''){$vr = '';}
        if($video['rotate'] == '90'){$vr = '-vf "transpose=1"';} // 90 градусов по часовой
        if($video['rotate'] == '180'){$vr = '-vf "transpose=1,transpose=1"';} // 180 градусов по часовой
        if($video['rotate'] == '270'){$vr = '-vf "transpose=2"';} // 270 градусов по часовой
$cmd = 'ffmpeg -y -i '.$catUpl.'/'.$dirDn.'/noconvert_'.$video['realname'].' -map_metadata -1 -map 0:v:0 -map 0:a:0 -vcodec h264 -pix_fmt yuv420p -vsync 1 -async 1 -color_primaries 1 -color_trc 1 -colorspace 1 -vf scale="\'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)\'" '.$vr.' -crf 20 -preset medium -profile:v baseline -level 3.0 -maxrate 800k -bufsize 1200k -ac 2 -c:a libfdk_aac -b:a 128k -f mp4 -movflags +faststart '.$catUpl.'/'.$dirDn.'/'.$video['realname'].' 2>&1';
# Запускаю конвертирование
    	exec($cmd,$retRES);
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вот тут предлагают такую команду для этого эффекта:
ffmpeg \
  -i input.mp4 \
  -lavfi '[0:v] scale=ih*16/9:-1, boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];  [bg][0:v]overlay=(W-w)/2:(H-h)/2, crop=h=iw*9/16' \
  -vb 800K \
  output.webm

Пример: исходное видео и результат.

Адаптируйте под свою задачу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы