Преобразование видео в фиксированный размер экрана путем обрезки и изменения размера

14

Я пытался понять это сам, но множество вариантов просто сбивает меня с толку.

Я хочу использовать в идеале либо ffmpegили mencoder(или что-то еще, но те два, которые я знаю, у меня есть работа), чтобы преобразовать любое входящее видео в фиксированный размер экрана.

Если видео шире или слишком короткое для него, обрежьте видео по центру. Если это не правильный размер, измените размер вверх или вниз, чтобы он соответствовал фиксированному размеру экрана.

Последнее, что мне нужно, это 720x480 в XVid AVI с аудиодорожкой MP3.

Я нашел много страниц, показывающих, как изменить размер до максимального разрешения, но мне нужно, чтобы видео имело именно такое разрешение (с обрезанными лишними частями, без черных полос).

Может кто-нибудь сказать мне командную строку для запуска - или, по крайней мере, получить мне / большую часть пути туда? Если это должно быть несколько командных строк (запустите X, чтобы получить разрешение, выполните этот расчет, а затем запустите Y с выводом этого вычисления), я могу написать это.

Энди Джеффрис
источник

Ответы:

22

Примерно так должно работать с соответствующими параметрами для каждого случая:

Примечание. Исходный ответ был опубликован по этой ссылке: Как обрезать видео с помощью ffmpeg? который первоначально размещен мной и отредактирован несколько раз, чтобы обновить его до новейших опций в самых последних версиях ffmpeg. Большое спасибо slhck , Джонатан. Антон Рудешко , LordNeckbeard и будущие сопровождающие.


В последних версиях FFmpeg используйте cropфильтр :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Где варианты следующие:

  • out_w ширина выходного прямоугольника
  • out_h высота выходного прямоугольника
  • xи yукажите верхний левый угол выходного прямоугольника

Исходное изображение

исходное изображение
Оригинальное изображение 320x240

Пример 1

80x60

Чтобы обрезать секцию 80 × 60, начиная с позиции (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4

Пример 2

нижняя правая четверть

Чтобы обрезать нижнюю правую четверть:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

Это так же, как:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Который так же, как:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Вы можете сослаться на размер входного изображения с помощью in_wи, in_hкак показано в этом первом примере. Ширина и высота вывода также могут быть использованы с out_wи out_h.

Пример 3

20 пикселей сверху и 20 снизу

Обрежьте 20 пикселей сверху и 20 снизу:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • Фильтр будет автоматически центрировать обрезку, если xи yопущены, как в этом примере.

Previewing

Вы можете взять урожай (хе-хе) и просмотреть его вживую ffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

Таким образом, вы можете экспериментировать и настраивать кадрирование без необходимости кодировать, просматривать, повторять.

Примечания

  • crop фильтрация документации

  • Кодировщик по умолчанию для MP4 - libx264(видео H.264) или mpeg4( видео MPEG-4 Part 2) в зависимости от вашей ffmpegсборки. См. FFmpeg Wiki: Руководство по кодированию видео H.264 для получения дополнительной информации.

  • Вместо обрезки и перекодирования рассмотрите обрезку при воспроизведении. Это возможно с любым игроком, который стоит использовать.

  • Древние ffmpegстроит б -croptop, -cropbottom, -cropleft, -croprightварианты вместо этого cropфильтра. Если это так, то приобретите современноеffmpeg . Развитие очень активно и нет оснований использовать антиквариат.

Geppettvs D'Constanzo
источник
Дополнительные точки для предварительного просмотра, с ffplayпомощью которых ffmpegможно обрезать размер экрана видео на практике.
SpeedCoder5