Страницы

вторник, 30 декабря 2014 г.

Movies database. Сайты коллекции метаинформации о фильмах

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



IMDB.com


IMDB movie api
IMDB.com - крупнейший сайт о фильмах в сети Интернет
Крупнейший индекс фильмов. IMDB ID.
Доступна выгрузка базы данных для частных целей. Формат базы данных - текстовые и patch-файлы.
Не предоставляет API на некоммерческой основе.
Есть обёртка на языке Python. http://imdbpy.sourceforge.net/

IMDBPY


IMDBPY. Обёртка (API) на языке Python для доступа к локальным данным IMDB
Позволяет организовать локальную базу данных по фильмам и пр. сущностям IMDB.



TheMovieDB.org. The Movie database


The Movie database

Сайт требует регистрации. Регистрация свободная.
Поддерживает API-доступ, по ключу пользователя.

OMDBAPI.com Open Movie Database API


OMDBAPI.com. Программный интерфейс к БД фильмов

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

Имеется обёртка на языке Python, для доступа к БД: https://github.com/dgilland/omdb.py


Freebase


Freebase. Семантическая база данных, не только по фильмам
Поддерживает API-доступ, в виде url-параметров, на основе ключа пользователя.
Имеется несколько обёрток на разных языках, для доступа к БД.
Используется Google для выдачи поисковых "кусочков"- snippets, о фильме.


Wikipedia


Wikipedia. Пример информации о фильме

Страница фильма следует стандарту wiki-разметки, Так-что программное извлечение данных, вполне возможно.
Доступна выгрузка всей базы данных Wikipedia.

DVDXML.com


DVDXML. Сайт с данных фильмов на DVD-дисках, в формате Microsft Media Center
Сайт требует регистрации.
Есть платный доступ.

Trailers.apple.com


Трейлеры фильмов на сайте Apple.com
Нет API-доступа.
Требуется программа iTunes для загрузки трейлеров фильмов.


TV DB


TV DB. База данных по TV программам (Северная Америка и пр.)

Доступен XML-API.
Данные используется в некотором числе домашних медиа центров, таких Microsft Media Center, XBMC и пр.

Кинопоиск


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


※※※


WMV Metainfo. Метаинформация видеофайлов Windows Media Video

Библиотека AVLib как наследница FFmpeg позволяет добавлять метаинформацию в видеофайлы WMV, на стадии их формирования (вывода).
Для этого используется опция -metadata. Для разных форматов выходных файлов, поддерживаются разные опции.

Здесь, для файлов формата ASF,WM,WMV.

-metadata title="Название видеофайла"
-metadata description="Описание видеофайла"
-metadata author="Автор материала"
-metadata copyright="Копирайт материала"

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

$ avconv -i "in.wmv" -c:v copy -c:a copy -metadata title="Название видеофильма" -metadata description="В недалёком будущем..." out2.wmv

Причём, поле author попадает в поле "Участвующие исполнители", если смотреть в свойствах файла в проводнике Windows.
Поле description не появляется вообще.
Поле title попадает в поле "Название"
Поле copyright попадает в поле "Авторские права"


※※※

Ресурсы


1.FFmpeg metadata. http://wiki.multimedia.cx/index.php?title=FFmpeg_Metadata#ASF.2FWMV.2FWMA


※※※

воскресенье, 28 декабря 2014 г.

MOV. Видеофайлы Canon EOS 1100d в медиатеке Ubuntu для клиентов Windows

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

Фотокамера Canon EOS 1100d записывает видео в формате QuickTime. Разрешение: 720p - High Definition (HD). Расширение файлов: MOV (контейнер QuickTime)


Что показывает программа MediaInfo о видеофайле, полученным от фотокамеры Canon EOS 1100d.

$ mediainfo MVI_3086.MOV

General
Complete name                            : MVI_3086.MOV
Format                                   : MPEG-4
Format profile                           : QuickTime
Codec ID                                 : qt
File size                                : 234 MiB
Duration                                 : 1mn 3s
Overall bit rate                         : 31.1 Mbps
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L5.0
Format settings, CABAC                   : No
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=12
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1mn 3s
Bit rate                                 : 30.3 Mbps
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 1.316
Stream size                              : 228 MiB (97%)
Language                                 : English
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16
Color primaries                          : BT.709-5, BT.1361, IEC 61966-2-4, SMP                                  TE RP177
Transfer characteristics                 : BT.709-5, BT.1361
Matrix coefficients                      : BT.601-6 525, BT.1358 525, BT.1700 NT                                  SC, SMPTE 170M

Audio
ID                                       : 2
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : sowt
Duration                                 : 1mn 3s
Bit rate mode                            : Constant
Bit rate                                 : 768 Kbps
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
Stream size                              : 5.78 MiB (2%)
Language                                 : English
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16

Из описания можно видеть, что для кодирования видеодорожки применен кодекс AVC с простейшим профилем Baseline@L5.0, обычно используемым для недорогих-малопроизводительных аппаратных кодировщиков. Разрешение соответствует HD. Аудиодорожка получена из встроенного мономикрофона (1 channel), в несжатом формате PCM.

Можно ли произвести конвертирование из исходного формата полученного от камеры Canon EOS 1100d MOV, например в MP4 или MKV?

Что говорить Wikipedia о кодеке AVC (Advanced Video Coding):
Part 10 (ISO/IEC 14496-10): Advanced Video Coding: Описывает стандарт сжатия видео, технически идентичный стандарту H.264, разработанному ITU-T .

Таким образом, по идее, можно выполнять простое копирование  из одного контейнера QuickTime MOV в другой MKV или MP4.

※※※

MOV в MKV

Контейнер MKV более универсальный, позволяет хранить аудио и видео в разных кодеках. Так что, 

$ avconv -i MVI_3086.MOV -c:v copy -c:a copy test.mkv

General
Unique ID                                : 51029448211527616088337682027470918897 (0x2663EA0B585E6A80A1628B88B0D014F1)
Complete name                            : test.mkv
Format                                   : Matroska
Format version                           : Version 2
File size                                : 234 MiB
Duration                                 : 1mn 3s
Overall bit rate                         : 31.1 Mbps
Encoded date                             : UTC 2014-01-01 17:52:16
Writing application                      : Lavf53.21.1
Writing library                          : Lavf53.21.1

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L5.0
Format settings, CABAC                   : No
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=12
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 1mn 3s
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 25 000.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Language                                 : English
Default                                  : Yes
Forced                                   : No
Encoded date                             : UTC 2014-01-01 17:52:16
Color primaries                          : BT.709-5, BT.1361, IEC 61966-2-4, SMPTE RP177
Transfer characteristics                 : BT.709-5, BT.1361
Matrix coefficients                      : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M

