Полная команда может быть следующей:
ffmpeg -y -i in.jpg -filter_complex "scale=1920:1080,setsar=1:1,crop=1584:896:172:92,split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" out.jpg
Команда применяет изображение, которое вы разместили (с именем in.jpg
).
Цепочка фильтров:
scale=1920:1080,setsar=1:1
- Измените размер ввода до 1920x1080 (setsar
используется для фиксации соотношения сторон).crop=1584:896:172:92
- Обрезает часть внутри черной рамки.split[crp0][crp1]
- Разделите обрезанный вывод на два идентичных потока (два одинаковых изображения).[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur]
- Измените размер обрезанного изображения до 1920x1080 и размойте изображение с измененным размером.[blur]
.[blur][crp1]overlay= ...
- Наложение [crp1]
поверх размытого изображения.Это работает так же для видеофайла.
Пример:
ffmpeg -y -i in.mp4 -filter_complex "scale=1920:1080,setsar=1:1,crop=1584:896:172:92,split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -vcodec libx264 -pix_fmt yuv420p -acodec copy out.mp4
Нахождение параметров crop
с помощью фильтра cropdetect
:
Описание фильтра обнаружение обрезки:
Auto-detect the crop size.
It calculates the necessary cropping parameters and prints the recommended parameters via the logging system.
The detected dimensions correspond to the non-black area of the input video.
Использование результата cropdetect
с Linux описано в эта почта.
Я хотел использовать его в Windows 10 и нашел этот пример,
но это не работает...
Следующий код работает (с версией ffmpeg 4.4.1-full_build-www.gyan.dev):
ffmpeg -hide_banner -i in.jpg -vf scale=1920:1080,setsar=1:1,cropdetect=skip=0 -t 1 -f null - 2>&1 | findstr /R /C:"crop = " > log.txt
for /F "tokens=14* delims= " %%i in (log.txt) do set crop=%%i
echo %crop%
Использование %crop%
с командой FFmpeg:
ffmpeg -y -i in.jpg -filter_complex "scale=1920:1080,setsar=1:1,%crop%,split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" out.jpg
Пакетный файл без записи в log.txt
:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set count=1
for /F "tokens=2* delims= = " %%F in ('"ffmpeg -hide_banner -i in.jpg -vf scale=1920:1080,setsar=1:1,cropdetect=skip=0 -t 1 -f null - 2>&1"') do (
set var!count!=%%F
set /a count=!count!+1
)
echo %var1%
ffmpeg -y -i in.jpg -filter_complex "scale=1920:1080,setsar=1:1,crop=%var1%,split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" out.jpg
endlocal