[linux] разбить поток и выполнить операцию с частями

a10063

короче, идет у меня аудиопоток по пайпу, например, от arecord
задача состоит в разбиении потока на части (определенной длины или по времени, как-нибудь хотя бы) и выполнить операцию над кусками (покодить, например)
как сделать? что-то не приходит на ум...
чтоб было ясней, будет использоваться для записи радио, распихивая, например, каждый час в отдельный файл...
важно, чтобы не было потери битов потока

dgaf

| split -b 1024k - stream

a10063

эта штука отлично разбивает файлы, но с частями в режиме "онлайн" ничего не сделаешь - она сразу фигачит в файлы
хотелось бы так : (сразу кодировать файлы по мере поступления)
 arecord | queuestream -b 1024 "./lame-wrap.sh"
lamewrap.sh: lame - `date +%H`.mp3

придется, видимо, писать самому на каком-нить С...

ppplva

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

a10063

Получающиеся файлы можно на лету хватать и перекодировать.
а как это сделать?
я себе это даже концептуально не представляю...

ppplva

Вот, например, простая функция на питоне.
Еще проще в цикле натравливать обрабатывающую программу на ls | head -1
Ну и удалять потом, конечно.

a10063

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

rosali

Не понял в чем трудность...

[xenon andrei]$ echo sdfgdgkadhfsadkfghfjfhsadlkfjhsdfa | (fori=0;i<10;i++; do echo -n $i:; head -c 3; echo; done)
0:sdf
1:gdg
2:kad
3:hfs
4:adk
5:fgh
6:fjf
7:hsa
8:dlk
9:fjh

a10063

кажется, оно! спасибо!
трудность была в том, что я не понимал, что head оставляет оставшуюся часть потока
Оставить комментарий
Имя или ник:
Комментарий: