Ввод видео на PC: преодоление 2 ГБ барьера


Те, кто работают с видео на PC, знают, что размер AVI-файла не может быть больше 2-х гигабайт, а некоторые программы не «понимают» файлы размером больше 1-го гигабайта. Надо с сожалением признаться, что два гигабайта, а я уже не говорю про один, это очень мало.

Если в половинном разрешении (384×288) с компрессией 4.5:1 в два гигабайта помещается около 28 минут, то с полным разрешением (768×576) только около 7 минут. Если вы хотите, например, ввести полчаса видео с S-VHS, то получится 5 файлов, которые потом надо будет состыковывать вручную.

Один из вариантов решения этой задачи — использовать видеоаппаратуру, которая имеет разъем для редактирования, но тут потребуется дополнительный кабель для связи PC c видеоаппаратурой и драйвер для управления видео аппаратом с PC.

Второй вариант — найти программу видео ввода, которая бы сама «нарезала» файлы по два гигабайта. Ну, действительно, чего уж проще! Однако такой программы я не нашел. Обсуждая эту тему с одним знакомым, я не всерьез сказал, раз такой программы нет, то может мне самому написать, а он, можно сказать, поймал меня на слове. В результате я ее действительно написал, и могу сказать, что жизнь стала проще.

Программа SmartCap 2.1b (0,5 МБ) автоматически создает файлы требуемой длины. Затем, если в видео редакторе расположить файлы последовательно, то получается сплошной поток без потери кадров на стыках. В продолжение рекламы своей программы сообщу, что размер и количество видео файлов изменяемое (максимум 50 файлов размером от 1 до 1998 мегабайт, но 50 файлов это не принципиальное ограничение, в принципе можно и больше). Процесс ввода автоматически завершается, если заполнено указанное количество файлов или закончилось свободное место на диске.

В процессе написания выше упомянутой программы мне пришлось изучить строение AVI-файлов и, как мне кажется, я понял причину «ухода» звука от изображения.

Видео часть вводиться строго по кадрам, в то время как звук искусственно «привязывается» к изображению кратно кадрам. И называется это interleave. Но звук нельзя разделить на кадры, это сплошной поток. И тут действуют следующим образом.

Рассмотрим исходные данные:

  • Плата видеоввода не имеет схемы оцифровки звука, и звук вводится отдельной звуковой картой.
  • Видео — 25 кадров в секунду или 40 миллисекунд на кадр.
  • Звук хотим иметь 44,1 КГц 16 бит стерео (хотя, это не имеет особого значения в нашей задаче).

Если мы хотим, чтобы порция звука записывалась в файл вместе с каждым кадром, то нужно определить размер буфера звука таким, чтобы в него помещалось 40 миллисекунд звука. Тогда в создаваемом AVI файле, звук и видео кадры будут чередоваться (interleave один к одному).

Итак, в нашем случае размер звукового буфера будет 7056 байт. Это означает, что звуковой поток будет поступать порциями по 7056 байт через определенные промежутки времени, но, вообще-то говоря, приход очередной порции звука не имеет никакой привязки к кадрам видеоизображения и вот почему.

Звуковая плата будет оцифровывать звук согласно своему задающему генератору, видеоплата вообще не имеет своего задающего генератора (при вводе видео), потому что она управляется внешним устройством, видеомагнитофоном или камерой, которые собственно и задают длительность кадров. В идеальном случае, когда звуковая карта записывает наши 7056 байт ровно за 40 миллисекунд, и видеомагнитофон сменяет кадры тоже ровно через 40 миллисекунд, у нас будет идеальная синхронизация звука и видео. Но если длительность записи кадра и звука различаются, ну скажем, на 0,1%, то через 17 минут звук уйдет от изображения на 1 секунду.

У меня плата MIRO DC30+, но для эксперимента я писал звук через обычную звуковую карту. В результате через 23 минуты уход звука был 3 секунды!

Как с этим бороться? Я думаю здесь бы помогла дополнительная обработка звука. При условии синхронного начала и остановки записи, абсолютная длина (в секундах) видео и аудио файлов будет одинаковая, хотя их собственное время будет разным. У меня получилось 1391.8 и 1394.9 секунд соответственно. Если, например, этот файл сразу закодировать в MPEG, то мы получим уход звука. Сначала нужно сжать аудио дорожку (именно сжать, а не укоротить), чтобы выровнять время аудио и видео.

Расскажу, что нужно проделать в Adobe Premier.

Нужно открыть файл в Премьере и экспортировать аудио часть в отдельный файл. Затем ее нужно сжать в каком-нибудь аудио редакторе (но я для этого специально написал программку). Сам Премьер тоже умеет сжимать (изменять скорость) у аудио или видео клипов, но не на такие малые величины. В этом случае он просто их укорачивает. После изменения длины аудио файла, его нужно подключить в проект и заменить им существующую аудио дорожку. Теперь в линейке монтажа аудио и видео части синхронизированы и можно спокойно редактировать клип. Дальнейшие действия зависят от желаемого конечного результата. Если видео клип будет перекодироваться в другой кодек или формат, то на этом можно остановиться. Если же планируется вывести клип обратно на видеомагнитофон, то мучения со звуком продолжаются.

После монтажа нужно опять экспортировать получившуюся звуковую часть в отдельный файл и опять пропорционально изменить ее длину, только теперь в обратную сторону. Затем опять заменить существующую аудио дорожку новым файлом. А вот теперь можно окончательно компилировать клип. И если воспроизводить готовый клип без остановок с начала до конца, то ухода звука не будет.

Надо заметить, что коэффициент сжатия/растяжения звука для введенного и выводимого файлов может быть разным. Дело в том, что при выводе используется третий временной генератор — генератор длительности кадра самой видеоплаты (при вводе длительность кадра определяется источником видео). В случае рассогласования звука при выводе надо будет экспериментально подобрать коэффициент изменения длины звука.

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

Вот собственно и все, что я хотел рассказать. Если у кого-то есть конкретные вопросы, пишите, я постараюсь ответить.




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.