Audio
ID                                       : 2
Format                                   : PCM
Codec ID                                 : A_PCM/INT/LIT
Duration                                 : 1mn 3s
Bit rate mode                            : Constant
Channel(s)                               : 1 channel
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
Language                                 : English
Default                                  : Yes
Forced                                   : No
Encoded date                             : UTC 2014-01-01 17:52:16

Кое-что потерялось в процессе трансконтейнеризации (переупаковке).
Tagged date,
Также, т.к. видео снимается на русском языке, а поле метаинформации дорожки Language указано English, это уже ошибка ПО камеры.

Это надо как-то исправить. См. ниже.

Однако, у контейнера MKV, серьёзная и полноценная поддержка со стороны системы Windows будет доступна с 10 версии.


※※※

MOV в MP4

Для контейнера MP4, не всё так просто, оказывается надо перекодировать звук из PCM в AAC (либо иные поддерживаемые контейнером аудиокодеки, например mp3).

$ avconv -i MVI_3086.MOV -c:v copy -c:a aac -strict experimental test.mp4
$ avconv -i MVI_3086.MOV -c:v copy -c:a libvo_aacenc test.mp4

aac - встроенный кодировщик AAC.

libvo_aacenc - кодировщик AAC, поддерживает только 2 канальный звук и CBR (постоянный битрейт), поэтому, если исходная дорожка содержит 6-канальный звук (5.1), то надо добавлять опцию -ac 2.

$ avconv -i MVI_3086.MOV -c:v copy -c:a libvo_aacenc -ac 2 test.mp4
или с селектором аудиодорожки:
$ avconv -i MVI_3086.MOV -c:v copy -c:a:1 libvo_aacenc -ac:1 2 test.mp4
Это приведено для справки, т.к. Canon EOS 1100d содержит только 1 канал аудио.


Если требуется полноценное преобразование дорожки AC3 в AAC, то можно использовать Nero AAC encoder [4][5].

Вообще, avlib поддерживает 4 кодека AAC LC (aac, libfaac, libfdk_aac, libvo_aacenc) и 2 AAC HE (libaacplus and libfdk_aac). Но они, кроме libvo_aacenc, являются несвободными.




ВАЖНО. Странно, но эта команда (и другая) изготовила некачественное видео с рывками, при проигрывании в Windows Media Player. VLC плеер справился. DivX player справился. Файл был открыт по сети. При копировании на жесткий диск компьютера, проблема осталась.
Т.е. чтобы создать качественную медиабиблиотеку собственных видеороликов, надо разбираться с тонкостями MP4.
Выяснилось, что также с рывками проигрывается исходный файл, в WMP.
Так что, исходный файл, удалять нельзя, а эксперименты проводить на копиях.

Что показывает mediainfo для кодировщика звука aac:

$ mediainfo test.mp4
General
Complete name                            : test.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom
File size                                : 230 MiB
Duration                                 : 1mn 3s
Overall bit rate mode                    : Variable
Overall bit rate                         : 30.5 Mbps
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16
Writing application                      : Lavf53.21.1

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L5.0
Format settings, CABAC                   : No
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=12
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1mn 3s
Bit rate                                 : 30.3 Mbps
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 1.316
Stream size                              : 228 MiB (99%)
Language                                 : English
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16
Color primaries                          : BT.709-5, BT.1361, IEC 61966-2-4, SMPTE RP177
Transfer characteristics                 : BT.709-5, BT.1361
Matrix coefficients                      : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 1mn 3s
Bit rate mode                            : Variable
Bit rate                                 : 192 Kbps
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 48.0 KHz
Compression mode                         : Lossy
Stream size                              : 1.44 MiB (1%)
Language                                 : English
Encoded date                             : UTC 2014-01-01 17:52:16
Tagged date                              : UTC 2014-01-01 17:52:16


Проблему с языком, на файле формата MOV, а также MP4 можно исправить командой:
mp4track --track-id 1 --language rus test.mov
mp4track --track-id 2 --language rus test.mov
ID дорожек можно просмотреть по команде: mp4info test.mov
Это исправит язык, но например DivX converter не увидит никакой дорожки и нельзя будет сделать преобразование.


※※※

Совместимость с Windows Vista


Windows Vista имеющая на старом компьютере, вообще, не поддерживает MOV,MKV,MP4 и не может проигрывать видеофайлы в этих форматах, без привлечения сторонних DirectShow фильтров.

Windows Vista поддерживает следующие типы файлов в программе Windows Media Center (WMC):
Файл Windows Media .wm и .asf
Файл Windows Media Video .wmv
Видеофайл Windows .avi
Файл записанной телепередачи Microsoft .dvr-ms
Файл фильма .mpeg, .mpg, .mpe, .m1v, .mp2 и .mpv2

Т.е. чтобы удовлетворить требования медиабиблиотеки Windows Vista, надо изрядно постараться с перекодированием, либо искать плагины для WMC.


Для Windows Vista можно выбрать контейнер AVI, но потребуется перекодирование видео, например в кодек vmv2.

$ avconv -i MVI_3086.MOV -c:v wmv2 -c:a copy test.avi

Видео, созданное этой командой, содержит очень много визуальных артефактов кодирования (выглядит, как будто каждый пиксел увеличен в 2 раза - квадратиком).
Однако WMV9 (опция wmv3) - более качественный кодек, недоступен в avconv, да и в Linux, без ухищрений.

Однако, эти артефакты кодирования исправить можно указав битрейт и др. параметры
$ avconv -i MVI_3086.MOV -c:v wmv2 -b:v 12000k -qscale:v -c:a copy test.avi

Также можно выбрать контейнеры ASF и WMV.

$ avconv -i Borgu.mp4 -c:v wmv2 -qscale:v 2 -b:v 12000k -r 30 -c:a wmav2 test.wmv


Для преобразования видеофайлов с камеры Canon 1100d в форматы поддерживаемые в операционной системой Windows, лучше всего подойдёт Windows Media Video 9 (WMV9) , он же VC-1 (в avconv называется wmv3), с профилем Windows Media Video 9 Advanced Profile L2 (1280x720p,30 fps, 20 Mbit/s).
Поэтому все преобразования можно делать на платформе Windows, например в киностудии Windows Live (Windows Movie Maker), DivX Converter и т.п.
Есть также Microsoft Expression Encoder 4.

Посмотрим сведения о преобразованном файле:
$ mediainfo test.wmv

General
Complete name                            : test.wmv
Format                                   : Windows Media
File size                                : 62.5 MiB
Duration                                 : 1mn 3s
Overall bit rate mode                    : Constant
Overall bit rate                         : 8 297 Kbps
Maximum Overall bit rate                 : 8 321 Kbps
Encoded date                             : UTC 2014-12-27 16:21:40.489

