Лево право

Лево право

Мне нужно масштабировать видео из одной игры 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 пикселей

С рамкой в ​​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

Связанный контент