Я пытался понять это сам, но множество вариантов просто сбивает меня с толку.
Я хочу использовать в идеале либо ffmpeg
или mencoder
(или что-то еще, но те два, которые я знаю, у меня есть работа), чтобы преобразовать любое входящее видео в фиксированный размер экрана.
Если видео шире или слишком короткое для него, обрежьте видео по центру. Если это не правильный размер, измените размер вверх или вниз, чтобы он соответствовал фиксированному размеру экрана.
Последнее, что мне нужно, это 720x480 в XVid AVI с аудиодорожкой MP3.
Я нашел много страниц, показывающих, как изменить размер до максимального разрешения, но мне нужно, чтобы видео имело именно такое разрешение (с обрезанными лишними частями, без черных полос).
Может кто-нибудь сказать мне командную строку для запуска - или, по крайней мере, получить мне / большую часть пути туда? Если это должно быть несколько командных строк (запустите X, чтобы получить разрешение, выполните этот расчет, а затем запустите Y с выводом этого вычисления), я могу написать это.
источник
Ответы:
Я не гуру ffmpeg, но это должно сработать.
Прежде всего, вы можете получить размер входного видео следующим образом:
С относительно свежим ffmpeg вы можете изменить размер вашего видео с помощью следующих опций:
Вы можете установить ширину или высоту
-1
, чтобы разрешитьffmpeg
изменение размера видео с сохранением соотношения сторон. На самом деле,-2
это лучший выбор, так как вычисленное значение должно быть четным. Таким образом, вы можете напечатать:Как только вы получите видео, оно может оказаться больше ожидаемого,
720x480
поскольку вы позволяетеffmpeg
вычислить высоту, поэтому вам придется его обрезать. Это можно сделать так:Наконец, вы можете написать такой скрипт (его легко оптимизировать, но я сделал его простым для разборчивости):
источник
echo "scale=3; ${in_width}/${out_width}*1000"| bc | awk '{printf "%d", $0}'
h_rate =echo "scale=3; ${in_height}/${out_height}*1000"| bc | awk '{printf "%d", $0}'
# Давайте возьмем более короткую сторону, чтобы видео было по меньшей мере таким же большим, # как желаемый размер, и обрежем более длинную сторону: crop_side = 'n' if [$ {w_rate} -gt $ {h_rate}]; then scale = "- 2: $ {out_height}" crop_side = 'w' else scale = "$ {out_width}: - 2" crop_side = 'h' fi `Замените «input.file» на имя вашего входного файла.
источник
-c:a copy scaled_result.mp4
Если вы хотите обрезать и масштабировать за один раз, вы можете создать цепочку фильтров обрезки и масштабирования следующим образом:
Приведенное выше сначала обрезает видео до портрета 16: 9, затем масштабируется до 400 пикселей в высоту x соответствующую (четное число) ширину.
источник
Я новичок в ffmpeg, но теперь у меня есть небольшой конвертер в VB.NET, который создает необработанные фильмы различных форматов вывода для использования на небольших устройствах, которые имеют доступ к SD-карте, но не имеют достаточной мощности для декодирования сложного видео.
Из-за того, как он работает при изменении размера и обрезки, мне пришлось кодировать его вручную и создавать параметры. В основном мне нужно знать результирующие ширину и высоту.
У меня есть 2 флажка для вариантов: -
Сохранить соотношение сторон (X) Заполните все пиксели (X)
В качестве входных данных необходимы только 4 переменные (1) Ширина исходного видео, (2) Высота исходного видео, (3) Ширина устройства, (4) Высота устройства.
Хотя для VB.NET достаточно легко адаптироваться под любой язык.
источник