Ru-Board.club
← Вернуться в раздел «Программы»

» AviSynth

Автор: Alex_Dragon
Дата сообщения: 25.06.2008 04:19
Ze Bolacha, ну и задал ты головоломку. Хотя арифметика тут и простейшая, пока разложл все кадры — чуть мозгами не двинулся.
Поковырялся с видео со своего фотоаппарата, он тоже прогрессив 30 fps выдаёт.
В принципе всё просто.
Суть в чём: 25 из 30 мы можем получить выкинув каждый шестой кадр. Но это могут быть заметные рывки, надо как-то потери «размазать» по последовательности кадров.
Первая мысль — сблендить либо соседние кадры, либо последовательности кадров. В принципе, как я теперь понял, именно это и делает встроенная функция ConvertFPS.
Но мы можем пойти и другим путём, более телевизионным.
Для этого нужно разбить видео на поля и работать с ними, выкидывая не кадр, а два поля, после чего обратно собрать в целые кадры. Например, мы чётное поле четвёртого кадра таким образом смешиваем в нечётным полем пятого кадра, а чётное поле пятого кадра с нечётным шестого, при этом выкидывая из них собственные поля, нечётное четвёртого и чётное шестого. В результате мы получим сдвиг влево на кадр и будем иметь последовательность из трёх нормальных кадров и двух чересстрочных. После чего необходимо применить функцию FieldDeinterlace плагина Decomb. Это фактически стандартный для Avisynt'а плагин удаления чересстрочности, довольно подробно описанный в документации, в том числе и в русском варианте. По умолчанию он делает блендинг полей, то есть мы получим два смешанных прогрессивных кадра — чего и добиваемся.
Поскольку видео у нас прогрессивное, то полукадры в кадре у нас будут практически идентичными, а значит мы можем не особо морочить себя геморроем с соблюдением чётности, а просто отбрасывать ближайшие ненужные поля.
Выглядеть это будет примерно так:



AviSource ("XYZ.AVI")
Separatefields() # бьём на поля
SelectEvery(12, 0,1,2,3,4,5,6, 8,9, 11) #пропускаем 7 и 10 поле
Weave() # складываем кадры обратно
FieldDeinterlace(full=false) # параметр full задаёт обработку только тех кадров, которые Decomb сочтёт чересстрочными, не обрабатывая остальные; находит интерлейсы он хорошо, а в нашем случае они будут достаточно ярко выражены.
В общем-то, тут всё равно, откуда начинать выкидывать, с таким же успехом можно убрать 1 и 4, 3 и 6 или 5 и 8 поля.




Но в принципе это можно cделать и по-другому, сблендить только два смежных кадра, выкинув у каждого по полю:




AviSource ("XYZ.AVI")
Separatefields()
SelectEvery(12, 0,1,2,3,4,5,6,7,8, 11) #пропущены поля 9, 10
Weave()
FieldDeinterlace(full=false)



В результате мы имеем четыре неповреждённых кадра — что лучше, чем только три — и один смешанный. Мне так показалось, что этот вариант выглядит приятнее.
Вообще же рывки врядли получится задавить полностью. Фотоаппарат не лучшая видокамера, особенно если без стабилизации — руки дрожат, в кадре всё время динамика какая-то, особенно если съёмка на ходу, с резкими панорамами, ещё и АРУ без конца прыгает. Тут как не выпендривайся, при конвертации частоты кадров часть информации пропадает, так что все дрожания будут сильнее выражены и неравномерней.
Автор: Nick 2003
Дата сообщения: 31.12.2008 09:32
AviSynth 2.5.8 Final
[more=Changes]
Цитата:

• Additions:
* Added Czech doc translation.
* Added Polish doc translation by Slim, Krismen & Co.
* Added Japanese doc translation by niiyan.
* Added Installer standalone unpack option.
* Added Blankclip audio channels= and sample_type= arguments.
* ConvertAudio(cii) available to plugins via env->Invoke().
* Added font aspect, rotation and alpha to text routines.
* Added /* xxx */ block comments.
* Added [* [* xxx *] *] nestable block comments.
* SetMemoryMax(0) now just returns Memory Max value.
* Added planar YV12 color format to Compare().
* ColorKeyMask: Allow independant tolerance levels for each channel.
* Added Tweak Hue/Saturation range limiting.
* Added AudioLevels and Color2 modes to Histogram.
* Added WAVE_FORMAT_EXTENSIBLE audio output.
* Added ShowTime() script verb, like ShowSMPTE() but with milliseconds.
* Added BlackmanResize() and Spline64Resize().
* Modified DeleteFrame()/DuplicateFrame() to process multiple arguments.
* Added Min()/Max() script functions.

