Всем привет. Долго копал с помощью аи, получилось в итоге вот что. Протестировано на роликах из gag2, работает.
Запускать -
python conv.py intro.avi
сохраняет файлы в подкаталог out как intro.video.m4v, intro.audio.ogg. Далее муксит их с помощью ffmpeg без перекодирования со вставкой таймфреймов.
https://pastebin.com/WV8WCCke
Привет. Была идея небольшую утилиту написать, чтобы сразу в .OGM контейнер перегонять .DV файлы минуя всякие ffmpeg и прочие утилиты, но там возни много, так что руки так и не дошли доделать. Спасибо, за программу, думаем, людям пригодится. Описание формата .DV, если нужно, ниже. В файле сначала идёт заголовок dvf_head, затем frames2 элементов dvf_item и потом уже сами данные.
#pragma pack(push, 1)
typedef struct {
uint32_t magic; /* "DV!!" */
uint32_t zero1;
uint32_t frames1; /* unused */
uint32_t unknown; /* ??? */
uint32_t width; /* video width */
uint32_t height; /* video height */
uint32_t zero2;
uint32_t frames2;
uint32_t channels; /* 0 - no sound; 2 - stereo */
uint32_t asize1st; /* audio data size preroll */
uint32_t zero3[9];
} dvf_head; /* sizeof(dvf_head) == 0x4C */
typedef struct {
uint32_t fsize; /* same as vsize+asize but with highest bit set (0x80000000) if key-frame */
uint32_t vsize; /* video frame size (always valid) */
uint32_t zero1;
uint32_t asize; /* audio data size (maybe incorrect!) */
uint32_t zero2;
} dvf_item;
#pragma pack(pop)