LINUX.ORG.RU

Избранные сообщения dataman

генерация в консоли звуковой частоты в отдельном канале

Форум — Desktop

Для начала вот пара примеров, которые мне либо помогают в работе, либо помогают засыпать :)

Генерация частоты 3150Hz

ecasound -i tone,sine,3150 -o alsa

Генератор успокаивающего шума

play -q -n synth brown band -n 1200 200 tremolo 0.05 80

А теперь вопрос — как бы сделать тоже самое, но только в один канал? Левый или правый по выбору. Без выкручивания баланса звука в системе. Особо любопытным - для настройки аудио.

 ,

hikikomori
()

Помогите вспомнить фамилию писателя фантаста

Форум — Talks

Напомните мне у какого фантаста я такое вот читал?

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

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

Программирование осталось исключительно «прикладное», на абстрактно высоком уровне, но существует профессия «программный археолог», они разыскивают древние исходники, системные утилиты, пытаются реверсинженерить унаследованные пласты. Профессия считается «грязной» и криминальной, так как грань между «программным археологом» и «хакером» отсутствует.

«Хакер» в этом мире подобен магу, в том числе и тем что «системное» знание и понимание программной архитектуры у него отсутствует, да и взять его в упорядоченном виде неоткуда. Поэтому его приёмы мало отличаются от «заклинаний», и кто больше «заклинаний» знает — тот и круче. Собсно эти «заклинания» как раз и раскапываются «программными археологами». И особенную ценность имеют пропавшие сотни лет назад корабли и утерянные колонии, так как они могут содержать в своих носителях «изначальный» древний код и утилиты.

 , ,

Jameson
()

Посоветуйте англоязычные аналоги Хабра

Форум — Talks

В основном меня интересуют статьи по вебу.

Для себя выделил:

На этом всё

 ,

CryNet
()

Посоветуйте выразительной фортепианной музыки.

Форум — Talks

Типа размашистого аккомпанимента к романсу. Можно заковырестый джаз. Интересует ещё импровизация, типа Кейта Джаррета, когда он шоколадок обжирается.

kiverattes
()

Установка и настройка Debian 11 для десктопа с netinstall (незавершенная заметка)

Статьи — Desktop

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

( читать дальше... )

 , ,

Vsevolod-linuxoid
()

Debian ISO FastInstall — скрипт для ускорения установки Debian из ISO

Новости — Debian
Группа Debian

Стандартные ISO-образы Debian производят установку системы путём инсталляции всех необходимых пакетов через apt, вызывая fsync() на каждое действие с файлами (стандартное поведение apt/dpkg). Синхронизация состояния файлов значительно уменьшает скорость установки, особенно на медленных HDD.

Проблема с медленной установкой Debian не нова. Еще в 2014 году Petter Reinholdtsen представил eatmydata-udeb — скрипт, отключающий вызовы fsync() для установочного ПО. Однако его работа так и не была задействована по умолчанию в ISO-образах, а также не ускоряет небыстрый начальный этап установки базовых пакетов.

Debian ISO FastInstall ускоряет установку Debian из ISO путём корректной активации eatmydata на всех её этапах.
Скрипт добавляет недостающие файлы eatmydata, помещает скрипт-патчер и пересобирает классические и live ISO-файлы Debian, не изменяя содержимое deb-пакетов.

Пример установки Debian 10.6.0 amd64 из DVD-файла на виртуальной машине, на HDD, без кеширования записи.

  • Оригинальный файл: 1 час 44 минуты 20 секунд
  • Патченный файл: 10 минут 37 секунды

Совместимость скрипта проверена классических и live-файлах релизов Stretch, Buster и Bullseye, а также на образах non-free firmware.

>>> Подробности

 , , ,

ValdikSS
()

Какими патчами вы патчите linux ядро?

Форум — Desktop

Интересно было бы услышать, какие патчи накладывают люди на своё ядро. Если вы не патчите ядро - не нужно говорить об этом в топике

