Как я могу обрезать видео с помощью ffmpeg?

У меня есть файл MP4 с записью экрана, который мне нужно обрезать. Как мне добиться этого, не используя дорогие инструменты, такие как Adobe Premier или Final Cut? Я предпочитаю ffmpeg, потому что я использовал его раньше.

Ответы (1)

Воспользуйтесь 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=160:120:160: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опущены, как в этом примере.

Предварительный просмотр

Вы можете взять кадр (хе-хе) и просмотреть его вживую с помощью 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, . Если это так для вас, то получите современный . Развитие идет очень активно и нет смысла использовать антиквариат.-croprightcropffmpeg

Теперь это работает с avconv.
У меня 1923х1080, хочу 1920х1080. Это похвала, которую я пробовал: /Users/kukodajanos/Workspace/ffmpeg -i /Users/kukodajanos/Desktop/video_640x480-2.mp4 -filter:v "crop=1920:1080:0:0" -c:a copy /Users/kukodajanos/Desktop/video_640x480-4.mp4но возвращается оригинальный фильм.
@Joce JFYI avconv является частью libav — ответвлением ffmpeg.
стоит упомянуть, что этот метод (с cropфильтром) перекодирует видео, см. stackoverflow.com/questions/33378548/… если перекодирование имеет значение для вас
отредактировано, чтобы заменить устаревшее -filter:vна более современное и более простое для ввода -vf. Ваше здоровье!
Я каким-то образом получаю автоматические весы. Я предполагаю, что это происходит из-за аспекта: / Например, когда я делаю «кроп = 80: 60: 200: 100», мое финальное видео получается 97x60. Я попытался добавить setsar=1:1 рядом с кадрированием, но затем кажется, что оно масштабируется перед кадрированием, поэтому окончательный размер составляет 80x60, но содержимое имеет неправильный формат.
Если вы пытаетесь удалить черные полосы вокруг вашего видео (piallarbox, letterbox, windowbox и т. д.), cropdetectсначала используйте параметры обрезки печати ffmpeg для вас:ffmpeg.exe -i vid.mp4 -vf cropdetect out.mp4
Для тех, кому интересно, -vfэто псевдоним для -filter:v.
Когда я использую это решение, мое выходное видео имеет гораздо более низкий битрейт. Есть идеи, почему?
Вы можете настроить выходной битрейт аудио / видео с соответствующими параметрами. Пожалуйста, обратитесь к этому ответу, чтобы увидеть процедуру: superuser.com/a/521684/83875 , в основном вы " use the -b:v and -b:a options, respectively. You can use abbreviations like K for kBit/s and M for MBit/s.". Кредиты @slhck.
Если ваше видео длинное, вы можете позволить ffmpeg сэмплировать отрывок с помощью Croppdetect, чтобы получить оптимальные значения перед кодированием. Вот пример, который получает значение кадрирования для 14-минутного отрывка, начиная с 33 с половиной минуты видео: ffmpeg -ss 00:33:30 -t 00:14:00 -i video.mp4 -vf cropdetect -f null - 2>&1 | awk '/crop/ { печать $NF }' | хвост -1
Этот кроп-фильтр отлично работает! Чтобы определить ограничивающую рамку, необходимую для обрезки видео, я экспортировал видеокадр в изображение с помощью ffmpeg. Затем откройте изображение с помощью GIMP, где я могу нарисовать ограничивающую рамку для области, которую я хотел обрезать, а затем я могу получить информацию о X, Y, W, H из окна указателя. Спросите, если это недостаточно ясно.
@GeppettvsD'Constanzo Вы можете начать новый вопрос, если какая-то конкретная часть вам не ясна.
можно ли сделать обрезку только для определенной продолжительности видео?
@Алекс, конечно. Вам просто нужно вставить соответствующие параметры в командную строку. Смотрите этот ответ для информации: askubuntu.com/a/59388/9598
В основном вы добавляете -ss 00:00:30, чтобы указать точку, с которой нужно начать монтаж, и указать -t 00:00:05продолжительность, которую вы можете пожелать.