Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: ffmpeg в качестве захвата видео с экрана  (Прочитано 10529 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Здравствуйте. Вначале о системе: Ubuntu 13.04, ffmpeg установлен сегодня через apt-get.
Итак - есть желание писать видео с экрана и звук с "монитора". Использую следующую комбинацию:
ffmpeg -f alsa -i default -ar 44100 -acodec mp2 -ab 128k -ac 2 -f x11grab -r 25 -s 854x480 -i :0.0+500,200 -vcodec mpeg2video -sameq temp.avi
К сожалению выдаёт ошибку (последняя строка):
[alsa @ 0x904b20] capture with some ALSA plugins, especially dsnoop, may hang.
[alsa @ 0x904b20] Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'default':
  Duration: N/A, start: 1397310432.432669, bitrate: N/A
    Stream #0.0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
[x11grab @ 0x905340] device: :0.0+500,200 -> display: :0.0 x: 500 y: 200 width: 854 height: 480
[x11grab @ 0x905340] shared memory extension  found
Option sample_rate not found.
Однако по отдельности (видео или аудио) пишет прекрасно. Информацию искал, возможно что-то пропустил, или не понял. Расскажите - чего он от меня хочет! :)
Также уже из ряда фантазии: можно ли средствами ffmpeg захватывать сразу 2 аудио-потока: один с "монитора", второй - с микрофона?

Спасибо!

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #1 : 12 Апреля 2014, 20:08:37 »
Tenzor,
Видеозахват средствами ffmpeg - Дополнительные примеры по смещениям, для захвата части экрана:

Оффлайн zotkindm

  • Старожил
  • *
  • Сообщений: 2452
  • (K)Ub 14.04
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #2 : 12 Апреля 2014, 20:28:45 »
А VLC чем не устраивает?

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #3 : 12 Апреля 2014, 20:30:47 »
zotkindm,
В каком формате захватывает и сохраняет VLC?

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #4 : 12 Апреля 2014, 22:27:25 »
Спасибо за ответы.
archiver, ссылку посмотрел, но так и не понял, что делать! Ещё раз: когда я записываю звук или записываю видео - всё проходит нормально. Но когда свожу всё в одну команду - выдаёт ошибку. Захват делаю такими командами:
ffmpeg -f alsa -i default -ar 44100 -acodec mp2 -ab 128k -ac 2 temp.avi
ffmpeg -f x11grab -r 25 -s 854x480 -i :0.0+500,200 -vcodec mpeg2video -sameq temp.avi
Откуда он берёт опцию sample_rate я не понимаю.
Если по ссылке эта информация описана - перечитаю завтра, так как за день голова уже не варит.

zotkindm, по двум причинам: во-первых ffmpeg наверно чуть гибче (из того, что я знаю) и более "нативным", что ли. Во-вторых - просто хочу разобраться, а первым мне на глаза попался именно ffmpeg. Помимо этих двух инструментов уже посмотрел описания XVIDCap, RecordMyDesktop, SimpleScreenRedorder, mencoder (если не ошибаюсь).