Video
ID                                       : 1
Format                                   : VC-1
Format profile                           : MP@HL
Codec ID                                 : WMV3
Codec ID/Info                            : Windows Media Video 9
Codec ID/Hint                            : WMV3
Description of the codec                 : Windows Media Video 9 - Professional
Duration                                 : 1mn 3s
Bit rate mode                            : Constant
Bit rate                                 : 8 000 Kbps
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 30.000 fps
Bit depth                                : 8 bits
Scan type                                : Progressive
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.289
Stream size                              : 60.3 MiB (96%)

Audio
ID                                       : 2
Format                                   : WMA
Format profile                           : Pro
Codec ID                                 : 162
Codec ID/Info                            : Windows Media Audio
Description of the codec                 : Windows Media Audio 10 Professional - 256 kbps, 96 kHz, 2 channel 24 bit (A/V) 1-pass CBR
Duration                                 : 1mn 3s
Bit rate mode                            : Constant
Bit rate                                 : 256 Kbps
Channel(s)                               : 2 channels
Sampling rate                            : 96.0 KHz
Bit depth                                : 24 bits
Stream size                              : 1.93 MiB (3%)

Размер видео уменьшился почти в 4 раза.

В результате, плеер WMP и медиацентр WMC Windows Vista способны показать эти ролики. Сохраняется возможность редактирования свойств-метаинформации, выставлении оценок и рейтингов для видео. Т.е. обеспечиться совместимость и со старыми версиями Windows, со стандартными. Т.е. старый компьютер с Widows Vista, может эксплуатироваться как Media Center.

Есть такая полезная вещь: Windows Vista Codec Pack, которая расширит количество форматов проигрываемых в Windows Vista Media Cener.


※※※

Совместимость с Windows 7


Windows 7 и её Windows Media Center уже содержит улучшенные возможности по проигрыванию видео:
Windows 7 поддерживает следующие типы файлов в программе Windows Media Center
Файлы Windows Media WM, WMV и ASF
Файлы AVCHD (включая звуковые файлы Dolby Digital): M2TS и M2T
Файлы Apple QuickTime: MOV и QT
Файлы AVI: AVI
Файлы записанных телепередач Windows: WTV и DVR-MS
Файлы фильмов MPEG-4 MP4, MOV и M4V
Файлы фильмов MPEG-2: MPEG, MPG, MPE, M1V, MP2, MPV2, MOD и VOB
Файлы фильмов MPEG-1: M1V
Файлы Motion JPEG: AVI и MOV
Медиаприставка Media Center может не поддерживать просмотр некоторых типов видеофайлов. Например, некоторые модели медиаприставок не поддерживают файлы AVCHD или Apple QuickTime.
Это была цитата из описания с сайта Microsoft.
Откуда видно, что с форматом Apple QuickTime всё равно будут какие-то скрытые проблемы.
MKV не поддерживается полноценно. Однако воспроизведение может быть получено если установить Matroska media splitter.

Поддержка кодирования в форматы Windows, в Ubuntu server оставляет желать того, чтобы Microsoft сделала свои кодирующие библиотеки доступными и в Linux.


※※※

Выводы

1. Для каждого "потребителя" медиатеки со своими предпочтениями нужно сделать свою отдельную медиатеку, наиболее соответствующую применяемым технологиям.
2. Настроить более качественный сервер DLNA, выполняющий транскодирование на "лету" для каждого клиента.
3. В принципе, видеоролики полученные с фотокамеры Canon EOS 1100d, можно хранить в оригинальном формате на сервере HP Proliant microseserver. При необходимости, отдельные ролики можно преобразовать для поддержки Windows Vista, в формат WMV9, используя любую подходящую программу на Windows.
4. Возможно стоит рассмотреть стандартные открытые кодеки, например OGG, WebM.



※※※

Ресурсы

1. Описание Avconv (en): http://libav.org/avconv.html

2. Перекодирование MOV to WMV в Movie Maker(en): http://www.groovypost.com/howto/microsoft/easily-convert-mov-files-to-wmv-free/

3. Компоненты пакета DivX: http://www.divx.com/en/software/divx
4. Nero AAC encoder: http://www.nero.com/enu/company/about-nero/nero-aac-codec.php
5. AAC encoding on Ubuntu (en): https://alexanderstechcorner.wordpress.com/2014/07/14/aac-encoding-on-ubuntu/

※※※

пятница, 26 декабря 2014 г.

MP4 & MKV cover arts. Добавление обложек к фильму, в командной строке Ubuntu

Заметка приведена, для простейшего управления медиаколлекцией (видеотекой) в операционной системе Ubuntu server LTS 12.04.5, из командной строки на сервере HP proliant microserver (на любом Linux-сервере).

Данная возможность нужна для повышения удобства и вузальной привлекательности использования медиаколлекции на устройствах с операционными системами семейства Windows (7,8 и т.п.).

На микросервере есть запущенная служба MiniDLNA (ReadyMedia), которая указывает на каталог с видеофайлами, которые становяться доступны на компьютерах с Windows, в программах Windows Media Player (WMP) и Windows Media Center, а также аппаратного проигрывателя WD TV Live. Это простейшая служба без транскодирования. MiniDLNA просто предоставляет файлы по протоколу DLNA в локальной сети (широковещательный протокол, не выходит за роутер).

Обычно файлы в контейнерах MP4 и MKV не содержат ни метаинформации (сведений о фильме), ни обложки (cover art) и выводятся в интерфейсе проигрывателей в виде неизвестных файлов.
Исправим этот недостаток, в части обложек фильмов.
Где получить обложки - это не предмет этой заметки. Обычно их можно скачать автоматически или вручную с сайтов (imdb, tmdb и т.п.). Для Windows есть удобные утилиты.

Для исследовательских целей будем использовать образцы фильмов, т.н. трейлеры, свободно доступные для скачивания в сети Интернет.

MP4 cover arts. Обложки фильмов внутри формата MP4


Т.к. Windows Media Player (Windows Media Center) в большей степени поддерживает файлы в формате MP4 (отображает названия, жанр, оценки и т.п.), то можно сконвертировать все видеофайлы из формата MKV в формат MP4.

Для отдельного файла преобразование выполняется командой avconv из пакета libav-tools
$ avconv -i input.mkv -c:v copy -c:a acc -strict experimental output.mp4
Это простое преобразование, с перекодированием звуковой дорожки в поддерживаемый MP4-контейнером формат аудио.
Т.е. обычно (но не обязательно) MP4 - это H.264 и AAC. А MKV - это H.264 и AC3.
После этого WMP проигрывает и видео и звук в MP4-контейнере.
Звук после преобразования в экспериментальном режиме получается плохой, заикающийся.


Простая операция копирования из контейнера в контейнер возможна, если в MKV есть AAC-дорожка, тогда всё просто.