Рекомендуемый формат:

  1. gcc https://github.com/omkhar/kernel_gcc_patch
  2. uksm https://github.com/dolohow/uksm

 , ,

serg002
()

список легких сайтов

Форум — Talks

Есть планшет B1-a71 с 512 ram, mtk 8317t 2 core 1.2 ghz . Дайте,пожалуйста, список легких сайтов разной направленности. Выбрасывать не предлагать. Хорошо работает linux.org.ru

 ,

Enter
()

btrfs - мнимое «Не осталось свободного места»

Форум — Admin

Удачно монтирую btfs-раздел, но далее при попытке даже изменить права доступа на файл или каталог пишет:

На устройстве не осталось свободного места

Хотя при этом через df -h видно на этом разделе 7 ГБ свободно:

/dev/sda6           30G          22G  7,0G           76% /mnt/LEAP-15

Пробовал отмонтировать раздел и запустить

# btrfsck  /dev/sda6
Checking filesystem on /dev/sda6
UUID: 66be278b-9c9c-45ef-96a5-1a9eb375aa44
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
found 22335524864 bytes used err is 0
total csum bytes: 20340836
total tree bytes: 593608704
total fs tree bytes: 529547264
total extent tree bytes: 36536320
btree space waste bytes: 103750573
file data blocks allocated: 70457954304
 referenced 21395312640