Оффлайн sergey109

  • Активист
  • *
  • Сообщений: 619
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #5 : 12 Апреля 2014, 23:11:16 »
Цитировать
ffmpeg -f alsa  -ac 2 -i pulse -f x11grab -r 25 -s 854x480 -i :0.0+500,200 -acodec mp2 -ab 128k -ac 2 -ar 44100 -vcodec mpeg2video temp.avi
(Нажмите, чтобы показать/скрыть)
SysV и dmix.

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #6 : 13 Апреля 2014, 14:04:45 »
Tenzor,
Ну вопервых сделайте то что сказал Сергей, ибо без предварительной настройки аудиоподсистемы -  аудио может вообще не работать. И опцию кодека сместите так как показано у Сергея...
Во вторых захват должен вестись желательно в лосслесс формате, ибо кодирование на лету нагружает систему, память и может привести к глюкам записи...
В третьих опции кодирования желательно располагать в конце, не обязательно но желательно ибо некоторые энкодеры могут глючить если их команды расположены некорректно, в несовсем надлежащем месте строки... Всё это есть по ссылке, просто достаточно посидеть минут 20-30, повникать и разобраться, особо сложного там ничего нет - это же не заморочанные bash скипты :)
Ваша строка:
ffmpeg -f alsa -i default -ar 44100 -acodec mp2 -ab 128k -ac 2 -f x11grab -r 25 -s 854x480 -i :0.0+500,200 -vcodec mpeg2video -sameq temp.aviРекомендуемая строка:
-f alsa -i pulse -f x11grab -s 1920x1080 -r 25 -i :0.0 -vcodec qtrle -f mov -acodec pcm_s16le /home/user/video.mov Здесь нужно отталкиваться от размера экрана монитора - ибо например я не понял принципа задачи вашего смещения, - чо вы хотели этим достичь???
В четвёртых - я вообще сомневаюсь, что у вас работает эта опция < -i :0.0+500,200 > без корректной задачи смещения, или - она всё же работает но криво... Смещения должны вычитаться из установленной размерности кадра < -s >, которая должна быть равна размеру экрана монитора, ибо целенаправленное уменьшение размеров кадра в опции < -s > даст вам плохое качество (искажённое) записываемого сигнала...
В пятых вы выбрали неудачный энкодер для захвата экрана, - обратитесь к рекомендуемой строке с видеоэнкодером qtrle и аудиоэнкодером WAV PCM-16Bit-Little Endian - pcm_s16le, ибо захват с использованием аудиокодека MPEG-1 layer II не совсем корректен, ибо это кодек для кодирования в DVD и MPEG-II и с ним могут возникнуть проблемы если он используется не надлежащим образом. Захватывать звук лучше в PCM, ибо сжать его можно опосля в файле, вместе с видео или не трогая видео...
Если вы всё же хотите несколько сжатый вариант, то по ссылке которую я вам дал - есть достойный и проверенный для этого пример:
ffmpeg -y -f alsa -i pulse -f x11grab -s 1920x1080 -r 25 -i :0.0 -vcodec mpeg4 -qscale 0 -f avi -acodec pcm_s16le /home/user/video.avi
ffmpeg -f alsa -i default -ar 44100 -acodec mp2 -ab 128k -ac 2 temp.aviОткуда он берёт опцию sample_rate я не понимаю.
Видимо из задачи аудио рейта 44100 ... зачем вам вообще ужна эта опция? энкодер по умолчанию сам выбирает аудиорейт необходимый для данного типа кодирования...
« Последнее редактирование: 13 Апреля 2014, 15:22:17 от archiver »

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #7 : 13 Апреля 2014, 15:45:32 »
Огромное спасибо - заработало!
Действительно, нужна была перестановка порядка параметров. Выбранный мною порядок был продиктован удобством дальнейших манипуляций и с кодеками, и с параметрами захвата.
Pavucontrol у меня уже был установлен, но всё равно спасибо.

