Я рекомендую. — Виртуальная веб-камера и микрофон.
Многим знаком софт для Windows, позволяющий накладывать в реальном времени эффекты на изображение с веб камеры, воспроизводить видео "как-бы" с нее и делать другие непотребности. Под Linux так же есть подобные решения - та же WebCam Studio, имеющая в своем арсенале множество нужных и ненужных функций.
Внимание! Под катом много мутного текста без картинок! :-)
В принципе, в видеоролике по ссылке все достаточно хорошо и красиво расписано, поэтому я хотел бы остановится на другом уровне - а именно ручная настройка веб-камеры, транслирующей видеофайл. Можно бы было повозится и с эффектами, но мне неизвестен ни один видеоредактор, позволяющий выполнять онлайн-обработку поступающего через stdin видео и выводить его на stdout. Сразу предупрежу - это _не_ законченное решение - в частности есть проблемы с синхронизацией видео и звука (обсуждение возможных решений проблемы приветствуется в комментариях ;))- это скорее обхор технической части :) Так что лучше не пытать метод копипаста - для этого как нельзя лучше подойдет вышеупомянутая WebCam Studio.
Что нам понадобится:
1) виртуальная веб-камера - тут есть два варианта - avld и vloopback. vloopback мне заставить работать не удалось, зато скомпилировался он без проблем. avld же потребовал патчей, но зато заработал практически сразу, поэтому ориентироваться я буду на него.
2) виртуальный микрофон - поставляется в составе alsa
Исходные данные - Debian Sid и ядро 2.6.31-zen3.
Итак, во-первых настроим микрофон т.к. это значительно проще. По странному стечению обстоятельств драйвер aloop не включают в ядро вместе с остальной алсой (по крайней мере я не нашел опции, включающей его). Поэтому придется ставить алсу из исходников. В Debian и основанных на нем дистрибутивах это не должно доставить много хлопот (тем более если компилятор и сопутствующие утилиты уже установлены). Для ускорения и упрощения процесса поставим module assistant, после чего даем такую команду:
После этого он сам скачает сорцы, скомпилирует их и установит - останется лишь перезагрузиться. После чего можно подгрузить драйвер нашего виртуального микрофона (можно прописать его в файл /etc/modules - будет загружаться сам):
Теперь надо написать конфиг с его участием (на самом деле этого можно не делать если не собираетесь использовать флеш - по идее все должно подхватиться и так). Т.к. у алсы невероятная забывчивость и, прочитав конфиг из /etc/asound.conf, она забывает про устройства микширования dmix (необходимые чтобы несколько программ могли безболезненно выводить звук одновременно), то придется писать полный конфиг.
Обратите внимание, что директива capture.pcm "loopin" в секции pcm.!default заставит все программы по умолчанию брать звук с виртуального микрофона! Но к сожалению для флеша других вариантов нет - он видит только один микрофон - default.
Теперь можно опробовать наш микрофон - для этого запустим mplayer, указа в качестве устройства вывод звука loop
Чтобы услышать, что играет сейчас, сделаем запись с микрофона:
Если все сделано правильно - услышите звук, отчасти похожий на оригинальный :-) Чтобы услышать звук в более хорошем качестве, запускаем с параметрами:
и услышим звук в CD-качестве. В принципе наш микрофон готов к труду и обороне :-)
С веб камерой придется чуть повозиться. Дело в том, что официальная версия не собирается на новых ядрах. Уже пропатченую версию для ядра 2.6.31 можно скачать тут (патчи для новых ядер можно поискать на убунтуфоруме). Распаковываем и компилируем с помощью команды make и ставим - make install. Теперь можно загрузить наш модуль - modprobe avld. Он принимает параметры width, height и fps - ширина, высота и частота кадров соответственно. Увеличивать значения по умолчанию не рекомендую - даже при низких параметрах по умолчанию вместе с флешем сильно загружается процессор.
Итак, как воспользоваться виртуальной камерой? На самом деле это не так просто - сделать cat /myvideo.avi > /dev/video0 не получится :) Поэтому я написал небольшой скрипт, принимающий в качестве параметра имя видеофайла и выводящий видеопоток на устройство /dev/video0, а звук - на alsa-устройство loop. При этом должен быть установлен mplayer и один из кодеров - mencoder или ffmpeg. Однако использованный в скрипте подход не дает возможности хоть как-то синхронизировать звук и видео - т.к. ни для ffmpeg, ни для mencoder я не нашел возможность задать устройство вывода звука отдельно от видео (рад буду услышать предложения по этому поводу в комментариях).
Отмечу, что проигрыванием файлов дело не ограничивается - можно, например, пустить трансляцию рабочего стола или пучтить трансляцию с реальной камеры с наложением эффектов (если найдется утилита, обрабатывающая видео realtime) ну и т.д.
После всего этого во всяких чатрулетах, трансляциях майл-ру и прочих флешесодержащих местах надо выбрать вебкамеру Dummy и микрофон Linux default (других и не будет) и пускать вместо изображения суровой реальности то, что в голову взбредет :-)
PS. За поломанные ядра, упавшие линуксы, и разбитые мониторы я ответственности не несу :-)
Внимание! Под катом много мутного текста без картинок! :-)
В принципе, в видеоролике по ссылке все достаточно хорошо и красиво расписано, поэтому я хотел бы остановится на другом уровне - а именно ручная настройка веб-камеры, транслирующей видеофайл. Можно бы было повозится и с эффектами, но мне неизвестен ни один видеоредактор, позволяющий выполнять онлайн-обработку поступающего через stdin видео и выводить его на stdout. Сразу предупрежу - это _не_ законченное решение - в частности есть проблемы с синхронизацией видео и звука (обсуждение возможных решений проблемы приветствуется в комментариях ;))- это скорее обхор технической части :) Так что лучше не пытать метод копипаста - для этого как нельзя лучше подойдет вышеупомянутая WebCam Studio.
Что нам понадобится:
1) виртуальная веб-камера - тут есть два варианта - avld и vloopback. vloopback мне заставить работать не удалось, зато скомпилировался он без проблем. avld же потребовал патчей, но зато заработал практически сразу, поэтому ориентироваться я буду на него.
2) виртуальный микрофон - поставляется в составе alsa
Исходные данные - Debian Sid и ядро 2.6.31-zen3.
Итак, во-первых настроим микрофон т.к. это значительно проще. По странному стечению обстоятельств драйвер aloop не включают в ядро вместе с остальной алсой (по крайней мере я не нашел опции, включающей его). Поэтому придется ставить алсу из исходников. В Debian и основанных на нем дистрибутивах это не должно доставить много хлопот (тем более если компилятор и сопутствующие утилиты уже установлены). Для ускорения и упрощения процесса поставим module assistant, после чего даем такую команду:
m-a a-i alsa-source
После этого он сам скачает сорцы, скомпилирует их и установит - останется лишь перезагрузиться. После чего можно подгрузить драйвер нашего виртуального микрофона (можно прописать его в файл /etc/modules - будет загружаться сам):
modprobe snd-aloop
Теперь надо написать конфиг с его участием (на самом деле этого можно не делать если не собираетесь использовать флеш - по идее все должно подхватиться и так). Т.к. у алсы невероятная забывчивость и, прочитав конфиг из /etc/asound.conf, она забывает про устройства микширования dmix (необходимые чтобы несколько программ могли безболезненно выводить звук одновременно), то придется писать полный конфиг.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|
Обратите внимание, что директива capture.pcm "loopin" в секции pcm.!default заставит все программы по умолчанию брать звук с виртуального микрофона! Но к сожалению для флеша других вариантов нет - он видит только один микрофон - default.
Теперь можно опробовать наш микрофон - для этого запустим mplayer, указа в качестве устройства вывод звука loop
mplayer begin.mp3 -ao alsa:device=loop
Чтобы услышать, что играет сейчас, сделаем запись с микрофона:
arecord -Dloop |aplay
Если все сделано правильно - услышите звук, отчасти похожий на оригинальный :-) Чтобы услышать звук в более хорошем качестве, запускаем с параметрами:
arecord -Dloop -fcd |aplay
и услышим звук в CD-качестве. В принципе наш микрофон готов к труду и обороне :-)
С веб камерой придется чуть повозиться. Дело в том, что официальная версия не собирается на новых ядрах. Уже пропатченую версию для ядра 2.6.31 можно скачать тут (патчи для новых ядер можно поискать на убунтуфоруме). Распаковываем и компилируем с помощью команды make и ставим - make install. Теперь можно загрузить наш модуль - modprobe avld. Он принимает параметры width, height и fps - ширина, высота и частота кадров соответственно. Увеличивать значения по умолчанию не рекомендую - даже при низких параметрах по умолчанию вместе с флешем сильно загружается процессор.
Итак, как воспользоваться виртуальной камерой? На самом деле это не так просто - сделать cat /myvideo.avi > /dev/video0 не получится :) Поэтому я написал небольшой скрипт, принимающий в качестве параметра имя видеофайла и выводящий видеопоток на устройство /dev/video0, а звук - на alsa-устройство loop. При этом должен быть установлен mplayer и один из кодеров - mencoder или ffmpeg. Однако использованный в скрипте подход не дает возможности хоть как-то синхронизировать звук и видео - т.к. ни для ffmpeg, ни для mencoder я не нашел возможность задать устройство вывода звука отдельно от видео (рад буду услышать предложения по этому поводу в комментариях).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/bin/sh |
Отмечу, что проигрыванием файлов дело не ограничивается - можно, например, пустить трансляцию рабочего стола или пучтить трансляцию с реальной камеры с наложением эффектов (если найдется утилита, обрабатывающая видео realtime) ну и т.д.
После всего этого во всяких чатрулетах, трансляциях майл-ру и прочих флешесодержащих местах надо выбрать вебкамеру Dummy и микрофон Linux default (других и не будет) и пускать вместо изображения суровой реальности то, что в голову взбредет :-)
PS. За поломанные ядра, упавшие линуксы, и разбитые мониторы я ответственности не несу :-)