Но после перемонтирования ситуация та же((

 ,

gigantischer
()

LLVM libc

Форум — Development

Кто-нибудь пробовал?

Для энтузиастов, если что:

$ cmake -G Ninja -B build_libc_release -S llvm-project/llvm -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_PROJECTS=libc

$ cd build_libc_release

$ ninja llvmlibc

Тесты:

$ ninja check-llvmlibc

 , , ,

dataman
()

Вышла первая версия Gnuastro

Новости — GNU's Not Unix
Группа GNU's Not Unix

Вышла версия 0.1 Gnuastro (The GNU Astronomy Utilities — астрономические утилиты GNU). Gnuastro представляет из себя официальный пакет GNU, содержащий различные утилиты для обработки астрономических данных. Распространяется на условиях лицензии GNU GPLv3. Все утилиты представляют из себя консольные приложения со схожим синтаксисом команд. На данный момент в состав Gnuastro входят следующие программы:

( читать дальше... )

>>> Сайт проекта и документация

 , gnuastro,

the_electric_hand
()

Новорегам

Форум — Linux-org-ru

Здравствуй дорогой юный или не очень друг или подруга.
Сегодня я расскажу вам историю о том как не получить подзатыльника на сайте linux.org.ru за свой возможно первый, а может быть и нет вопрос.

Давайте рассмотрим типичный пример.Вы (не вы) установили (пытались установить) тот или иной дистрибутив linux (не linux) на свой (или не свой) персональный(или не очень) компьютер.

Но вот беда! Вы столкнулись с проблемой и понятия не имеете как её решать. Интернеты или кто-то ещё привели вас на linux.org.ru.

Кое-как сумев зарегистрироваться с желанием как можно быстрее разобраться с вопросом вы особо не думая выбираете первый попавшийся раздел и задаёте там вопрос.

Вот тут мы остановимся, не надо писать куда попало, потратьте минутку и прочтите описание веток форума linux.org.ru/forum/. Но ошибка в выборе разделе это не страшно, модераторы могут перенести вопрос в нужный раздел, в случае когда видно что вы вообще не обращали внимания куда пишете, например вопрос по запуску игры в разделе Linux-install вместо Games вы можете «получить по шапке».

АХТУНГ, ВНИМАНИЕ!

-Если ваша проблема заключается в порче данных, утере данных,случайно удалённых данных, всем что связано с вашими личными файлами на вашем ПК, выключите его, сейчас же! И обратитесь на форум за советом что делать с другого устройства, например телефона.
-Любая ваша активность за ПК с вашим накопителем снижает вероятность восстановления данных. Даже перезагрузка этой страницы в браузере. 

И вот, настал момент. Переломный если можно так сказать, я бы даже сказал решающий. Вы задаёте свой вопрос. Сразу стоп. Правильно заданный вопрос часто уже содержит ответ, но все мы люди и все когда то осваивали что-то новое. Возможно для вас всё настолько новое что вы можете только выдать что-то подобное.

+Всем привет!, установил линукс, не работает интернет, как настроить?

В ответ можно будет прочитать очень многое, но мало что будет относится к вашей проблеме. Юмор, вопросы к вам о вас, саркастические словечки и прочие весёлые сообщения, половину смысла которых поймут только завсегдатые этого ресурса, например заявления про устаревший libastral, советы что-то сделать через libastral. Ваша реакция на происходящее, как и финал подобной ситуации уже известны. Сколько их было, а сколько ещё будет. Типичная реакция задающего подобный вопрос на подстрекательства отвечающих это:

- Вы можете просто мне помочь, а не умничать?
- Я не хочу в этом разбираться, просто скажите мне как сделать то что я хочу.
- Я ничего не понял распишите мне пошагово всё.
- Всё ясно вместо того чтобы просто помочь только балаболить можете.
- Типичное СНГ сообщество, токсики и дегенераты
- Не тратьте моё время я хочу решение, а не разбираться

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

А вот теперь давайте встанем на место активных участников форума на помощь которых вы рассчитываете.

  • 1 В мире множество дистрибутивов linux и у каждого из них свои особенности, если не указать его название в своём вопросе, то и говорить не о чем. Если у вас сомнения по поводу названия укажите ссылку откуда вы скачали дистрибутив если вы его ещё не смогли установить, в случае если дистрибутив установлен выполните команду uname -aв выводе этой команды будет содержаться необходимый минимум информации, пример:
dron@gnu:~$ uname -a
Linux gnu 5.19.0-1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.19.6-1 (2022-09-01) x86_64 GNU/Linux
dron@gnu:~$ 

Для уточнения можно ещё приложить вывод lsb_release -a

dron@gnu:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux bookworm/sid
Release:	testing
Codename:	bookworm
dron@gnu:~$ 
  • 2 Не указана версия дистрибутива, да, они имеют версии и например Ubuntu более 30 разных выпусков за её историю развития, конечно можно предположить что у вас одна из последних версий, но даже между двумя стабильными выпусками аж 5 разных дистрибутивов. Так что даже указав название дистрибутива нужно будет много гадать и перебирать варианты. Эта информация также содержится в выводе uname -a

  • 3 Вы не указали на то какие у вас характеристики ПК. Да вы можете столкнуться с ситуацией когда вам характеристики неизвестны, по причине ещё не работоспособного устройства или вам неизвестно как получить информацию о вашем железе на новой для вас операционной системе. В любом случае вы можете чаще всего назвать например модель ноутбука. Если же у вас ПК и вы не знаете какое железо внутри, но вы уверены что железо имеет отношение к вопросу, как минимум названия процессора, количество оперативной памяти, названия накопителей видны в BIOS.

В случае если вы находитесь в рабочем дистрибутиве вы можете получить информацию о

  • lscpu Центральном процессоре
  • lsmem Оперативной памяти
  • lsusb USB устройствах
  • lspci PCI устройствах
  • lsmod Загруженных модулях ядра для вашего оборудования
  • lsblk Размере и разметке ваших накопителей

Отвечающие могут попросить показать вывод других программ, в зависимости от ситуации. Чаще всего нужна лишь часть информации, подумайте логически что из этого указывать в своём вопросе, в случае если программа выводит очень много текста логично скопировать вывод на pastebin или подобный сервис например https://www.klgrth.io

В дополнение и я бы даже сказал как перекрытие пункта 3 есть вариант предложенный товарищем @krasnh, а именно один раз выгрузить достаточно большую обезличенную информацию о системе и ссылаться на неё в своём вопросе, это делает утилита hw-probe которая к сожалению не установлена по умолчанию. Если ваша проблема не связана с установками пакетов, поломанными зависимостями то вы можете установить утилиту hw-probe через специфичный вашему менеджер пакетов, скачать в виде самодостаточной программы формата Appimage по этой ссылке далее выполнить команду ниже и приложить к своему вопросу ссылку выданную терминалом

В случае AppImage

#скачиваете по вышеприведённой ссылке Appimage файл
#делаете файл исполняемым
dron@gnu:~/Загрузки$ chmod +x ./hw-probe*.AppImage
#запускаете
dron@gnu:~/Загрузки$ sudo -E ./hw-probe-*.AppImage --all -upload
[sudo] пароль для dron: 
Probe for hardware ... Ok
Reading logs ... Ok
Uploaded to DB, Thank you!

Probe URL: https://linux-hardware.org/?probe=ba05383ec5

Если установка утилиты произведена в систему через пакетный менеджер.

dron@gnu:~$ sudo -E hw-probe -all -upload

 Probe for hardware ... Ok
 Reading logs ... Ok
 Uploaded to DB, Thank you!
 Probe URL: https://linux-hardware.org/?probe=68dbf33470

Всё это конечно если вы умеете пользоваться вашим дистрибутивом хотя-бы на примитивном уровне.

  • 4 Вы не указали как вы пытались решить проблему, искали ли вы ответы в интернете, воспользовались ли поиском на этом сайте https://www.linux.org.ru/search.jsp , то есть прилагали ли вы хоть какие то самостоятельные усилия. Возможно вы что-то пытались делать, но умолчали он этом. Также очень вероятно что вы в процессе экспериментов что-то сломали сами, указывайте все ваши действия, даже если вам кажется они не относятся к вашему вопросу, в рамках разумного конечно. Если ваш вопрос касается написания кода или скрипта то приложите ваш код или отрывок из него, опять же чтобы показать что вам не просто лень, а действительно нужен совет, а так же чтобы отвечающий видел по коду где у вас ошибка, что вы делаете не так или/и что вы понимаете не так.

  • 5 Заголовок сообщения, там не надо КАПСИТЬ!!1, от этого вам быстрее не помогут, а лишь будут вас тролить и высмеивать и виноваты в этом будете исключительно вы. Напишите спокойно например «Ошибка при установке Ubuntu» или «cron не исполняет задачи». Просто краткая суть вашей проблемы и всё.

  • Не указана информация о вашей графической оболочке, графическом сервере и/или наборе ПО с оконным менеджером. Вероятно вы понятия не имеете что это всё такое. Тем не менее если ваш вопрос по поводу работы какого-то графического приложения то нужно указать в каком окружении оно работает.

Вы можете используя команды:

  • echo $XDG_SESSION_TYPE узнать Xorg у вас или Wayland

  • echo $XDG_CURRENT_DESKTOPузнать какое у вас рабочее окружение

  • echo $XDG_SESSION_DESKTOP узнать какой у вас менеджер сессий

  • Вы не указали версию программы с которой у вас проблемы или вопросы по использованию, программы постоянно развиваются, меняются и что-бы дать однозначный ответ или хотя бы попытаться это сделать нужно знать о версии программы, в графическом интерфейсе программы найдите в меню опцию «about»,«о программе» часто такое есть, если нет то можно узнать из терминала введя имя программы --help вы увидите ключи часто есть ключ --version и например узнать о версии нужно ввести имя_программы --version.

Например:

dron@gnu:~$ firefox --version
Mozilla Firefox 102.2.0esr
dron@gnu:~$ 

Если у вас изначально возникают трудности с выявлением версии программы, задайте дополнительный вопрос о том как её узнать у конкретной программы.

И это ещё не всё, ещё важный аспект это форматирование вывод программ,ваш код, логи которые попросили вас выложить, всё это нужно оформить, всё познаётся в сравнении, к примеру меня попросили выложить вывод lsblk

Вот как он выглядит без форматирования

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 1,4T 0 disk ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 1,4T 0 part /home sdb 8:16 0 74,5G 0 disk ├─sdb1 8:17 0 3,7G 0 part └─sdb2 8:18 0 70,8G 0 part / sdc 8:32 0 74,5G 0 disk └─sdc1 8:33 0 74,5G 0 part /mnt/STORAGE sdd 8:48 1 0B 0 disk sr0 11:0 1 1024M 0 rom

А вот как с форматированием

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  1,4T  0 disk 
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0  1,4T  0 part /home
sdb      8:16   0 74,5G  0 disk 
├─sdb1   8:17   0  3,7G  0 part 
└─sdb2   8:18   0 70,8G  0 part /
sdc      8:32   0 74,5G  0 disk 
└─sdc1   8:33   0 74,5G  0 part /mnt/STORAGE
sdd      8:48   1    0B  0 disk 
sr0     11:0    1 1024M  0 rom  

Думаю разница очевидна, читать не отформатированный код и следовательно помогать никто не будет. А навести красоту легко. Три апострофа «```» на букву ё при английской раскладке, перевод на новую строку, ваш текст, перевод на новую строку и ещё раз три апострофа «```» Всё!

Если всё ещё непонятно умоляю прочтите >>> Как правильно копировать вывод терминала <<< потому что пользователь @Vsevolod-linuxoid уже устал, он очень добрый был, но вы его почти сломали, пусть он останется добрым, пожалуйста, пожалейте его и нас, форматируйте сообщения!

Маленькая ремарочка, обращение на «Ты» это нормально, тебе тут не тыкают, а не не выкают. В большинстве своём общение тут неформальное, лишние эпитеты бывают лишними, а обращение на «Вы» может даже посчитаться грубостью. Так что начать общение с вопросом к всему форуму лучше на «вы», а если в обсуждении вам вдруг сказали «ты» это не значит что вас не уважают, чаще всего это значит что общение неформальное, по свойски и к вам предрасположены. Говорят тут прямо и в лицо. Почему я тут постоянно выкаю? Потому что лень писать сделал/ла, сумел/ла и подобное, обращение к образному новорегу, а не тебе как личности. Нормально не значит обязательно, как хочется так и обращайтесь к другим, но если на обращение «вы» ответ «ты» оскорбляться не стоит.

И напоследок, вам тут никто ничего не должен, внезапно, да да! :D

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


Простыня будет меняться/дополняться/урезаться по мере возможности, ошибки тоже есть. Почищу какнить.

 , , новенький, , новорег

LINUX-ORG-RU
()

Познание математики будучи тупарём

Форум — Talks

Хочется заняться математикой ради интереса, для общего развития. Какую литературу могут посоветовать лоровские специалисты по всему? Хочу вот прям сначала! Не сказал бы, что я полный ноль в математике, на полрубля знаю школьный курс, хотелось бы просто углубить знания. Могу только сказать, что есть проблемы в логике и математическом мышлении. В принципе, для общего развития хватило бы и той же википедии почитать, но это придётся всё изучать вразнобой, а мне надо, чтобы было поэтапно, для этого и ищу книгу.

Всевозможные видео- и аудиокурсы, лекции не предлагать. Воспринимаю информацию только в текстовом виде.

А при чём тут линукс? При том, что пост написан с телефона под управлением ОС Android, да и потенциальные отвечаюшие с некоторой вероятностью тоже используют линукс

 , , ,

puffy
()

«Статьи» — новый раздел сайта (бета)

Форум — Linux-org-ru

На сайте появился новый раздел – «Статьи». Раздел предназначен для размещения how-to, обзоров и т.п. Правила для этого раздела пока что не разработаны, в настоящий момент основным правилом разделая является соответствие тематике сайта и соблюдение общих правил форума.

Раздел являются премодерируемым. При размещении текстов нужно выбрать подходящий подраздел (группу). Состав разделов в проработке, пишите если чего-то не хватает.

Технически новый раздел находится в состоянии «бета» версии, пишите если где-то что-то не работает.

В планах добавлениие блока с последними статьями на главную страницу, добавление блока на страницу тега.

По картинкам сейчас можно загрузить только одну картинку (как в новостях), больше изображений будет позже.

 ,

maxcom
()

Доступен язык программирования Hare

Новости — Разработка
Группа Разработка

Впервые представлен широкой публике язык программирования Hare, который разрабатывает Дрю ДеВолт (автор Sway и SourceHut) со своей командой последние пару лет.
Hare — язык для системного программирования с минималистичным рантаймом, статической типизацией и ручным управлением памятью.

Исходный код компилятора предоставляется под лицензией GPLv3, а для стандартной библиотеки под лицензией MPL (Mozilla Public License). Компилятор Hare не основан на LLVM или GCC, а использует легковесный qbe. Программы на Hare не линкуются с libc по умолчанию.

( читать дальше... )

>>> Подробности

 , ,

dadd
()

wezterm — кроссплатформенный эмулятор терминала и мультиплексор с ускорением на GPU

Форум — Talks

Хочу познакомить вас с ещё одним кроссплатформенным эмулятором терминала и мультиплексором с ускорением на GPU – wezterm. Написан на Rust.

Возможности:

 , ,

dotcoder
()

Порекомендуйте шифрованные синхронизируемые заметки

Форум — Desktop

Мне нравится Orgzly (заметки в текстовых файлах orgmode, синхронизация через dropbox) и Syncthing (прямая синхронизация папок между устройствами).

Нужно добавить к этому набору шифрование и паролинг заметок того требующих. Это могут быть шифрованные файлы в синхронизируемой папке (какой формат? какой программой открывать?) или синхронизирумый блокнот с шифрованием.

Решение нужно для Linux и Android, не лишним будет и Windows.

 , ,

nightingale
()

Трудности перехода. Hex редактор

Форум — Desktop

Посоветуйте более-менее мощный hex-редактор для замены 010 Editor’a (Знаю, есть нативный, но цена как-то высоковата).

Нужно чтобы он

а) был графическим, qt|kde|gtk3

б) поиск/замена текста работала во всех открытых вкладках одновременно

