Ответ 1
Вы не можете выполнять фильтрацию без потери качества при кодировании в формате с потерями, но у вас есть некоторые параметры.
Обрезка с помощью проигрывателя
Возможное решение - обрезать во время воспроизведения, поэтому вам даже не нужно перекодировать.
С ffplay
и фильтр обрезки:
ffplay -vf "crop=480:270:200:100" input.mp4
С vlc
(или cvlc
):
vlc input.mp4 --crop=480x270+200+100
Или вы можете обрезать с помощью графического интерфейса VLC: Инструменты > Эффекты и фильтры > Видеоэффекты > Обрезка.
Используйте формат без потерь
ffmpeg
может кодировать несколько кодов без потерь: ffv1, huffyuv, ffvhuff, utvideo, libx264 (используя -crf 0
или -qp 0
). Выход будет без потерь, но выходной файл будет огромным.
ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v ffv1 -c:a copy output.mkv
или
ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v libx264 -crf 0 -c:a copy output.mp4
Принять некоторые потери качества
Дайте ему достаточно бит, и вы не сможете сказать, что есть разница в качестве:
ffmpeg -i input -vf "crop=480:270:200:100" -c:v libx264 -crf 17 -c:a copy ouput.mp4
Подробнее см. FFmpeg Wiki: Руководство по кодированию видео H.264.
Если ваш вход MJPEG
Поток копировать отдельные изображения с помощью ffmpeg
, обрезать их без потерь с помощью jpegtran
, а затем перечислить их с помощью ffmpeg
. Это не приведет к потере, но вы будете ограничены древним форматом MJPEG.