Как изменить размер видео, чтобы уменьшить его с помощью FFmpeg

103

Можно ли изменить размер моих видео, чтобы уменьшить их с помощью FFmpeg?

У меня есть оригинальное видео размером 1024x576, теперь я хочу изменить размер видео до 720x480, чтобы удовлетворить требования.

Как я могу это сделать?

Алан
источник
ffmpegможет быть устаревшим, см. здесь и здесь
сумасшедший о Natty
13
@nuttyaboutnatty «Устаревшие» сообщения, применяемые только к старым, мертвым, поддельным « ffmpeg» от вилки Libav, а не ffmpegот FFmpeg, который вернулся в 15.04.
Llogan

Ответы:

165

Самый простой пример:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

Использование в scaleфильтр обеспечит большую гибкость:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

-1Покажет FFmpeg автоматически выбрать правильную высоту по отношению к предоставленной ширине , чтобы сохранить пропорции. -1может также использоваться для ширины, если вы предоставляете заданную высоту.


Один недостаток при использовании шкалы libx264является то , что этот кодер требует даже значения и масштаба может автоматически выбирать нечетное значение , что приводит к ошибке: width or height not divisible by 2. Вы можете сказать шкале, чтобы выбрать четное значение для данной высоты (720 в этом примере):

scale="trunc(oh*a/2)*2:720"

... или заданной ширины (1280 в этом примере):

scale="1280:trunc(ow/a/2)*2"

Обратите внимание, что ваша сборка ffmpeg может жаловаться на то, что она не распознает -cили не -filterопций Это также может не поддерживать scale. В этом случае вы должны использовать более новую версию ffmpeg, которую вы можете скачать как статическую сборку, или собрать самостоятельно .

jimhark
источник
1
Я пытался ffmpeg -i output.mkv -filter:v scale=720:-1 -acodec copy -threads 12 output_shrink.mkv(в версии ffmpeg 0.8.6-6: 0.8.6-0ubuntu0.12.10.1), но получил ошибкуUnrecognized option 'filter:v'
doug65536
6
После того, как я несколько раз пролистал справочную страницу для ffmpeg, я обнаружил, что вместо -filter:vэтого опция, похоже, была изменена на -vf.
doug65536
2
@ doug65536 -filter:vи -vfоба в порядке. Версия Ubuntu, которую вы использовали, сломана и устарела - это на самом деле не FFmpeg ffmpeg, а бинарный файл, поставляемый Libav (FFmpeg fork) под тем же именем.
Slhck
1
@MightyPork, вероятно, ваша сборка ffmpeg устарела - какие проблемы случаются? В любом случае, это действительно помогло мне (с ffmpeg version 2.4.10) уменьшить размер некоторых массовых видео, чтобы освободить место - спасибо!
Уилф
4
«-c» - это сокращение от -codec, «: a» указывает аудиопоток, «copy» - кодек копирования, который копирует поток (в данном случае аудиосигнал) без перекодирования. В основном аудио потоки будут проходить через. Это распространено, когда вы только манипулируете видео потоком.
Jimhark
14

Я использую следующие команды для масштабирования видео и изображений. Для фиксированной ширины и высоты -

ffmpeg -i input.avi -vf scale="720:480" output.avi

и если вы хотите сохранить соотношение сторон, просто задайте высоту как -1, и он автоматически изменит размер в зависимости от ширины -

ffmpeg -i input.avi -vf scale="720:-1" output.avi

Если вы хотите масштабировать в зависимости от размера ввода, например, скажем, уменьшить ширину / высоту, наполовину вы можете сделать-

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

НОТА :

iw : input width
ih : input height

Статическая сборка может быть загружена с - https://johnvansickle.com/ffmpeg/

Документация: https://ffmpeg.org/ffmpeg.html#filter_005foption

Аникет Тхакур
источник
Не работает. Застрял в handler_name: Sound Handle
Руши М. Таккер
Я получил ужасное качество видео с этой командой. Намного лучше, если я создаю output.mp4, а не avi. Так что расширение имеет значение.
Секрет