в) имел встроенный скриптовый язык для обработки бинарных данных

На поддержку шаблонов данных и совместимость со скриптами 010 я уже даже не рассчитываю…

Все что я нашел - либо слишком примитивные, или консольные.

Может быть, существует какое-то расширение для vscodium которое так умеет?

 , ,

hargard
()

Простая программная генерация видео и картинок без стороннего API

Форум — Development

Покажу простой способ генерации видео программами на Python и C/C++ без использования стороннего API. Вам так же потребуется ffmpeg, без него вы не сможете конвертировать файлы в читаемые форматы!

Зачем это нужно?

Можно экспериментировать, например вы можете создать видео максимального качества и проверять как оно будет эффективно сжиматься тем или иным видео кодеком. Можете даже создать картинку с градиентом в 64-битном цвете и с дизерингом, мало ли какие ещё извращения можно придумать. Можно ещё делать видео с быстро движущимися объектами и сохранять его в 1000 кадров в секунду и потом тестировать всякие интерполяторы движения и моушн блюры.

Способ 1: на Python

С помощью скрипта на Python можно создать видео. Просто сохраните этот код в какой-нибудь «main.py»

import os
import sys

state = 0; # переменная нужная для анимации смещения узора
w = 320 # ширина кадра
h = 240 # высота кадра
fps = 25 # кадров в секунду
duration = 2 * fps # сколько длится видео (2 сек)
buffer = bytearray(w * h) # для хранения данных кадра
# генерация кадров
while state < duration:
  for y in range(0, h):
    for x in range(0, w):
      buffer[y * w + x] = ((x + state) ^ y) % 256 # генерация узора
  os.write(sys.stdout.fileno(), buffer) # кадр записывается в вывод консоли
  state += 1 # немного сдвинуть узор в следующем кадре

