![Лево право](https://rvso.com/image/1451569/%D0%9B%D0%B5%D0%B2%D0%BE%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE.png)
Мне нужно масштабировать видео из одной игры DOS с помощьюFFmpeg. Но сИнтерполяция по методу ближайшего соседана левой стороне ихBRфильтр на другом.
Вход (320x200)
Вывод (1280x800)
Вот команда, где xBR обрабатывает весь экран...
ffmpeg
-i input.avi
-sws_flags neighbor
-vcodec libx264 -strict -2
-preset veryslow -qp 0
-filter:v "xbr=4"
output.mp4
решение1
Лево право
Я обрезал изображение, чтобы уменьшить размер выходного файла исключительно для удобства просмотра.
Это покажет все видео с каждой стороны. Слеваxbr
и право естьscale
.
С использованиемhstack
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor[fg]; \
[bg][fg]hstack,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Все входные потоки вhstack
должны иметь одинаковый формат пикселей и одинаковую ширину.
С использованиемpad
&overlay
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor[fg]; \
[bg][fg]overlay=w,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Этот метод медленнее и сложнее, чем просто использованиеhstack
.
Слева и справа: с границей в 10 пикселей
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2+10[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor[fg]; \
[bg][fg]overlay=w+10,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Разделенный экран: левый и правый
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor,crop=iw/2:ih:ow:0[fg]; \
[bg][fg]hstack[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Верх и низ
С использованиемvstack
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor[fg]; \
[bg][fg]vstack,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Все входные потоки вvstack
должны иметь одинаковый формат пикселей и одинаковую ширину.
С использованиемpad
&overlay
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4,pad=iw*2[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor[fg]; \
[bg][fg]overlay=0:h,format=yuv420p[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4
Этот метод медленнее и сложнее, чем просто использованиеvstack
.
Разделенный экран: верх и низ
ffmpeg -i input.avi -filter_complex \
"[0:v]xbr=4[bg]; \
[0:v]scale=iw*4:-1:flags=neighbor,crop=iw:ih/2:0:oh[fg]; \
[bg][fg]vstack[v]" \
-map "[v]" -map 0:a -movflags +faststart output.mp4