Установить пакет mp4v2-utils, который содержит несколько инструментов для редактирования метаинформации в видеофайлах - контейнерах стандарта MPEG4 - MP4.

$ sudo apt-get install mp4v2-utils

/usr/bin/mp4art
/usr/bin/mp4chaps
/usr/bin/mp4extract
/usr/bin/mp4file
/usr/bin/mp4info
/usr/bin/mp4subtitle
/usr/bin/mp4tags
/usr/bin/mp4track
/usr/bin/mp4trackdump

Простейшее добавление постера (обложки, cover art) к видеофайлу mp4:

$ mp4art --add tron-poster.jpg tron.mp4

После добавления обложки, можно добавить описание файла (теги, video tags).

$ mp4tags -a "Автор произведения" -s "Название" file.mp4

После этого, видеофайл будет иметь обложку в WMP, а также будет доступна возможность исправлять теги в свойстве файла проводника (встроенная поддержка контейнера MP4).


Свойства видео из контейнера MP4, в свойствах файла из Проводника.


Выкопировка вида из Windows Media Player с файлом MP4, содержащим в себе обложку.

Всё это дает также возможность поиска видеофайлов из проводника Windows, по тегам (например сценаристам и пр.).

Файл, со встроенным (embedded cover art) изображением также будет отображаться аппаратным сетевым медиплеером (например WD TV Live) в виде эскиза.


Основную сложность представляет поиск и сбор метаинформации о видеофильмах. Обычно для Windows, есть утилиты каталогизаторы (например Windows Media Browser, ), но для сервера Ubuntu так просто не будет, надо писать скрипты.


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

#!/bin/bash
# сервер: микросервер
# дата: 25.12.2014
# Описание (ru): Преобразование файлов формата контейнера mkv в формат контейнера mp4 
# Для сайта: http://gimmor.blogspot.com/

# Папка SRC - содержит необработанные MKV файлы (желательно с H.264)
# Папка DEST - будет содержать MP4-файлы (H.264 & AAC)

SRC=/mnt/rawvideo
DEST=/mnt/collection
POSTEREXT=jpg
TOEXT=mp4