• Bugfixes:
* Fixed Compare() graph pixel values exceeding YUV limits.
* Fixed AddBorders() args negative value clamping.
* Added workaround for HuffYUV, Xvid reading past end of input buffer.
* Fixed current_frame value in nested runtime script invocations (Gavino).
* Fixed Dissolve overlap arg range checking (gzarkadas).
* Fixed OpenDMLSource() multithreading race problem (QuaddiMM).
* Fixed unsaved variableName string in ConditionalReader.
* Fixed Parser FunctionTable::TypeMatch() missing compulsory arguments. Dissolve bug (Various).
* Fixed DirectShowSource() Flush task interlock race.
* Fixed DirectShowSource() QueryId() use CoTaskMemAlloc for returned value (Dean Pavlekovic).
* Fixed DirectShowSource() use GraphBuilder object for media control (Avery Lee).
* Fixed DirectShowSource() remove PulseEvent calls (Avery Lee).
* Fixed DirectShowSource() QueryAccept() modifying VideoInfo in running script (Haali).
* Fixed Blankclip clip= argument parsing.
* Fixed trashed GPF report, i.e reading 0x0 at 0x0 exception reporting.
* Fixed and refactored Overlay RGB<->YUV conversion routines.
* Fixed ImageReader incompletely inited videoInfo.
* Fixed Layer RGB32 100% alpha implementation, use level=257 (new default).
* Fixed avisynth_c.h avs_is_parity_known().
* Fixed C++ ConvertAudio::Saturate_int32() rounding.
* Fixed WriteFile(), Now remembers absolute path to file.
* Fixed Info() frame pitch, reports pitch of input frame.
* Fixed Invert() right edge memory overrun/corruption.
* Fixed Histogram() Classic mode pixel values exceeding YUV limits.
* Fixed Histogram() chroma plane initialization to 128.
* Fixed Conditional reader/writer illegally saving pointer to IScriptEnvironment.
* Fixed YV12 Blur()/Sharpen() right edge pixel corruption with non-writable input frames.
* Fixed MMX Blur()/Sharpen() code to full 8 bit precision.
* Fixed IsAudioFloat()/IsAudioInt() script functions.
* Fixed Cache memory oversubscription of SetMemoryMax() limit.

• Optimizations:
* DirectShowSource() convertfps=true add 0.5ms rounding to expected sample - time. Improves performance with millisecond based DS spliters.
* DirectShowSource() FPS detection as last attempt try getting the duration of 1st frame.
* DirectShowSource() convertfps=true rely only on sample start time values.
* Cache: Trap returned NULL PVideoFrames, i.e. Don't crash, Winge about it!.
* Refactor horizontal planar resizer, no width restrictions or 2 byte overwrite.
* Provide a simple and fast text writing primatives, see info.h
* Make audio cache actually functional.
* Tweak speed improvements.
* Subtract speed improvements.
* Tuneup Overlay() ISSE Convert444ChromaToYV12 and also provide MMX version.
* PokeCache interface implemented.
* Cache and Memory management enhancements.

