tl; dr - 내 용도의 경우 최종 AVI에없는 프레임은 showstopper이고 AVI mux/demux 프로세스는 복잡하여 충분히 적은 수를 가정하는 것이 좋습니다. 프레임이 처음에 삭제 될 수 있습니다. 따라서 프레임 처리를 시작하기 전에 여러 특수 프레임을 처음 시작할 때 정착 할 것입니다 (픽셀로 인코딩 된 GUID/카운터 쌍으로 식별). 그런 다음 처리가 시작되는 프레임을 식별하기 위해 AVI를 작성한 후 이러한 특수 프레임을 찾을 수 있습니다.
내가 본 모든 것은 내가 원래 요구 한 것이 실제로는 가능하지 않다는 것을 믿게한다. 파일 크기에 따라 기술적으로 비디오 프레임이 AVI 파일에 기록되지만, 대부분의 경우 엔 그럴 수도 있습니다.
즉, virtualdub 및 VLC, 심지어 DirectShow AVI 스플리터와 같은 avi 플레이어는 오디오가 시작되기 전에 존재하는 모든 비디오 프레임을 무시/삭제합니다. 그래서 전 오디오 프레임을 추출하기 위해 다른 라이브러리로 AVI 파일을 파싱해야한다고 생각합니다.
내가 신경 쓰는 이유는 AVI 파일의 각 프레임에 대한 항목이있는 병렬 데이터 구조를 작성하고 어떤 데이터가 어떤 프레임과 연결되어야 하는지를 알아야하기 때문입니다. 프레임이 AVI에서 삭제 된 경우 프레임과 데이터를 일치시킬 수 없습니다.
비디오/오디오 캡처 필터 다음에 사용자 정의 변환 필터를 만드는 데 성공했습니다. 이러한 필터는 타임 스탬프를보고 오디오 시작 시간이 설정되고 그 시간 이후에 비디오 프레임이 나타날 때까지 비디오 프레임을 드롭합니다. 그런 다음 필터 다운 스트림은 처리중인 비디오 프레임에 의존 할 수 있음을 알고 있습니다. 단점은 오디오 필터가 실제로 약간 지연된 샘플을 제공한다는 것입니다. 따라서 오디오가 100ms에서 시작될 때 250ms의 비디오 프레임을 처리 할 때까지는 알지 못합니다. 즉 250ms의 비디오 데이터를 삭제했습니다. 나는 비디오 프레임이 오디오를 동반 할 때를 안다. 오디오가 시작된 후 비디오가 1 비디오 샘플 기간보다 길게 시작될 때 다른 AVI 도구와 다르게 동작하게되므로 AVIMux/스플리터를 제어하려는 자신감이 약화되기 시작합니다.
AVIMux와 AVI 스플리터가 정확하게 제어 할 가치가 없도록 충분히 복잡하다는 것을 받아 들일 것입니다.
아이디어를 제공해 주셔서 감사합니다. 불행히도 이것은 내가 보는 것과 일치하지 않습니다. 기존의 avi 파일을 비디오/오디오 스트림으로 분할 한 다음 간단한 타임 스탬프와 오디오를 약 100ms 앞으로 이동시키는 간단한 그래프를 만들었습니다. 그런 다음 AVI 멀티플렉서를 통해 다시 결합되어 쓰여집니다. 결과는 더 작고 6 프레임 짧아 진 AVI 파일입니다. 나는이 과정을 반복하고 매회 6 프레임을 연속적으로 다듬을 수있다. 모든 비디오 프레임에는 긍정적 인 타임 스탬프가 있습니다. 부정적인 타임 스탬프가 또한 드롭으로 이어질 수 있다는 것을 알지 못했기 때문에이를 염두에 둘 예정입니다. – aggieNick02
더 많은 실험을 수행 한 후에 비트를 추가하고 명확하게하려면 오디오를 앞으로 이동하면 원래 크기와 동일한 크기의 AVI 파일이 생성되지만 DirectShow, virtualdub 등의 결과 AVI 파일을 보면 첫 번째 오디오가 재생되기 전의 모든 프레임 프레임을 건너 뜁니다. 결과 파일을 간단한 avi 스플리터와 avi mux를 통해 실행하면 파일 크기가 실제로 감소합니다. – aggieNick02
부정적인 타임 스탬프에 대한 진술을 확인했습니다. 전체 비디오 샘플의 시간이 음수이면 실제로 삭제됩니다. 어떤 부분이 양수이면 유지됩니다. 제가 작업하고있는 directshow 소스는 실제로 시간이지나면서 처음 프레임을 완전히 부식시키는 경우가 있습니다. 그래서 이것은 다른 두통을 알고 저에게 저장하는 것이 좋습니다. – aggieNick02