Теперь по другим пунктам.
Захват без сжатия не хочу применять по той причине, что винчестер просто не успевает сохранять информацию. Но тут скорее я где-то накосячил при установки системы, так как периодически наблюдается жуткая нагруженность винчестера, особенно при сворачивании или разворачивании окон. Как вариант - проприетарные дрова на видяху. В то же время сжатие не вызывало особо больших проблем с качеством видео.
По размерам экрана: захватываю игру в оконном режиме с полезным размером 854х480 точек. В связи с тем, что средствами ffmpeg невозможно увидеть захватываемую область, я "нарисовал" обои, где линиями отрисовал необходимое положение окна. В результате в точке 200:500 у меня начинается область захвата.
По поводу энкодера - тут я ничего не выбирал: при просмотре примеров в инете это был второй кодек после "отсутствия кодека" (несжатый поток). Благодарен за информацию, теперь попробую и сравню mpeg4.
sergey109, archiver, спасибо вам огромное!

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #8 : 13 Апреля 2014, 17:05:15 »
В связи с тем, что средствами ffmpeg невозможно увидеть захватываемую область, я "нарисовал" обои, где линиями отрисовал необходимое положение окна. В результате в точке 200:500 у меня начинается область захвата.
Ну где вы таких сплетен только набираетесь? :)
-show_region 1 - что бы видеть захватываемую область...
Я же в начале беседы сказал Вам - читайте ВСЮ главу для захвата, а вы нверняка, только примеры рассматриваете :)
« Последнее редактирование: 16 Апреля 2014, 12:18:32 от archiver »

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #9 : 13 Апреля 2014, 18:33:07 »
Честно говоря - я по указанной ссылке вчера просто пробежался глазами. Действительно был напряжённый день и к ночи мозг уже не работал. До этого я дейтсвительно в основном смотрел примеры, на опцию -region не обратил внимания или её не было в тех примерах, которые я смотрел. Потому я нарисовал область, потом не вышло захватить видео и аудио, ну и тогда уже мне было не до этой прекрасной опции!
А так, да - верное замечание: мы очень часто не читаем мануалы и пропускаем важную информацию мимо.

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #10 : 16 Апреля 2014, 12:21:33 »
Tenzor,
Да ничего страшного... Честно говоря об этой опции я сам узнал недели две-три назад... Просто знайте, что данная вам статья ffmpeg переодически обновляется и то, что в ней не было например месяц назад, может внезапно появиться вчера или сегодня ;)...
Именно по этому её рекомендовано читать и перечитывать...

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #11 : 17 Апреля 2014, 20:37:56 »
Кстати - в "моей" версии ffmpeg данной опции ещё нет. Обновлять пока не решил - в принципе, мне она сейчас не особо нужна. Другое дело - если найдутся новые возможности. Собственно - создался и вопрос: можно ли писать в один файл сразу несколько аудио потоков с аудио-каналов? Опять жек таки - я сейчас просто экспериментирую в свободное время, потому мог просто пропустить нужную информацию. Но предположил, что должна быть такая команда:
ffmpeg -y -f alsa -ac 1 -i hw:2,0 -f alsa -ac 2 -i hw:0,0 -f x11grab -r 25 -s 854x480 -i :0.0+50 -acodec mp2 -ab 128k -ac 2 -ar 44100 -vcodec mpeg2video -sameq -map 0:0 -map 1:0 -map 2:0 temp.avi, где: hw:2,0 - микрофон с USB-камеры, а hw:0,0 - стерео-выход. Получаю сообщение о несоответствии каналов:Number of stream maps must match number of output streamsВ общем - разбираюсь. Как первая идея - надо применять другой контейнер...
Ещё раз спасибо!

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #12 : 17 Апреля 2014, 21:06:10 »
можно ли писать в один файл сразу несколько аудио потоков с аудио-каналов?
Думаю что можно, если поддерживает железо, ПО и драйвера... В ffmpeg надо поиграться с настройками карт (map) каналов и перенаправить в один файл. Я сам с эти ещё не эксперементировал. Но общая информация по этому поводу есть в той же статье, - глава работа с аудио для видео...

Только опять таки - делать таке процедуры на лету, во время захвата - это лишняя нагрузка на железо и ОС, может приводить к глюкам на не очень мощных тачках...
« Последнее редактирование: 17 Апреля 2014, 21:11:17 от archiver »

Оффлайн Tenzor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #13 : 17 Апреля 2014, 21:35:04 »
Либо тут: мультиплексация-демультиплексация средствами ffmpeg. Там много идёт о -map, но мне надо перечитать. По поводу нагрузки - не думаю: если аудио не сжимать, а для видео применять минимальное сжатию - думаю потянет и не очень мощный компьютер, тем более, если не требовать от игры больших ФПС. Согласны?

Оффлайн arch!ver

  • Старожил
  • *
  • Сообщений: 1260
    • Просмотр профиля
Re: ffmpeg в качестве захвата видео с экрана
« Ответ #14 : 17 Апреля 2014, 23:10:00 »
Tenzor,
С тем что адиопотоки жрут значительно меньше памяти и прочих ресурсов, чем видео - согласен однозначно :)...
ФПС - 25 кадров предпочтительно, не более... При 15 ФПС - движения не выразительны,... можно сблендить (бленд) потом конечно, но выглядеть
 будет не ахти...

Мультиплексация ориентирована на карты потоков аудио и видео внутри файла, а если вы хотите работать с разными каналами аудио, то здесь уже актуальны другие карты - карты распределения каналов аудио внутри аудиотрека... В купе эти опции носят один и тот же термин - "карты", но суть у них весьма различна...
« Последнее редактирование: 17 Апреля 2014, 23:26:09 от archiver »

 

Страница сгенерирована за 0.034 секунд. Запросов: 25.