find $SRC -type f -name '*.mkv' | while read LINE;
do
# Разбивка имени файла на части
echo "$LINE"
filename=${LINE%.*}
path=${LINE%/*}
echo "Папка: $path"
name0=${LINE##*/}
NAME=${name0%.*}
echo "Имя: $NAME"
echo "Filename: $filename"
extension=${LINE##*.}
echo "Расширение: $extension"
noextension=${LINE%*.}
echo "Без расширения: $noextension"

# Трансконтейнеризация
echo "Трансконтейнеризация... $LINE"
echo "в $DEST/$NAME.$TOEXT"

# Пример операций над файлами
# Простое преобразование MKV (H.264 & AC3) в MP4 (H.264 & AAC)
# avconv -i "$LINE" -c:v copy -c:a aac -strict experimental -y "$DEST/$NAME.$TOEXT"
# Добавить обложку к MP4 (обложки должны быть)
# mp4art --add "$filename-poster.$POSTEREXT" "$filename.$TOEXT"
# Можно сделать любую операцию с файлом

done

Не забыть:
Права на выполнение скрипта
# chmod +x mkv2mp4.sh


MKV Nice cover arts. Привлекательные обложки фильмов внутри Matroska


Формат MKV (Matroska) также поддерживает возможность добавления обложки. Однако, не все проигрыватели поддерживают отображение встроенных в MKV обложек. Windows Explorer не поддерживает, Windows Media Player не поддерживает и т.п.
VLC плеер поддерживает, но как-то кривовато.

Специфические требования к размеру и наименованию файлов обложек согласно спецификации MKV следует удовлетворить.

4 файла обложки должно быть включено в контейнер MKV (расширения файла с обложкой - jpg или png, маленькими буквами)
1. cover.jpg (размер 960х600 или 600х600)
2. small_cover.jpg (размер 192х120 или 120х120)
3. cover_land.jpg (размер 600)
4. small_cover_land.jpg (размер 120)

Малые обложки в 5 раз меньше больших. Фактор масштабирования 20%

Пример добавления 4 обложек, за один раз:

$ mkvmerge -o out.mkv --attach-file "cover.jpg" --attach-file "small_cover.jpg"  --attach-file "cover_land.jpg"  --attach-file "small_cover_land.jpg" in.mkv

out.mkv - выходной файл, с обложками
in.mkv - входной файл, без обложек

Например, если есть исходный файл cover.jpg имеет ширину 600, то можно подготовить уменьшенную копию small_cover.jpg, сделав изменение размера (resize) с помощью команды convert из пакета imagemagick.

$ convert cover.jpg -resize 20% small_cover.jpg
$ convert cover_land.jpg -resize 20% small_cover_land.jpg

※※※

Ресурсы


1. Matroska cover art. http://www.matroska.org/technical/cover_art/index.html

※※※


понедельник, 15 декабря 2014 г.

MKV Metainfo. Метаинформация видеофайлов. Редактирование тэгов MKV в Ubuntu

Для чего может понадобиться редактирование тэгов?

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

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

Общего стандарта на формат метаинформации в видеофайлах нет, каждый контейнер (видеофайл), содержит свой формат.

Наиболее перспективными современными форматами являются MKV и webm (на основе MKV), возможно что и Ogg.

MKV - Matroska


Приведу пару простейших правок файла контейнера Matroska.

В контейнере MKV, есть поле title, которое многие программы используют в качестве "Названия". Например "Просмотр свойств файла, в файловом менеджере Nautilus", программа VLC, Gnome - видео.


$ mkvpropedit "Red 2.mkv" -s title="Red 2"

Можно также выбрать небходимую дорожку (видео или аудио), и задать ей поле имя - читаемое человеком.
Например:

mkvpropedit "Red 2.mkv" -e track:1 -s name="Red 2 movie track"

mkvpropedit "Red 2.mkv" -e track:2 -s name="Red 2 original soundtrack"

mkvpropedit "Red 2.mkv" -e track:3 -s name="Red 2 russian soundtrack"

Это стандартные поля, которые присутствуют в заголовках дорожек.

Помимо этого,  в контейнере MKV присутствует такая особенность как  Tags - тэги. Вот в них, уже можно заполнять разнообразную метаинформацию о фильме, которая будет полезна в коллекционировании.


Небольшое упрощение ручного редактирования tags xml

В Ubuntu, в домашней папке Шаблоны, можно поместить готовый шаблон структуры xml  файла, с тегами для контейнера Matroska. В нём можно заполнить информационные поля, относящиеся к создаваемой коллекции и пр.
При необходимости отредактировать свойства видеофайла, по правой кнопке создается xml-файл, редактируется  и сохраняется в каталоге с фильмом.

После чего, одной командой, добавляется в тело контейнера с фильмом:

$ mkvpropedit "Red 2.mkv" -t all:red2.xml

※※※

Ресурсы


1. Спецификация контейнера: http://www.matroska.org/
2. http://www.bunkus.org/videotools/mkvtoolnix/
3. http://www.matroska.org/downloads/mkclean.html
※※※


Remote access over landline. Удаленный доступ через телефонную линию

Доступ к микросерверу HP Proliant Microserver, через телефонную линию, с использованием аналогового модема TRENDnet TFM-561U.

TRENDnet TFM-561U - старая добрая аналоговая технология. И она может принести пользу в век etherneta и сотовых сетей.




Зачем?
Затем, чтобы при "падении" основной линии интернета, можно было бы получить доступ к компьютеру, в том числе и из другого города, для диагностики и попыток решения проблемы программными средствами.
Если я правильно понял, то 3G сети не предоставляют такой удобной функции, либо предоставляют с большими затратами.


Почему выбран этот модем?
Компактен, питание от USB, стандартная поддержка в Linux.

Ресурсы

1. http://shrewdraven.org/content/setting-mgetty-dialout-and-send-audio-message-under-linux

※※※

Thunderbird. Перенос почты со старой системы в новую

Перенос почты Thunderbird со старой системы на новую оказался простым.

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

1. В новой системе устанавливается Thunderbird.

apt-get install thunderbird thunderbird-locale-ru

2. Копируется папка .thunderbird (в домашней папке) из старой системы в новую.

Перенеслись настройки учётной записи, все сообщения.

Не перенеслись различные установленные расширения, в том числе ключи.


※※※

Perpetum reposita. Вечное хранение роликов Youtube

В ubuntu есть консольная утилита youtube-dl, для загрузки роликов из Youtube.

$ sudo apt-get install youtube-dl

Утилиту можно использовать только на настольном (Desktop) компьютере с графическим интерфейсом, т.к. она тянет за собой много зависимостей и X11.


Скачивание списка воспроизведения в HD-формате

Вот например, плейлист группы Ленинград:
http://www.youtube.com/watch?v=h7xDfqSAdh0&list=PLnW5IBv8h5aB2db7Q4oBDiCs6te-pPWt8

Задача сохранять максимального качества ролик из  youtube,


$ youtube-dl --max-quality 22 http://www.youtube.com/watch?v=kp8PmgPW_AI&list=PLnW5IBv8h5aBYwFSq7KcuruWHvDdl0Wy7

Что нужно добавить в Cron, либо скрипт.

※※※

Ресурсы


1. Youtube-dl. http://youtube-dl.org/
2. Описание форматов Youtube. https://en.wikipedia.org/wiki/YouTube#Quality_and_formats
3. Группа Ленинград на youtube. http://www.youtube.com/user/shnur0k


※※※

воскресенье, 14 декабря 2014 г.

Script. Другой взгляд на терминологию.

Заметка, молпригодная, но позволяет мне не держать в памяти "корявые" имена программ.


Тут решил немного исказиться, заменить импортную терминологию, на русские слова.

Терминология

"приспособа"   - утилита
"подручный"    - менеждер
"письменъ"     - информация
"письмено"     - файл
"хитропись"    - программа
"хитропсьмена"    - мн. программы

Устанавливаемые пакеты системных и прикладных хитрописьмен.

gdisk - приспособа GPT разметки жёсткого диска.
testdisk - приспособа восстановление письмен с жёсткого диска
fio - приспособа многостороннего оценки жёстких дисков
apt-mirror - приспособа создания местного схрона пакетов хитрописьмен.


tmux - приспособа собора устройств взаимодействия с хозяином.
multitail - утилита, аналог tail, но для нескольких письмен.
mc - двухсторонний письменовой подручный.
tree - вывод дерева каталогов.

awesome - оконный подручный, для X Window.

inotify-tools - приспособы отслеживания событий с письменами
incron - приспособа отслеживания событий с письменами

xorriso - приспособа для создания образов оптических дисков и для непосредственного взаимодействия с ними.

udftools - приспособы для работы с образами синелучных японских оптических дисков

htop - расширенная версия top, показывает что происходит в утробе.
iftop - приспособа показывает загрузку канала в сеть
iotop - приспособа показывает загрузку ввода-вывода
sntop - приспособа оценки жизни узлов в сети
ntop - приспособа
nethogs - приспособа расписывает о том, какая хитропись обменивается сведениями с узлами сети, по своей воли, али по приказу хозяина.








вторник, 9 декабря 2014 г.

CSV to XML в командной строке Ubuntu

Достаточно быстрый и простой способ преобразования данных CSV файла в XML, в командной строке Ubuntu возможен с помощью программы Flat File Extractor.

$ sudo apt-get install ffe

Основу простого преобразования данных CSV to XML, составляет схема сопоставления полей, которая задается в конфигурационном файле csv2xml.fferc.

Пример: дан csv-файл pinout.csv из двух полей (номер вывода и его функция) разделённых точкой с запятой.

structure csv2xml {
    type separated ;
    output xml
    record data {
        field pin
        field func
    }
}

output xml {
    file_header "<?xml version=\"1.0\" encoding=\"OTF-8\"?>\n"
    data "<%n>%t</%n>\n"
    record_header "<%r>\n"
    record_trailer "</%r>\n"
    indent " "
}


$ ffe -o pinout.xml -c csv2xml.fferc -s csv2xml pinout.csv
получиться, что-то в этом роде:
...
<data>
 <pin>PA0</pin>
  <func>DATA0</func>
</data>
<data>
 <pin>PA1</pin>
  <func>DATA1</func>
</data>
...

Полученный файл уже можно обрабатывать автоматически XSLT процессором.
$ xsltproc template.xsl pinout.xml -o result.xml


Примечание: как задать табуляцию в виде разделителя, у меня не получилось, поэтому csv-файл с табуляциями (символ \t) был преобразован в файл с разделителями - точка с запятой.

cat pinoutsrc.csv | cut -f 1,8 --output-delimiter=';' > pinout.csv


※※※

Ресурсы


2. Flat file extractor. http://ff-extractor.sourceforge.net/
※※※

воскресенье, 1 июня 2014 г.

Nginx, OwnCloud, Pydio, Bittorrent tracker. Доступ и распространение авторских материалов альтернативным способом

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

Во первых, это должен быть не домашний настольный компьютер. Хотя я сплошь и рядом это нарушаю.
Во вторых, это должен быть тихий, малопотребляющий и компактный компьютер, чтобы он мог  работать 24 часа в сутки, с минимальным вмешательством.
В третьих, это должен быть компьютер под управлением Linux.
В четвертых, он должен позволять удалённое управление, должен работать без клавиатуры и мыши, без монитора. Восстанавливаться и загружаться после потери питания.
В пятых, он должен иметь постоянное подключение к сети Интернет.
В шестых, должен поддерживать ftp,web-сервера, подключение webdav, ssh ftps, https, rsync, bittorrent и пр.

Я подобрал небольшие предварительные конфигурации для домашнего облака, которая возможно будет отвечать этим требованиям на сегодняшний момент (Май 2014 года).

1. Intel NUC (с процессором Celeron), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
2. Pegatrom Mercury L6 (с процессором Celeron, пассивное охлаждение), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
3. Сетевой жесткий диск WD Cloud, с модифицированной прошивкой.

Конфигурации начальные, обеспечивают цену домашнему облаку менее 11 тыс. руб.
И при текущей стоимости интернет-подключения ~450 руб./мес. 5500 руб. в год.
Если сравнить стоимость со стоимостью облачного хранения, например в Google за 120$ за терабайт, то возникают некоторые вопросы. Однако, домашнее, непосредственно доступное облако с некоторых позиций выглядит предпочтительнее.


Установка и настройка web-сервера nginx


Nginx - известный кэширующий веб-сервер.
Веб-сервер занимается тем, что отдает файлы с сервера, по протоколу http/https клиенту.

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

В Ubuntu 14.04 он идёт в пакетах,

$ sudo apt-get install nginx
либо
$ sudo apt-get install nginx-extras

Последний пакет, нужен если будет (а он будет, удобно) использоваться протокол webdav на сервере, для каких-то иных целей. В ownCloud встроен собственный webdav, так что системный не задействуется, как я понимаю.
Но у меня заработало более менее с nginx-extras


Основной конфигурационный файл web-сервера nginx: /etc/nginx/nginx.conf

Конфигурация сайта по умолчанию, сразу после установки: /etc/nginx/sites-enabled/default,
/etc/nginx/sites-enabled - это ссылки на конфигурации сайтов которые будет работать после запуска сервиса nginx
/etc/nginx/sites-available - это конфигурации сайтов, как работающих так и в процессе настройки и конфигурирования (неработающих).


Сайт по-умолчанию, после установки работает на 80 порту и содержит приветствие nginx.

Просмотреть его можно по ссылке: http://localhost/


Пользователь добавленный в систему: www-data

Простейшая документация по web-серверу и его конфигурационному файлу: http://nginx.com/resources/admin-guide/web-server/


Теперь надо определиться с месторасположением (location) файлов web-сервера в локальной файловой системе компьютера.

Пусть это будет /srv/www
Создадим /srv/www и установим пользователя www-data у этого каталога.

# mkdir /srv/www
# chown -R www-data:www-data /srv/www

Сюда (в /srv/www) можно скопировать index.html файл из начального примера.

http://localhost/index.html


※※※


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


autogen - генератор текстовых файлов по шаблону.
ntp - сервис "сетевая служба времени", понадобиться, видимо при синхронизации файлов между клиентами owncloud.
clamav - антивирусная проверка файлов.

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

※※※


Установка PHP5


PHP5 - дедушка Интернета. Использовался с очень древних пор. Но всё ещё продолжает использоваться. Кому-то нравиться.

Поиск пакетов в репозитории:
apt-cache search php5
apt-cache search php



Общий список устанавливаемых пакетов:

$ sudo apt-get install php5 php5-cgi php5-cli php5-common php-pear php5-fpm php5-mysqlnd php5-pgsql php5-sqlite php5-ldap php-xml-parserphp5-curl php5-dev php5-gd php5-imagick php5-intl php5-mcrypt

Базовая система
php5 - метапакет серверной части.
php5-cgi отдельный пакет, обеспечивающий связь Common Gateway Interface c php.
php5-cli
php5-common

php-pear

Отдельные модули php5

php5-fpm - PHP-FPM демон для запуска FastCGI сервера, для обработка php-программ.

php5-mysqlnd - родной пакет для поддержки связи php и субд mysql
php5-pgsql - пакет для поддержки связи php и субд postgresql
php5-sqlite - пакет для поддержки связи php и субд sqlite

php5-ldap - пакет для поддеркжи связи php и LDAP-серверов
php-apc - пакет для оптимизатора
php5-apc - если найдётся в пакетах

php-xml-parserphp5-curl
php5-dev
php5-gd
php5-imagick - поддерка связи php и imagick - утилиты и библиотеки обработки графических файлов
php5-intl - интернационализация
php5-mcrypt - поддержка какого-то кодирования


Конфигурационные файлы:
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini

В этих файлах надо настроить ограничения (снять) на размер загружаемого файла (обычное 2 Мб).

Установим максимальный размер загружаемого файла (пусть это будет архив, видео, резервный файл и т.п)

upload_max_filesize = 16G

Также приведём в соответствие максимальный размер POST-запроса, передаваемого серверу
post_max_size = 16G
Объём памяти выделяемый под загружаемый файл, пусть будет больше загружаемого файла, чтобы с запасом.
Единственное что, сложно - это размер памяти сервера, он достаточно мал, будет использоваться подкачка.

memory_limit = 20G

Плюс над протестировать в реальных условиях, а то может получить не очень хорошо.

Ещё кое что надо сделать в этих файлах (/etc/php5/fpm/php.ini):
cgi.fix_pathinfo=0

После внесения изменений перезапустить php5-fpm:
# service php5-fpm restart


Долго не мог понять, почему не изменяется размер возможного загружаемое файла в ownCloud, вроде все опции настроил по инструкции, перезапускал и сервер и php-rpm. Решение оказалось банальным - перезапустить компьютер. Что-то, где-то, видимо было недообновлено.

※※※

Опционально. Установка СУБД mySQL 


Для домашнего использования, совсем необязательно использовать mysql сервер и настраивать его. Достаточно использовать sqlite3.

# apt-get install mysql-server mysql-client


Настройку mysql, но я выбираю postgresql приведу возможно позже, в рамках другой заметки.

※※※

Подготовка и установка цифровых сертификатов подлинности сервера


Самоподписанные сертификаты позволяют без затрат денег, установить "заглушку" в протокол https, т.е. всё будет почти также работать как с настоящими сертификатами, но только при открытии сайта (в данном случае облака) обычные браузеры будут сообщать о риске и недоверенном узле. Тут надо будет добавить в список исключений этот сертификат облака и тогда на это можно будет не обращать внимания. Разве только красным цветом выделение надписи https будет "напрягать".

В результате мы должны получить 2 файла:

microserver.key - частный (приватный) ключ
microserver.crt - самоподписанный сертификат виртуального сервера

Инструкцию с описанием шагов по генерации самоподписанных сертификатов можно посмотреть на ресурсе [8].

Здесь просто последовательность команд, выполнение которых обеспечит достижение цели данного руководства.

openssl genrsa -des3 -out microserver.key 2048
openssl rsa -in microserver.key -out microserver.key.insecure
mv microserver.key microserver.key.secure
mv microserver.key.insecure microserver.key
openssl req -new -key microserver.key -out microserver.csr
openssl x509 -req -days 365 -in microserver.csr -signkey microserver.key -out microserver.crt


Скопировать их в хранилище сертификатов и ключей.
sudo cp microserver.crt /etc/ssl/certs
sudo cp microserver.key /etc/ssl/private

Пути к этим файлам, будут позже прописаны в конфигурации виртуального хоста nginx, чтобы сервер мог осуществлять https-соединения.
※※※

Подготовка к установке ownCloud

Для установки ownCloud в Ubuntu 14.04, проще всего подключить репозиторий, c сайта проекта[11]:

$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key 
$ sudo apt-key add - < Release.key
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list" 
$ sudo apt-get update 
$ sudo apt-get install owncloud

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

Может потребоваться деинсталляция пакета apache2, т.к. здесь используется nginx.


Облако будет установлено в стандартную папку сайтов: /var/www, под именем owncloud.

Конфигурационный файл облака: /var/www/owncloud/config/config.php

Важная опция trusted_domain, она отвечает за домены с которых будут подключения. Важна, при выводе облака в общую сеть Интернет.

Для начала, лучше подготовить каталог, папку, том(volume), точку монтирования, которая будет выступать в качестве хранилища данных для собственного облака.
Очень часто, хранилище располагается на томе lvm, что даёт некоторые гибкие возможности по увеличению места, но я исповедую иной подход, т.к. увеличение места может закончиться неудачно, а данные огромны и просто так их не зарезервируешь.




Если этого не сделать, то данные будут храниться в папке по умолчанию: /var/www/owncloud/data, что не всегда безопасно, т.к. грозит удалением, при обновлении сервиса.

※※※

Настройка безопасного подключения к облаку ownCloud


"Безопасное подключение" - это использование протокола http поверх (внутри) ssl/tls, с ассиметричным шифрованием данных.


Теперь надо настроить виртуальный www-сервер (vhost nginx) на использование owncloud.
Для начала:
Доменное имя, по которому облако будет доступно: my.domain.name
В частных случаях, это может быть динамическое доменное имя (от сервисов подобных twodns, dyndns).
Если облако доступно только в домашней сети - что не имеет особого смысла, то это может быть avahi-домен, либо IP-адрес внутренней сети.
Т.е. если набрать в браузере https://my.domain.name/, то мы должны попасть на страницу регистрации (login).
Обычно, обычные пользователи используют какой-либо маршрутизатор, которые и принимает белый ip-адрес от провайдера, а остальным домашним клиентам выдаёт "серые" из диапазона неподключенных сетей.
В этом случае, надо делать проброс портов на роутере, регистрацию динамического доменного имени (например  twodns), чтобы таки получить возможность в строке браузера набрать https://my.domain.name/.

Также стоит заметить, что многие провайдеры фильтруют порты до 1024 от внешних обращений, тогда надо порт на котором будет слушать сервер, сдвинуть вверх, например 12443 и при указании адреса в строке указывать и порт: https://my.domain.name:12443/
На время тестирования к серверу можно обращаться по localhost,ip-адресу и пр.



# Виртуальный сервер "Персональное облако"
# сервер: микросервер
# дата: 29.05.2014
server {
       listen 443 ssl;
       listen 80 default_server;
       server_name default 'my.domain.name' '192.168.1.11';
       

       # Корень сайта - корень облака
       root /var/www/owncloud;

#       if ($http_host != "my.domain.name") {
#                 rewrite ^ http://my.domain.name$request_uri permanent;
#       }

       index index.php index.html;


       # Иконка сайта, отображаемая в адресной строке
       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }

       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }

       # Запрет доступа к скрытым файлам .htaccess, .htpasswd.
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }
       

       # Самоподписанный сертификат и частный незапароленный ключ сервера
       ssl_certificate /etc/ssl/certs/microserver.crt;
       ssl_certificate_key /etc/ssl/private/