• Changes:
* Initial Default Memory Max value clamped to 512MB.
* Initial Default Memory Max value still quarter of Free memory. Minimum 16Mb. As per 2.5.7.
* Test VFB data buffer for NULL malloc's, if so then Throw!
* Installer Start menu shortcut names translated.
* Test for UTF-8 and Unicode BOM prefixes and issue a useful warning.
* Removed useless current_sample from runtime script environment.
* Added critical section to CAVIFileSynth class.
* Enable Installer multi language support.
* FunctionTable::Lookup() now considers named arguments in making its selection.
* ImageWriter supports negative values as -count for End argument.
* ChangeFPS() use floor instead of round in source frame number calculation.
* Update usage of correct (updated) Rec.709 coefficients.
* Add TCPDeliver.map and DirectShowSource.map to releases.
* Convert to 2.6 Dynamic Assembled rgb to yuy2 code.
* Avisynth_c.h boolean functions return 1 for true instead of arbitrary non-zero.
* Internal RGB2YUV() now copies Alpha top byte through.
* CoUninitialize() done immediately for S_FALSE CoInitialize() returns.
* Pfc, Softwire and SoundTouch updated and added as dependency projects.
* UPX updated to version 2.03 (2006-11-07).
* AVISource/WavSource map WAVEFORMATEXTENSIBLE back to equivalent WAVEFORMATEX.
* DirectShowSource() now recognises incorrect WAVE_FORMAT_EXTENSIBLE audio and accepts it.
* DirectShowSource() now attempts to use partial graph from failing RenderFile call.
* DirectShowSource() now detects and handles non 32 bit aligned picture lines from dud codecs.
* Crop(align=true) tests actual alignment in each GetFrame call.
* Relax YV12 resizer width restriction, now mod 2 was mod 4.
* .AVSI failures during env->CreateScriptEnvironment() are now available to the GetError() interface.
* SetCacheHints(CACHE_RANGE, n) will now surrender frames to satisfy SetMemoryMax().
* CoInitialize()/CoUninitialize() now done as part of ScriptEnvironment creation/deletion.
* Much code from 2.6 base included. Typically IsYV12() changed to IsPlanar().

• Known problems and issues
* Rightclick on scripts to open them in VDubMod: When the script is messed up in the script editor, the correct error message does not appear.
* Other bugs
[/more]
http://ovh.dl.sourceforge.net/sourceforge/avisynth2/Avisynth_258.exe
Автор: V0lt
Дата сообщения: 12.02.2009 10:06
Тут программисты есть?
Как узнать FPS у avs-файла?
Автор: obla4ko4240019
Дата сообщения: 12.02.2009 12:37
V0lt

Цитата:
Тут программисты есть?

не офтопь. Программистов ищи в другой ветке.

Цитата:
Как узнать FPS у avs-файла?

он либо такой же как у входного файла, либо тот, что ты указал в скрипте.
Автор: V0lt
Дата сообщения: 12.02.2009 18:08
obla4ko4240019

Цитата:
не офтопь. Программистов ищи в другой ветке.

злые вы, не понимаете ничего

