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

Извлечение аудио из видео-файла в Ubuntu

Часто в фильмах звучат замечательные музыкальные произведения, которые не всегда удается найти отдельно. Единственный выход в этом случае - извлечь звук самостоятельно. Те, кто предпочитает работать через графический интерфейс, могут попробовать использовать для этого программу avidemux. Мне же показалось, что гораздо проще работать через командную строку. Для этого используем ffmpeg:
ffmpeg -i input.mkv -map 0:2 -vn -ss 00:24:13 -t 00:00:39 -acodec libmp3lame -ab 320k -ac 2 output.mp3

Здесь
  • input.mkv - видео файл из которого извлекается звуковая дорожка;
  • -map 0:2 - указывает на номер аудио-трека, если в видео-файле только одна звуковая дорожка, то этот параметр можно опустить, в случае, когда в файле несколько звуковых дорожек, вы можете посмотреть номера дорожек с помощью команды:
  • ffmpeg -i input.mkv
    и вот пример вывода этой команды (номера дорожек выделены жирным шрифтом):
    Stream #0:1(rus): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s (default)
    Metadata:
    title : AC3 5.1 @ 448 kbps - DUB, Blu-ray
    Stream #0:2(ukr): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s
    Metadata:
    title : AC3 5.1 @ 448 kbps - DUB, Blu-ray
    Stream #0:3(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s
    Metadata:
    title : DTS 5.1 @ 1536 kbps - AVO, Y.Serbin
    Stream #0:4(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s
    Metadata:
    title : DTS 5.1 @ 1536 kbps

  • -vn означает, что видео извлекать не нужно;

  • -ss 00:24:13 указывает начальный момент времени, а параметр -t 00:00:39 - длительность;

  • -acodec libmp3lame определяет используемы аудокодек;

  • -ab 320k - битрейт;

  • -ac 2 - число каналв (1 - моно, 2 - стерео);

  • output.mp3 - имя полученного аудио-файла.

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

Как вырезать отрывок из видео в Ubuntu

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

ffmpeg -i input.mkv -vcodec copy -acodec copy -ss 00:59:03 -t 00:01:45 output.avi

Но он почему-то не сработал, а именно наблюдалась сильная рассинхронизация звука и видео, возможно потому, что исходное видео находилось в контейнере mkv и для правильного перекодирования в avi нужно было в явном виде указывать параметры перекодирования. Не получилось перекодировать на в mpg ни в mp4. К счастью, нашлась заготовка с настройками правильного перекодирования в mp4:

ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4

Я добавил параметры, указывающие с какого момента времени нужно вырезать видео: -ss 00:59:13, а так же длительность отрезка: -t 00:03:47 и клип получился как надо.

ffmpeg -ss 00:59:13 -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -t 00:03:47 output.mp4

Кстати, обратите внимание, что параметр -ss 00:59:13 указан перед флагом -i. В этом случае, ffmpeg не декодирует видео до нужного участка, а просто перематывает, поэтому в этом случае вся операция занимает гораздо меньше времени. Однако, при этом могут возникнуть ошибки с позиционированием и в этом случае можно попробовать поставить параметр -ss после -i, например вот так:

ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -ss 00:59:13 -t 00:03:47 output.mp4

Однако в моем случае это делать не понадобилось. Неудобно только, что нельзя сразу указать момент времени окончания отрезка и приходится вручную подсчитывать длительность.

вторник, 27 августа 2013 г.

Установка поддержки python в kdevelop

Несколько месяцев назад с большим геморроем удалось установить Kdevelop с поддержкой моего любимого языка программирования: Python. Сегодня что-то перемудрил с репозиториями и для исправления зависимостей пришлось сносить все пакеты связанные с KDE. Затем пришлось мучительно вспоминать как же я устанавливал Kdevelop и снова шерстить интернет. Вот простой вариант, который сработал:

Нужно добавить два репозитория:

http://ppa.launchpad.net/kxstudio-team/kxstudio-kde49/ubuntu
http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu

Затем установить пакет: kdevelop-python и обязательно обновить не только kdevelop, но и редактор kate.

понедельник, 29 апреля 2013 г.

Секреты настройки Firefox

Для себя давно собираю рецепты настройки Firefox, сегодня решил, что пора начинать их понемногу выкладывать в сеть


Отключение Push уведомлений для всех сайтов:

Речь идет о том, когда в новых версиях Firefox (начиная с 44) при загрузке многих сайтов стало появляться уведомление типа Would you like to receive notifications from the site... Каждый раз отвечать - "нет" слегка надоедает. Для решения этой проблемы нужно ввести в адресную строку: about:config, найти параметр
dom.webnotifications.enabled и изменить его значение на false.

Вывод информации о настройках Firefox

Ввести в адресную строку:
about:support

Вывод диагностической информации Firefox

Работает для Firefox 21 и выше. Ввести в адресную строку:
about:healthreport