microserver.key;


        client_max_body_size 16G; # set max upload size

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
        rewrite ^/apps/calendar/caldav.php /remote.php/caldav/ last;
        rewrite ^/apps/contacts/carddav.php /remote.php/carddav/ last;
        rewrite ^/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&getfile=$2 last;
        rewrite ^/remote/(.*) /remote.php last;

        
        # Страницы ошибок
        error_page 403 = /core/templates/403.php;
        error_page 404 = /core/templates/404.php;





        # Запрет доступа к системным файлам облака ownCloud
        location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                        deny all;
        }

        location / {
                        rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                        rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                        rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                        rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                        rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                        try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                        try_files $1 =404;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$1;
                        fastcgi_param PATH_INFO $2;
                        fastcgi_param HTTPS $https;
                        # fastcgi_pass unix:/var/run/php5-fpm.sock;
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_intercept_errors on;
                        fastcgi_index index.php;
                        fastcgi_buffers 64 4K;
        }

        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                        expires 30d;
                        access_log off;
        }
}

Этим файлом можно (либо надо) заменить файл default расположенный в /etc/nginx/site-available/.

Также этот файл (и другие) включается в общую конфигурацию сервера nginx посредством директивы include в файле: /etc/nginx/nginx.conf .



У облака ownCloud есть конфигурационный файл, которые тоже требует внимания пользователя на момент установки.
Располагается в ownCloud/config/config.php

На начальном этапе установки, нас в нём будет интересовать опция trusted_domain - которая укажет какие домены облака доверенные. Будет это полное имя т.н. FQDN, либо просто внутренний ip-адрес, либо и то и другое.

Выглядит он так:

$ cat /var/www/owncloud/config/config.php

<?php
$CONFIG = array (
  'instanceid' => 'oc2344a23abc',
  'passwordsalt' => 'ab1137423168fd7c2a6223a6b520b',
  'trusted_domain' =>
  array (
    0 => 'localhost:443', 1 => 'mir.local:443', 2 => 'my.domain.name:443'
  ),

  'datadirectory' => '/mnt/oblako',
  'dbtype' => 'sqlite3',
  'version' => '6.0.3.1',
  'installed' => true,
  'allowZipDownload' => false,
);

Тут видно и точку монтирования заданную при установке облака - /mnt/oblako. Это отдельный том, общим объёмом около 50Гб.

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




Из недостатков системы (точнее интеграции её в систему) - это то, что хранение данных, ведётся из под пользователя www-data и сложно пополнять базу документов и пр., с помощью простого файлового менеджера. После загрузки файлов с помощью файлового менеджера, из консоли, надо обязательно изменить права владельца, со своих на www-data, либо использовать webdav подключение, либо монтировать файловую систему webdav. В этих случаях, действия с файлами, практически не отличаются от обычных, за исключением временных задержек. Со временем, тут главное терпение и ожидание завершения предыдущих операций.