...
нашел
можно открыть через avifil32.dll
примеры для avi работают и для avs
Автор: Samotek
Дата сообщения: 06.03.2009 22:03
Спецы! Есть такой файл
Общее
Полное имя : file.mkv
Формат : Matroska
Программа-кодировщик : mkvmerge v2.0.2 ('You're My Flame') built on Feb 21 2007 23:40:55
Библиотека кодирования : libebml v0.7.7 + libmatroska v0.8.1

Видео
Формат : AVC
Формат/Информация : Advanced Video Codec
Профайл формата : High@L5.1
Настройка CABAC формата : Да
Настройка ReFrames формата : 11 кадры
Режим смешивания : Container profile=Unknown@5.1
Идентификатор кодека : V_MPEG4/ISO/AVC
Битрейт : 3 629 Кбит/сек
Номинальный битрейт : 3 800 Кбит/сек
Ширина : 1 280 пикс.
Высота : 720 пикс.
Соотношение кадра : 16/9
Частота кадров : 29,970 кадр/сек
Разрешение : 24 бит
Колориметрия : 4:2:0
Тип развёртки : Прогрессивная
Бит/(Пиксели*Кадры) : 0.138

Если, не важно чем, перевожу в DVD, получается такое:

Там линия подачи (на ней особенно видно) все время мерцает. Я ничего в этом не понимаю, подскажите что это за эффект такой, как называется, и какой фильтр надо использовать и с какими параметрами для его устранения?
Автор: maestro777
Дата сообщения: 17.04.2009 16:45
Подскажите как задействовать DXVA совместно с AviSynth?
Есть такой плеер Media Player Classic Homecnema, в нем реализована поддержка аппаратного дкодирования видео (DXVA). Если через него открывать видео-файлы, то загрузка процессора понижается процентов на 20.

Появилась идея использовать этот фильтр в AviSynth для чтения видео-файлов.
Но как его там задействовать - ума не приложу. Есть только AviSource, в новой версии можо еще fourCC код задать, и всё! А как аппаратное декодирование прикрутить ?
Автор: apexfmm
Дата сообщения: 18.04.2009 03:40
maestro777

Цитата:
в нем реализована поддержка аппаратного дкодирования видео

А что, для этого видеокарта не должна сама аппаратно декодировать?
Программное декодирование, ну никак не может заменить разгрузку процессора чипом не карте
Автор: Criptozavr
Дата сообщения: 15.05.2009 20:17
Народ, такая проблема - есть файл в MKV, который требуется перекодировать в AVI для просмотра на бытовом видеоплеере. Все попробовал, включая связку mkvtoolnix + VirtualDub + AviSynth, но каждый раз при воспроизведении готового файла плеер говорит о неподдерживаемом разрешении. Что посоветуете?
Автор: Abs62
Дата сообщения: 15.05.2009 21:08
Criptozavr
А какое разрешение в исходном видео и какое умеет показывать этот плеер?
Автор: Criptozavr
Дата сообщения: 15.05.2009 21:15
Abs62

Вот параметры видеофайла

[more]Видео

Формат AVC

Формат/Информация Advanced Video Codec

Профайл формата High@L3.1

Настройка CABAC формата Да

Настройка ReFrames формата 5 кадры

Режим смешивания Container profile=Unknown@3.1

Идентификатор кодека V_MPEG4/ISO/AVC

Продолжительность 1ч 46мин

Номинальный битрейт 521 Кбит/сек

Ширина 976 пикс.

Высота 528 пикс.

Соотношение кадра 1.850

Частота кадров 23,976 кадр/сек

Разрешение 24 бит

Колориметрия 4:2:0

Тип развёртки Прогрессивная

Бит/(Пиксели*Кадры) 0.042

Библиотека кодирования x264 core 67 r1137M 1fda882

Настройки программы cabac=1 / ref=5 / deblock=1:-2:-1 / analyse=0x3:0x113 / me=umh / subme=6 / psy_rd=1.0:0.0 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-2 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=16 / b_pyramid=1 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / keyint=250 / keyint_min=25 / scenecut=40 / rc=2pass / bitrate=521 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00

Аудио

Формат AAC

Формат/Информация Advanced Audio Codec

Версия формата Version 4

Профайл формата LC

Настройка SBR формата Да

Настройка PS формата Нет

Идентификатор кодека A_AAC

Продолжительность 1ч 46мин

Канал(ы) 2 канала(ов)

Расположение каналов L R

Частота 48,0 КГц

Разрешение 16 бит

[/more]

А вот с плеером я, честно говоря, даже и не знаю. Написано в инструкци что-то типа 24-бит/192 кГц. Ну и поддержка DiVX и DiVX Ultra. Все...
Автор: Abs62
Дата сообщения: 15.05.2009 21:47
Criptozavr
Ну, такое разрешение плеееры обычно не поддерживают - максимум 720х576. Так что скрипт для AviSynth должен выглядеть примерно так:

Код: DirectShowSource("имя_файла.mkw")
Lanczos4Resize(704,384)
Автор: Criptozavr
Дата сообщения: 15.05.2009 21:50

Цитата:
Звук тоже придётся перекодировать - AAC в avi не лезет.


А чем перекодировать? В какой формат? AC3? И не будет ли потом рассинхронизации видео и аудио?
Автор: Abs62
Дата сообщения: 15.05.2009 22:10
Criptozavr
Да достаточно MP3 CBR, думаю. Исходный-то звук стерео, 5+1 из него всё равно не выжмешь.
Чем - по вкусу. Проще всего lame + какой-нибудь GUI, вроде LameFE.
Рассинхрона быть не должно, даже если из фильма вырезать куски в скрипте - Save WAV в VirtualDub и этот wav кодировать.
Автор: Criptozavr
Дата сообщения: 15.05.2009 22:27
Abs62

Спасибо за ответ. Т.е. порядок действий следующий:

1) Вытаскиваю из MKV с помощью MKVTOOLNIX видео (.h264) и аудио (.aac)

2) Перекодирую ААС в MP3 CBR

