Редактиране/декодиране на AVI файлове с помощта на системно инсталирани патентовани кодеци

Търся това от няколко дни, но изглежда нищо не отговаря или работи за мен, така че моля да ме извините, ако задавам глупав въпрос или такъв, на който изглежда е отговорено другаде.

Имам AVI файл, кодиран с помощта на видеокодек GMP4, инсталиран в момента на компютъра ми, така че мога да ПУСКАМ файла в Windows Media Player например. Това, което се опитвам да направя, е да отворя/декодирам файла за целите на редактирането, за да мога да свържа два видео файла заедно. Не изисквам да се извежда в същия формат, а по-скоро само да се отвори за редактиране, да се получат кадрите и след това мога да изведа в по-стандартен формат.

Проблемът, който получавам, е, че няма филтър 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("името на вашия-avi-файл") и предавайки на 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 има страхотен отговор, но искате да избегнете конвертирането на командния ред, можете да използвате библиотеката AForge.Net c# за достъп до кодеци AfW, кодеци FFMpeg или дори кодеци DShow (някои DVR за видеонаблюдение кодират в DShow).

Има и начин да отворите Windows Media Player като c# обект и да вземете кадри от него. Изпратете ми имейл, ако искате повече информация - изглежда, че работим по подобни проекти.

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