Перекодируйте файл AVI, чтобы он соответствовал заданному размеру выходного файла.

У меня есть файл AVI, который я хочу перекодировать, чтобы он поместился на компакт-диске размером 650 МБ. Как я могу закодировать так, чтобы размер файла не превышал заданный размер? Какую программу я могу использовать?


person pindiwala    schedule 24.11.2008    source источник
comment
извините, я, возможно, был немного поспешным, предполагая, что он хотел пиратский фильм. Как повторно открыть вопрос?   -  person Martin Beckett    schedule 25.11.2008
comment
Вы просто нажимаете Открыть... прямо там, где вы нажали Закрыть.   -  person EBGreen    schedule 25.11.2008


Ответы (4)


AutoGK может сделать это очень эффективно. В первую очередь предназначен для резервного копирования DVD ****cough****, но также может принимать AVI в качестве источника. Это скорее набор программ с открытым исходным кодом с согласованным графическим интерфейсом, поэтому не беспокойтесь, если установщик установит несколько элементов.

person spender    schedule 24.11.2008

Я предполагаю, что вы хотите сделать это программно:

Для Windows:

Вы можете использовать directshow для перекодирования вашего видео, построив граф фильтров.

Получите (если у вас еще нет) SDK платформы для Windows. Затем перейдите сюда, чтобы ознакомиться с некоторыми примерами directshow, которые строят графы фильтров для транскодирования.

Для сборки вам понадобятся базовые классы. Вы можете построить их здесь:

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses

Тогда посмотрите примеры здесь:

C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow

Вы также можете вручную создать графы фильтров, чтобы понять, как они используются, и понять, как эти вещи имеют смысл (например, перечисление кодировщиков, о которых вы узнаете в примерах):

C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\graphedt.exe

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

Разные энкодеры работают по-разному:

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

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

Для Linux (а также Windows):

Вы можете использовать ffmpeg, который является универсальным средством для перекодирования и других операций в видео. Вы даже можете найти готовый exe-файл приложения командной строки, хотя на главной странице он не размещен (только исходный код). Это приложение использует видеобиблиотеки с открытым исходным кодом для перекодирования видео, а также для многих других задач. Если вы можете найти хороший надежный исполняемый файл, вам, вероятно, следует проверить это, если вы хотите что-то, что легко использовать для вашего приложения. Проверьте их домашнюю страницу здесь.

Надеюсь, это поможет вам начать.

person Klathzazt    schedule 24.11.2008

Чтобы он соответствовал определенному размеру, вы должны использовать соответствующую скорость передачи данных.

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

target bit-rate = size / seconds

Например:

seconds = (90mins * 60) = 5400
size = ((650MB * 1024) * 8) = 5324800
target bit-rate = ~986 kilobytes per second

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

person dbr    schedule 24.11.2008

Подсчитайте количество секунд, в течение которых находится AVI. Затем возьмите размер файла и разделите на длину. Преобразуйте в килобиты в секунду и используйте это как медиану битрейта. (Используйте Google, чтобы легко выполнить математику и преобразование.)

Вы можете взвесить битрейт видео и аудио по своему желанию. Обычно 96 кбит/с достаточно для AAC, но вам может понадобиться больше или меньше. Эксперимент.

person strager    schedule 24.11.2008