3) Сохраняю MP3 в VirtualDub в формате WAV

4) Создаю скрипт с предложенным Вами текстом и сохраняю

5) Забрасываю аудио (.wav), видео (.h264) и скрипт в одну папку

6) Открываю VirtualDub и перескиваю в него скрипт

7) Перекодирую

Правильно?

P.S. А 704,384 в тексте скрипта это разрешение, которое будет вместо 976Х528 ?
Автор: Abs62
Дата сообщения: 15.05.2009 22:41
Criptozavr
Не-а.
1. Создать скрипт
2. Открыть его в VirtualDub (DirectShowSource читает прямо из mkv, не нужно его разбирать)
3. Сохранить звук в wav (из VirtualDub) и перекодировать его в MP3
4. Подключить перекодированный звук к VirtualDub (Audio -> Audio from other file в VirtualDub или Streams -> Stream list в VirtualDubMod)
5. Перекодировать видео (в выходном avi уже перекодированный звук окажется)


Цитата:
P.S. А 704,384 в тексте скрипта это разрешение, которое будет вместо 976Х528 ?

Да, именно так.
Автор: Criptozavr
Дата сообщения: 15.05.2009 22:51
Abs62

Ага, вот оно как Сейчас попробую! Спасибо!

P.S. О результатах отпишусь.

P.P.S. Ну вот - попробовал... Попытался загрузить скрипт в дуб, а он мне выдал:



Ну и что сие значит?


Добавлено:
А вот с этим скриптом дуб все открывает:

DirectShowSource("YourMovieName.mkv", fps = 23.976, convertfps = true)

Это я в сетке нашел, когда искал варианты конвертирования из MKV в AVI.
Автор: Abs62
Дата сообщения: 15.05.2009 23:26
Criptozavr

Цитата:
Ну и что сие значит?

Это значит, что AviSynth не нашёл указанный файл. Надо задавать полное имя файла, с путём к нему.

Цитата:
А вот с этим скриптом дуб все открывает

Да по идее не должно быть разницы - в исходном файле и так fps 23.976.
Автор: Criptozavr
Дата сообщения: 15.05.2009 23:36
Abs62

Прописал путь к файлу в скрипте - то же окно... А с моим открывается без проблем. Может быть, нужна другая команда?

P.S. А можно как-то это самое злополучное разрешение по-другому поменять? Например, взять какой-нибудь MKV-конвертер и в его настройках перед конвертированием выставить разрешение? А то я уже замучился с этими многоходовыми комбинациями.
Автор: Abs62
Дата сообщения: 15.05.2009 23:50
Criptozavr
Дык, там в имени файла ошибка - .mkw вместо .mkv


Цитата:
P.S. А можно как-то это самое злополучное разрешение по-другому поменять?

Можно. В VirtualDub добавить фильтр resize, например.

Цитата:
Например, взять какой-нибудь конвертер и в его настройках перед конвертированием выставить разрешение?

И так можно, если есть такая настройка.
Автор: Criptozavr
Дата сообщения: 15.05.2009 23:54
Abs62

Блин, а я тут уже на стены лезу Все - запустилась машинка! Сейчас буду дальше делать.

P.S. А почему у меня получается выходной файл просто-таки гигантского размера? Вроде поставил Direct Stream Copy, а у меня показывает предполагаемый размер чуть ли не 60 Гб!

P.P.S. Прервал конвертирование и попробовал воспроизвести получившийся кусок на плеере. Звук есть, а вместо картинки черный квадрат Малевича. Блин, у меня сейчас мозги закипят! Что опять не так??? Опять ему другое разрешение требуется?
Автор: Abs62
Дата сообщения: 16.05.2009 00:12
Criptozavr

Цитата:
P.S. А почему у меня получается выходной файл просто-таки гигантского размера? Вроде поставил Direct Stream Copy, а у меня показывает предполагаемый размер чуть ли не 60 Гб!

Так Direct Stream Copy - это запись в файл без перекодирования, как есть. А на вход VirtualDub получает уже декодированный видеопоток из AviSynth. Надо выставить Full processing mode, выбрать кодек, выставить его параметры. Изменить разрешение без полного перекодирования не получится никак.
Автор: Criptozavr
Дата сообщения: 16.05.2009 00:27
Abs62