Далее исполняете команду в консоли:

python main.py | ffmpeg -y -f rawvideo -pixel_format gray -video_size 320x240 -framerate 25 -i pipe: out.mkv

В результате у вас получится двухсекундное видео с узором out.mkv. Посмотреть демо гифку

Как это работает?

В командную строку Linux можно выводить не только текст, но и бинарные данные файлов, а так же эти данные можно перенаправлять в другую программу, в данном случае это ffmpeg который принимает RAW кадры и конвертирует их в видео. И в коде и в команде вызова должны совпадать fps/framerate и video_size/w/h иначе всё разъедется. Нельзя просто взять и написать данные пикселей в консоль через print, нужно записывать их в stdout как в файл через os.write. Если в коде изменить duration на 1, то создастся только один кадр с узором и его можно сохранить как картинку так:

python main.py | ffmpeg -y -f rawvideo -pixel_format gray -video_size 320x240 -i pipe: out.png

Способ 2: на C/C++

Конечно Питон это медленно и я покажу как сделать это на C и C++, в этих языках стандартный поток вывода stdout тоже считается файлом и в него можно записывать бинарные данные.

C++

#ifdef WIN32 
  #include <fcntl.h>
#endif
#include <cstdio>
#include <iostream>
#include <cstdint>
#include <vector>

