Редактирование/декодирование файлов AVI с использованием установленных в системе проприетарных кодеков

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

У меня есть файл AVI, закодированный с использованием видеокодека GMP4, который в настоящее время установлен на моем компьютере, поэтому я могу, например, ПРОИГРАТЬ файл в проигрывателе Windows Media. То, что я пытаюсь сделать, это открыть/декодировать файл для редактирования, чтобы иметь возможность сшить два видеофайла вместе. Я не требую его вывода в том же формате, а только открываю для редактирования, получаю кадры и потом могу выводить в более стандартный формат.

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

Есть ли что-нибудь, что позволит мне использовать кодеки, установленные в системе, для декодирования видеокадров? Мне кажется странным, что Windows Media Player что-то умеет, а программно повторить не могу. Я не ограничен C++ или C#, хотя C# определенно был бы предпочтительным языком.

Спасибо Всем, Алекс


person Alex Gamezo    schedule 13.05.2012    source источник


Ответы (2)


Я провел весь день с той же проблемой. Решение состоит в том, чтобы установить AVISynth, а затем вы можете загрузить с помощью ffmpeg любой файл AVI, для которого в системе есть кодек VfW. Вместо того, чтобы передавать ffmpeg ваш входной файл AVI, создайте файл .avs с одной строкой, содержащей AviSource("your-avi-filename") и передачу ffmpeg имени файла .avs.

Предположим, вы хотите преобразовать файл input.avi в проприетарном видеокодеке в формат h263 (предположим, что ваш файл input.avi имеет поддерживаемый размер кадра h263):

echo AviSource("input.avi") > input.avs
ffmpeg -i inputs.avs -vcodec h263 output.avi
person Nuno    schedule 14.05.2012

У Nuno есть отличный ответ, но вы хотите избежать конвертации командной строки, вы можете использовать библиотеку C# AForge.Net для доступа к кодекам AfW, кодекам FFMpeg или даже кодекам DShow (некоторые цифровые видеорегистраторы CCTV кодируют в DShow).

Существует также способ открыть проигрыватель Windows Media как объект c# и получить из него кадры. Напишите мне, если вам нужна дополнительная информация — похоже, мы работаем над похожими проектами.

person Sugrue    schedule 21.05.2012
comment
хм. Правда, преобразование командной строки - это не то, что мне нужно, но я планирую просто интегрироваться с dll FFMpeg, чтобы использовать ее для выполнения того же самого. У меня еще не было возможности сделать это, но должно быть довольно просто с DLL, в которую скомпилирована поддержка AVISource. В этот момент я смогу создать динамический поток (при необходимости) или просто AVISource для перейти к FFMpeg, чтобы открыть. Таков план в любом случае. Командная строка отлично сработала для моего видеонаблюдения, так что, надеюсь, это тоже должно сработать. Однако я буду иметь в виду ваши предложения и обновлю их, как только добьюсь успеха! - person Alex Gamezo; 22.05.2012