Отключения перекодирования кириллических адресов web-страниц

При копировании адресов из адресной строки firefox и вставке, в текстовый файл, вместо, например https://ru.wikipedia.org/wiki/Браузер, можем получить https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80. Чтобы этого не происходило нужно ввести в адресную строку: about:config, найти параметр
network.standard-url.escape-utf8 и изменить его значение на false.

Ускорение прокрутки страницы колесом мышки в Firefox


Изменяется посредством настройки через about:config (нужно ввести это в адресной строке браузера, нажать Enter и согласится с тем, что вы будете осторожны)

firefox about:config

Ранее нужно было изменить настройки
mousewheel.withnokey.sysnumlines (установить False)
mousewheel.withnokey.numlines (установить больше 6)

Начиная с версии Firefox 17 этот рецепт не действует и нужно изменить следующие настройки:

mousewheel.system_scroll_override_on_root_content.enabled (установить enabled)
mousewheel.system_scroll_override_on_root_content.vertical.factor (установить выше 200)

Чистка и переиндексация базы данных Firefox

Может понадобится, если Firefox тормозит больше обычного.
Для выполнения запускаем в терминале:
find ~/.mozilla/firefox/ -name *.sqlite -exec sqlite3 {} "VACUUM; REINDEX" \;
Если будет ругаться: find: `sqlite3': No such file or directory значит нужно предварительно установить sqlite3:
sudo apt-get install sqlite3
Скрипт чистки и индексации можно добавить в задания CRON с автозапуском раз в месяц. Для того, чтобы были обработаны все базы, нужно запускать, когда Firefox закрыт.

Репозиторий с последними версиями Firefox


Для добавления репозитория нужно выполнить следующие команды в терминале:
sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa 
sudo apt-get update

Ранее также был отдельный репозиторий для стабильных релизов ppa:mozillateam/firefox-stable, но, к сожалению, его не так давно прикрыли. Напишите в комментариях известные вам репозитории со стабильными релизами.

Открытие ссылок из Thunderbird в фоновом режиме


Для того, чтобы ссылки из Thunderbird открывались в фоновом режиме, нужно через about:config изменить следующую настройку: browser.tabs.loadDivertedInBackground (установить True). В новых версиях Firefox этот метод перестал срабатывать.

Исправление пустого окна расширений Firefox


Недавно, после сбоя что-то сломалось в Firefox и перестали работать некоторые расширения, а во вкладке расширений вообще пусто. В сети встречал советы попытаться повторно установить одно из расширений, но мне не помогло. Проблему удалось решить запустив Firefox с отключенными расширениями (меню Help->Restart with Add-ones disabled и обновления приложений в таком режиме). После перезагрузки в обычный режим все работало как надо.

Самовосстанавливающийся Ramdisk для Ubuntu

RamdiskRamdisk-ом называют разделы, которые постоянно находятся в оперативной памяти. Скорость обмена данными с таким дисками намного быстрее по сравнению с разделами на жестком диске. Переместив на такой раздел часто обновляемые данные, можно существенно увеличить производительность. Однако, создавать такой раздел стоит только, если у вас оперативной памяти много (4-8 Гб и выше). Основным недостатком разделов в оперативной памяти является то, что информация, сохраняется только при включенном питании компьютера. Есть простые способы создания таких дисков, однако я приведу здесь более сложный вариант, который включает сохранение информации перед выключением или перезагрузкой компьютера и автоматическое восстановление при включении.

Приступим

1. Создаем две директории:
mkdir ~/.ramdisk
mkdir ~/.ramdisk-archive

В первую нужно будет переместить (а не копировать) все, что будет хранится на Ramdisk, например, я перенес туда всю директорию ~/.mozilla/firefox. Предварительно обязательно следует создать резервные копии переносимых файлов и директорий.

2. Прописываем раздел в fstab
sudo gedit /etc/fstab

И дописываем в конец строчку
tmpfs /home/user/.ramdisk tmpfs defaults,mode=1777 0 0

3. При перезагрузке все данные из Ramdisk будут исчезать, поэтому при включении нужно заново записывать в память данные из архива ~/.ramdisk-archive. Для этого нужно отредактировать файл /etc/init.d/rc.local (а не before.local как пишут на некоторых сайтах).
sudo gedit /etc/init.d/rc.local
и добавить в начало файла строчку
rsync -a /home/user/.ramdisk-archive/ /home/user/.ramdisk

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

Открываем для редактирования файл:
sudo gedit /etc/init.d/ramdisk-sync-shutdown
записываем в него следующее:
#!/bin/sh
rsync -a /home/user/.ramdisk/ /home/user/.ramdisk-archive
exit 0
Добавляем права на его исполнение:
sudo chmod +x /etc/init.d/ramdisk-sync-shutdown

Теперь в директориях  
  • /etc/rc0.d  
  • /etc/rc1.d 
  • /etc/rc6.d 
размещаем символические ссылки S00ramdisk-sync-shutdown на файл ramdisk-sync-shutdown.

Благодаря этому, при выключении или перезагрузке содержимое Ramdisk будет сохранено на жестком диске.

5. Для страховки можно периодически создавать резервные копии каждые 2 часа (частота зависит от ценности ваших данных и стабильности электропитания):
crontab 1 */2 * * * rsync -a ~/.ramdisk/ ~/.ramdisk-archive

Чтобы Ramdisk начал работать нужно перезагрузиться или выполнить
sudo umount -a
sudo mount -a

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


1. Вывод списка всех смонтированны временных файловых систем:
grep -w tmpfs /proc/mounts

2. Проверка того, сколько они занимают места:
df -h | grep tmpfs

3. Проверка свободной памяти:
free -m

Полезные ссылки:
Виртуальный диск в памяти: как создать ramdisk в Linux?
Создание своего скрипта автозапуска при загрузке компьютера

пятница, 12 апреля 2013 г.

Ускоряем интернет в Ubuntu - настройка pdnsd

Как известно, скорость загрузки страниц зависит не только от ширины канала, который предоставляет вам ваш интернет-провайдер, но и от такого важного параметра как время задержки (Латентность или Latency). Не буду об этом долго распространятся, замечу только, что из-за наличия задержки при увеличении полосы пропускания вашего интернет-канала с 5 Мб/с до 10 Мб/с скорость загрузки может увеличится всего на 5%, что красноречиво демонстрируют следующие графики:


Отчасти проблему с задержками может решить кэширование запросов к DNS. Для этих целей в Ubuntu есть несколько пакетов:
  • dnsmasqd - начиная с версии Ubuntu 12.04 установлен по умолчанию, кэш держит только в памяти, поэтому хранит адреса только до первой перезагрузки
  • bind - подходит для больших сложных систем, не очень быстрый
  • pdnsd - легкий в настройке и быстрый - его мы и будем устанавливать
  • unbound - пока не пробовал

Установка pdnsd
sudo apt-get install pdnsd

Запуск
sudo service pdnsd start

Настройка многократно описывалась на разных сайтах, см. например Делаем свой локальный DNS (PDNSD), с блэкджеком и быстрее Google Public DNS.

Я же сосредоточусь на возможных проблемах

Во-первых после установки вы можете получить сообщение типа:

Not starting pdnsd (disabled in /etc/default/pdnsd)

Открываем в редакторе файл с настройками:

gksu gedit /etc/default/pdnsd

и добавляем или изменяем соответствующую строчку так, чтобы было прописано
START_DAEMON=yes

Далее, проверку состояния pdnsd можно выполнить с помощью следующей команды:
sudo pdnsd-ctl status

при этом я получил следующую ошибку:
Error: could not open socket /var/cache/pdnsd/pdnsd.status: No such file or directory

Решение

Во-первых пробуете вручную запустить pdnsd
sudo service pdnsd stop
sudo pdnsd

и по результату определяем в чем именно проблема. Например, в моем случае было вот что:

* 04/09 01:54:22| pdnsd: error: Could not bind tcp socket: Address already in use
* 04/09 01:54:22| pdnsd: error: Could not bind to udp socket: Address already in use
* 04/09 01:54:22| pdnsd: error: tcp and udp initialization failed. Exiting.

Дальше ищем что пишут об этой ошибке в интернете. Одной из причин может быть то, что порт с которым по-умолчанию работает pdnsd, может быть занят. Чтобы это проверить выполняем:
sudo netstat -lpn | grep 127.0.0.1:53
получаем:

tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3453/dnsmasq
udp 0 0 127.0.0.1:53 0.0.0.0:* 3453/dnsmasq

откуда видно, что порт 53 уже занял демон dnsmasq.

Для того, чтобы освободить порт, редактируем NetworkManager.conf
sudo gedit /etc/NetworkManager/NetworkManager.conf

и закомментируем строчку
dns=dnsmasq
следующим образом
#dns=dnsmasq

Сохраняем файл и перезагружаем network-manager
sudo service restart network-manager

И снова запускаем pdnsd
sudo service pdnsd start

для проверки времени обработки запроса к dns можно использовать команду dig
dig @127.0.0.1 ubuntu-forward.blogspot.com | grep "Query time"
Query time: 55 msec

повторный запрос выполняется почти мгновенно:
Query time: 0 msec

Для того, чтобы все запросы с вашего компьютера направлялись через pdns, в настройках подключения network-manager нужно в графе
DNS Servers указать 127.0.0.1

И снова проверить работу pdnsd уже без указания какой именно сервер использовать
dig ubuntu-forward.blogspot.com | grep "Query time"
Query time: 0 msec

Для проверки реальной скорости работы pdnsd в рабочих условиях можно использовать namebench.

Популярные сообщения