int main() {
  constexpr size_t fps = 25;
  constexpr size_t w = 320;
  constexpr size_t h = 240;
  constexpr size_t duration = fps * 5;
  constexpr size_t size = w * h;
  auto buffer = std::vector<uint8_t>(size);
  size_t state = 0;
#ifdef WIN32 
  setmode(fileno(stdout), O_BINARY);
#endif

  while (state < duration) {
    for (size_t y = 0; y < h; ++y)
    for (size_t x = 0; x < w; ++x)
      buffer[y * w + x] = (((x + state) ^ y) + state) % 256u;
    ++state;
    std::cout.write(reinterpret_cast<char*>(buffer.data()), size);
  }
}

Сборка и запуск:

g++ -Wall -O2 main.cpp -o prog
prog | ffmpeg -y -f rawvideo -pixel_format gray -video_size 320x240 -framerate 25 -i pipe: out.mkv

C

#include <stdio.h>
#include <stdint.h>
#include <fcntl.h>
#include <malloc.h>

typedef uint8_t byte;

int main() {
  const int fps = 25;
  const int w = 320;
  const int h = 240;
  const int duratuion = fps * 5;
  const int size = w * h * sizeof(byte);
  byte *buffer = (byte*)malloc(size);
  int state = 0;
  freopen(NULL, "wb", stdout);

  while (state < duratuion) {
    for (int y = 0; y < h; ++y)
    for (int x = 0; x < w; ++x)
      buffer[y * w + x] = (((x + state) ^ y) + state) % 256;

    fwrite(buffer, 1, size, stdout);

    ++state;
  }

  free(buffer);
}