※※※

Pydio и Nginx


Pydio - Put your data in orbit - ещё одна облачная система, которая может быть использована для целей домашнего облака.

Устанавливается тоже с некоторыми сложностями, но в части раздела PHP5 (уже установленного) почти совпадает с ownCloud.

Надо скачать установочный архив [6] и развернуть (разархивировать) его в каталог который будет использоваться под этот проект (сам проект, не данные). Настроить первоначальные права.
Пусть это будет /var/www/pydio

У меня это происходит так, под суперпользователем (root):

# unzip /home/gimmor/Загрузки/pydio-core-5.2.3.zip
# mv pydio-core-5.2.3 /var/www/pydio
# chown -R www-data /var/www/pydio



Далее, настройка конфигурации сервере nginx для использования pydio
За основу возьмём файл с ресурса [7] и подправим для своих условий.

server {
    Сервер pydio временно будет сервером по-умолчанию
    listen 80 default_server;

    Сервер будет принимать безопасные соединения на 443 порту.
    listen 443 ssl;
    # Доменное имя, под которым сервер будет доступен
    server_name localhost 'pydio.local' '192.168.5.37';


    # Самоподписанный сертификат для виртуального сервера pydio и частный ключ
    ssl_certificate     /etc/ssl/certs/pydio-server.crt;
    ssl_certificate_key /etc/ssl/private/pydio-server.key;
    # Корень сервера, его месторасположение
    root /var/www/pydio;
    # Кодировка сервера по-умолчанию
    charset utf-8;
    # Главный индексный файл корня сервера
    index index.php;

    
    # Если мы пытаемся зайти по 80 порту, то будем перенаправлены
    # Это заглушка временна, пока сервера окончательно не будут настроены
    # Вполне возможно, что на 80 порту будет висеть какая-либо страница
    if ($server_port = 80) {
        rewrite ^ https://$host$request_uri permanent;
    }

    client_max_body_size 1G;

    # Журнал доступа
    access_log /var/log/nginx/pydio.access.log;
    # Журнал ошибок

    error_log /var/log/nginx/pydio.error.log;




    # Месторасположение
    location / {
    }


    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location = /conf/       { deny all; }
    location = /data/       { deny all; }

    # robots.txt определяет права для роботов индексаторов
    location = /robots.txt  { access_log off; log_not_found off; }

    # brj
    location = /favicon.ico { access_log off; log_not_found off; }
    location ~ /\.          { access_log off; log_not_found off; deny all; }
    location ~ ~$           { access_log off; log_not_found off; deny all; }


    # Некоторые настройки fastcgi для обработки php-файлов
    location ~ \.php {
        try_files $uri =404;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $request_filename;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
    }
}




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


Существует противоречивое требование к php5-fpm от pydio и от ownCloud.
Pydio требует выключенной опции output_buffering = Off , ownCloud - включенной.


Исправление бага php5 ubuntu с отключенным модулем mcrypt:

ln -s /etc/php5/mods-available/mcrypt.ini  /etc/php5/fpm/conf.d/20-mcrypt.ini


Исправление проблем безопасности файлов. Разграничение доступа

Здесь надо помнить, что при копировании файлов на веб-сервер, потом требуется задать владельца, т.к. часто владельцем оказывается root, что запрещает доступ к файлам.

Nginx обеспечивает запрещение доступа к отдельным каталогам (месторасположениям, location) веб-сервера, посредством директивы deny all в настройках конкретного виртуального сервера.
Например:

location /onlymyfiles {
 deny all;
}




Peertracker - bittorrent tracker


Peertracker - простейший трекер торрентов, который может быть установлен на собственный домашний компьютер и выступать в виде персонального трекера, посредством которого распространяются авторские (собственные) материалы. Т.е. статьи, изображения, скрипты, какие-то иные данные.

Устанавливается, как и любое веб-приложение, с некоторыми ручными операциями.

Для простейшего случая, домашнего трекера для небольшого количества файлов подойдет база данных sqllite3. Так что всех делов - это скопировать дистрибутив в папку сервера, создать конфигурацию nginx для этого сервера.

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

С технологической точки зрения, Трекер это сервисная программа обслуживающая специфические HTTP/HTTPS GET-запросы, которые
определены спецификацией протокола Bittorrent.


Для распространения собственных материалов, можно использовать посредника OpenBittorrent и его открытый (без регистрации и пр.) url.

http://tracker.openbittorrent.com:80/announce

При создании своего публично доступного торрент-файла, надо в списке трекеров указать http://tracker.openbittorrent.com:80/announce . Всё остальное сделает торрент-клиент. Пользователь полученного торрент-файла также может начать загрузку по получении торрент-файла.
Иногда, этот трекер часто оказывается единственно доступным, в списке торрент-трекеров, указанных в файле.

Для улучшения передачи файлов, надо стремиться исключить трекер, как посредника. Вполне рабочим способом является magnet-ссылка, которая даёт возможность не использовать трекер. Но у неё возникает другой посредник - распределённая хэш-таблица DHT.
Магнет-ссылка хороша тем, что её содержимое может передаваться в текстовой форме и отпадает необходимость создания торрент-файла (хотя торрент-клиенты делают это неявно).

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

※※※

Ресурсы


1. Официальный сайт ownCloud. http://owncloud.org/
2. Официальный сайт nginx. http://nginx.org/ru/
3. Сайт по языку PHP5. http://www.php5.ru/
4. Официальный сайт Pydio. https://pydio.com/
5. Сайт сообщества Pydio. http://pyd.io/
6. Загрузка Pydio. http://pyd.io/download/

7. http://pyd.io/nginx/

8. Сертификаты: http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/certificates

9. Свободный трекер Openbittorrent: http://openbittorrent.com/
10. Установка ownCloud. http://doc.owncloud.org/server/6.0/admin_manual/installation/installation_source.html

11. Подготовленные репозитории для дистрибутивов Linux. http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud

Ресурсы простым списком, использованные при поднятии сервера.
http://habrahabr.ru/post/208566/
http://habrahabr.ru/post/160237/
http://habrahabr.ru/post/154047/
http://habrahabr.ru/company/selectel/blog/213945/

http://www.php5.ru/study/webbasics
http://martin-denizet.com/nginx-configuration-for-pydio-with-ssl/

http://blackbe.lt/setting-up-utf-8-encoding-in-php-and-mysql/
Свой WebDAV сервер на nginx. http://xandroskin.ru/it/svoj-webdav-server-na-nginx/495
Обработка регулярок в nginx. http://xandroskin.ru/it/obrabotka-regulyarok-v-nginx/597

http://vds-admin.ru/nginx/nastroika-svyazki-nginx-apache-fastcgi


※※※