Редактирование / декодирование AVI-файлов с использованием установленных на системе проприетарных кодеков
Я искал это в течение нескольких дней, но, похоже, ничего не отвечает и не работает для меня, поэтому, пожалуйста, прости меня, если я задаю глупый вопрос или вопрос, на который, похоже, был дан ответ в другом месте.
У меня есть файл AVI, закодированный с использованием видеокодека GMP4, который в настоящее время установлен на моем компьютере, чтобы я мог воспроизвести файл, например, в Windows Media Player. Я пытаюсь открыть / декодировать файл для редактирования, чтобы можно было сшить два видеофайла вместе. Я не требую, чтобы он выводился в том же формате, а только открывался для редактирования, получал кадры и затем я мог выводить в более стандартный формат.
Проблема, которую я получаю, состоит в том, что не существует фильтра DirectShow, созданного для этого формата, поэтому он не будет открываться, используя его для меня (не работал слишком глубоко в нем, но все примеры не могут загрузить видеофайл). FFMPEG пытается прочитать файл, заявляет, что заголовок неверен, но все равно попытается его прочитать, а затем умирает, заявляя, что мне нужен кодек GMP4. Как я уже говорил ранее, у меня установлен конкретный кодек, но FFMPEG, похоже, не замечает и не имеет к нему доступа.
Что-нибудь, что позволит мне использовать установленные кодеки для декодирования видеокадров? Мне кажется странным, что Windows Media Player может что-то сделать, но я не могу программно повторить это. Я не ограничен C++ или C#, хотя C# определенно будет предпочтительным языком.
Спасибо всем, Алекс
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
У Nuno отличный ответ, но вы хотите избежать преобразования командной строки, вы можете использовать библиотеку AForge.Net C# для доступа к кодекам AfW, кодекам FFMpeg или даже кодекам DShow (некоторые видеорегистраторы CCTV кодируют в DShow).
Существует также способ открыть Windows Media Player как объект aC# и извлечь из него кадры. Напишите мне, если хотите больше информации - похоже, мы работаем над похожими проектами.