Cборка и запуск:

gcc -Wall -O2 main.c -o prog
prog | ffmpeg -y -f rawvideo -pixel_format gray -video_size 320x240 -framerate 25 -i pipe: out.mkv

Как сохранить в FFmpeg видео в полном качестве

Я специально не указывал выходной видео кодек для упрощения команд, но вы можете добавить в ffmpeg опции -vcodec libx264rgb -crf 0 для сохранения видео в lossless качестве. Если вы модернизируете программу и добавите в неё поддержку RGBA цвета, то помните что h264 не умеет сохранять прозрачность в кадрах и вам лучше использовать кодек FFV1.

Что ещё можно сделать

  • Можно сгенерировать видео на любом языке программирования, если на нём можно переключить стандартный вывод в бинарный режим.
  • По такой же логике можно и перенастроить поток ввода stdin в бинарный режим и передать в программу бинарные данные из ffmpeg, таким образом можно будет смастерить видео-фильтр. В общем надо сделать что-то типа того: ffmpeg | фильтр | ffmpeg. Вообще можно просто написать Frei0r фильтр на Си и использовать его в ffmpeg, но мой способ просто не требует никакого стороннего API.
  • Поток можно перенаправлять и в файл и потом этот файл скармливать ffmpeg’у, но учтите что видео будет совсем без сжатия и несколько секунд видео 1280x720 будут весить гигабайты. Сделать это можно так:
prog > video.dat
fmpeg -y -f rawvideo -pixel_format gray -video_size 320x240 -framerate 25 -i video.dat out.mkv
  • Раз можно сгенерировать сырое видео, то можно и создать сырой PCM звук и конвертировать его в аудио форматы. Можно например генерировать мелодии и сохранять их в pcm_s16le поток. Опять же переключив stdin в pipe режим вы можете получать аудио поток извне, обрабатывать его своей программой и передавать далее, таким образом у вас получится аудио фильтр и не надо никакого VST/LADSPA API.

Заключение

Это очень простой способ создания видео (для программиста). Если что, в ffmpeg уже встроены некоторые генераторы тестовых видео. Сохраняются ли гигабайты сырых кадров в оперативной памяти при использовании такого способа передачи или же на диске - мне это неизвестно, возможно что у такого способа есть какие-то ограничения на размер передаваемых данных. Помните что в передаваемом потоке данных нет никаких меток синхронизации и если что-то где-то потеряется в пути, то видео всё станет кашей, так что не пытайтесь передавать такой поток через net cat (я не пробовал).

 , , , ,

HPW-dev
()

Программы - не стихи, их надо проектировать, а не писать.

Форум — Development

Этот пост как спроектировать.... заставил меня вспомнить о замечательном человеке и его статье. Есть такой дедушка, зав. кафедрой в ИТМО - Анатолий Шалыто. Очень толковый препод. И вот его статья «Программы –не стихи, их надо проектировать, а не писать» - http://is.ifmo.ru/main/article_ap.pdf .

Кроме критики сложившейся ситуации с производством ПО, Шалыто даёт ссылки на свои примеры проектирования и показывает почему так делать правильно. Ссылки прямо там в статье. Битых ссылок не встречал.

Вот самые интересные цитаты:

По мнению Шалыто, качество программ, в основном, обеспечивается не итоговым тестированием или верификацией, атем, что на ранних стадиях создания программы заказчик и разработчик однозначно и верно поняли друг друга и согласовали техническое задание.

Бардак с ПО творится почти во всем мире. Если аппаратура проектируется всегда, и только потом производится, то проектная документация на программы на практике выпускается крайнередко. Универсальный язык моделирования (UML), на который одно время у многих были большие надежды, используется далеко не всегда, причем даже в тех случаях, когда он применяется, диаграммы обычно строят одни люди –архитекторы, а другие –программисты в лучшем случае в них заглядывают.

Я считаю, что до того, как начинать программирование системы, необходимо разобраться с ее поведением, ипредлагаю не начинать сразу писать программу, а сначала нарисовать «картинки»–графы переходов, которые опишут поведение будущей программы в терминах состояний, переходов между ними и действий, выполняемых в состояниях и/илипереходах.

К чему это я? Мне хотелось бы узнать, много ли на ЛОРе среди разработчиков моих единомышленников - тех кто солидарен с мыслями изложенными в статье и тоже практикует проектирование ПО перед кодингом. А заодно интересно каким софтом вы пользуетесь для рисования схем, графов, алгоритмов. Может кто-то поделиться своими примерами проектов ПО.

PS, для модераторов. Линукс здесь при том, что:

Простота требует проектирования и хорошего вкуса.

Л. Торвальдс

 , , , ,

MittenShmitten
()