Так, по порядку:

Full Processing Mode - а какой кодек выбрать и что там поставить? Опять же что с аудио - там тоже нужно выставить Full Processing Mode и выбрать кодек?

P.S. Выбрал XViD, а в AUDIO - Lame Mpeg 3 (опять же Full Processing Mode). Запустил кодирование и увидел предполагаемый размер. На этот раз ~ 1,5 Гб - это норма или можно еще меньше? Короче говоря, подождал какое-то время и опять прервал конвертирование. Загрузил получившийся кусок в плеер, включил воспроизведение и - о чудо! - увидел картинку и услышал звук без рассинхронизации. Yes! Yes! Yes! Наконец-то! Фу-у-у-у-х..... Как меня все это достало!

Abs62, спасибо Вам огромное за классные советы! Уж не знаю, кто бы еще так долго смог меня вытерпеть Ура!!!
Автор: Alex Dragon
Дата сообщения: 16.05.2009 00:41
Как раз Full Processing Mode не надо, а надо Fast recompress. Full Processing — это полная обработка средствами VD. Если дабовских фильтров не используете, то лучше не включать, потому что VD работает только в RGB, так что даже если никакой фильтр не стоит, то он всё равно преобразует в него. Это замедлит работу и к тому же исказит цвета.
А в режиме Fast recompress Даб просто служит интерфейсом пользователя для кодека.
Правда, вы вроде хотите дабовский ресайз использовать, но я не понял, а чем ресайз в Ависинте не устраивает?
Какой кодек выбрать — ну это вы по спецификации к своему железу посмотрите, что оно поддерживает. Наверяка DivX, наверное Xvid. Если да, то я бы выбрал бы Xvid.
Звук лучше кодировать отдельно каким-то внешним приложением, я использую lame encoder — он по сравнению с системными кодеками звук вроде поприличней даёт. А потом готовый mp3-файл в том же дабе пришить к видео.
Автор: Abs62
Дата сообщения: 16.05.2009 00:41
Criptozavr

Цитата:
а какой кодек выбрать и что там поставить?

Кодек - DivX или XviD. По настройкам лучше покопаться в сети, инфы много (вот, например). Ну, или спрашивать в темах по этим кодекам.

Цитата:
Опять же что с аудио - там тоже нужно выставить Full Processing Mode и выбрать кодек?

Зачем, если оно уже перегнано в нужный формат и плеер его понимает? Пусть идёт в Direct stream copy, как есть в mp3.


Цитата:
На этот раз ~ 1,5 Гб - это норма или можно еще меньше?

Для такого разрешения и длительности - должно быть нормально. Тут надо на качество картинки смотреть.
Автор: Criptozavr
Дата сообщения: 16.05.2009 00:50
Alex Dragon

Спасибро за информацию! Попробую еще и Fast recompress. Самое главное, что есть результат в виде картинки и звука. Все остальное дело наживное!

Abs62

Еще раз хотел бы Вам выразить свою огромную признательность за всю оказанную помощь! You are the best!!!
Автор: Alex Dragon
Дата сообщения: 16.05.2009 00:55

Цитата:
Попробую еще и Fast recompress.


Но учтите, что это имеет смысл, если вы ресайз в ависинте сделаете, а не в дабе. Да и в вообще любые обработки.
Автор: Criptozavr
Дата сообщения: 16.05.2009 01:02
Alex Dragon

OK, учту. Спасибо! А размер выходного файла можно сделать меньше или это все, что можно выжать?
Автор: Alex Dragon
Дата сообщения: 16.05.2009 01:15
Ну попробуйте битрейт ниже выставить. Это только эксперементально можно выяснить, какой битрейт приемлим без существенного снижения качества. Кодируйте в два прохода (2-pass encoding, в настройках Xvid'а обозначен как «Twopass - 1st pass» для первого прохода и «Twopass - 2st pass» для второго ) — при том же битрейте картинка будет несколько лучше, чем в однопроходном режиме.
Автор: Criptozavr
Дата сообщения: 16.05.2009 10:14
Alex Dragon

Thx, будем пробовать.

Страницы: 12345678910111213141516171819

Предыдущая тема: Вставка из clipboard'а в MS Outlook 2000


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.