воскресенье, 8 апреля 2012 г.

Делаем скриншоты с помощью программ ffmpeg и mplayer

FFmpeg

ffmpeg -i input.avi -f image2 -vframes 1 output.png

Поменяйте расширение выходного файла на .jpg и получите скрин в
формате JPEG. Получить скриншот с заданной позиции можно с помощью опции -ss:

ffmpeg -i input.avi -f image2 -vframes 1 -ss 20 output.jpg

В этом случае ffmpeg промотает 20 секунд от начала фильма и уже потом снимет скрин. Это
медленно.
Примечание:Опция -ss как в mplayer, так и в ffmpeg может принимать свой аргумент как в виде целого числа секунд, так и в формате времени — ЧЧ:ММ:СС.Д
Опция -vframes контролирует кол-во кодируемых фреймов. Если вам надо снять несколько
скринов, вам понадобится задать кол-во фреймов, а также задать формат имени выходных
файлов вместо указания имени конкретного файла.

ffmpeg -i input.avi -f image2 -vframes 2 output%02d.jpg

В результате выполнения этой команды появится два файла: output01.jpg и output02.jpg.


Mplayer

mplayer /var/trash/film.avi -ss 00:10:10 -frames 2

-vo jpeg:outdir=/var/trash/imgs


Опция -ss как в mplayer, так и в ffmpeg может принимать свой аргумент как в виде целого
числа секунд, так и в формате времени — ЧЧ:ММ:СС.Д.
-frames - контролирует кол-во извлекаемых фреймов.
-vo - формат выходного файла. После двоеточия идет путь в каталог извлечения.

Конвертирование текстовых файлов из формата Unix в формат Windows


Отличия между текстовыми файлами формата Windows и Unix незначительны. В Windows, признаком конца строки является два ASCII символа -  возврат каретки (CR) и переход на новую строку (LF), в Unix используется только LF. Последствия этого выражаются в том, что некоторые Windows приложения не могут показать перехода на новую строку в файлах Unix  формата. Аналогично Unix программы могут показывать CR в  файлах Windows формата как символ Ctrl-m (^M) в конце каждой стоки.

Далее предложено несколько решений данной проблемы. Этот пост содержит инструкции по тому как используя FTP, unix2dos и dos2unix, tr, awk, Perl, vi и vim произвести превращение одного формата файла в другой. Все эти утилиты уже присутствуют на любом Unix компьютере.
Замечание: в примерах приведенных ниже имя файла unixfile.txt будет соответствовать Unix формату текстового файла, winfile.txt соответственно для формата M$ Windows.

FTP
При использовании программы FTP для перемещения текстовых файлов между Unix и Windows системами, файлы должны быть передаваемы в формате ASCII, таким образом документ преобразуется в текстовый формат хоста. Некоторые FTP клиенты, особенно с графическим интерфейсом, выполняют преобразование автоматически. Если Вы используете FTP клиент из командной строки, то перед перемещением файлов введите:

ascii


dos2unix и unix2dos
В ОС Solaris утилиты dos2unix и unix2dos уже присутствуют и ими уже можно воспользоваться для конвертирования из командной стоки.
Для конвертирования Windows файла в Unix файл, введите:

dos2unix winfile.txt unixfile.txt

Для обратного конвертирования Unix файла в Windows файл:

unix2dos unixfile.txt winfile.txt


Замечание: эти утилиты не входят в штатную поставку Debian'а, поэтому:
apt-get install  unix2dos dos2unix


tr
Вы можете использовать tr для удаления всех символов CR и Ctrl-z ( ^Z ) из Windows файла:

tr -d '\15\32' < winfile.txt > unixfile.txt

Но, нельзя использовать tr для конвертирования Unix форматов в Windows.

awk
Windows --> Unix:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

Unix --> Windows:

awk 'sub("$", "\r")' unixfile.txt > winfile.txt

Старые версии awk не поддерживали функции sub. Для выхода из этой ситуации замените awk на gawk или nawk.

Perl
Windows --> Unix:

perl -p -e 's/\r$//' < winfile.txt > unixfile.txt

Unix --> Windows:

perl -p -e 's/\n/\r\n/' < unixfile.txt > winfile.txt

Должны использоваться только одинарные кавычки в каждой командной строке. Это мера предотвращения попыток команды выполнить инструкции внутри себя.

vi
В vi для удаления символа CR выполним следующую команду:

:1,$s/^M//g

Замечание: для ввода символа ^M нажмите Ctrl-v.

Vim

:set ff=unix  для конвертирования в формат Unix;
:set ff=dos для конвертирования в формат Windows.

Заимствовано из http://kb.iu.edu/data/acux.html

Создание скринкастов с помощью ffmpeg


Для создания высококачественных скринкастов, видеороликов отражающих
совершаемые на экране действия, удобно использовать пакет FFmpeg. Для работы
функции по созданию скринкастов пакет ffmpeg должен быть создан с опцией
"--enable-x11grab" (уже используется по умолчанию в Ubuntu и многих
дистрибутивах).

На первом шаге создаем запись действий на экране, кодеком без потери качества
(libx264), чтобы потом можно было подготовить несколько версий ролика в
разных форматах (например, можно отдельно создать вариант для YouTube и версии
с разным качеством кодирования):

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x768 -i :0.0 \
-acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast \ 
-threads 0 output_ll.mkv

где,
"-f alsa -ac 2 -i pulse -acodec pcm_s16le" - записываем стереозвук кодеком
pcm_s16le (без потери качества) с использованием звукового сервера PulseAudio
(для Linux-систем без PulseAudio можно попробовать "-f alsa -ac 2 -i /dev/dsp"
или "-f oss -ac 2 -i /dev/dsp");
"-f x11grab" - драйвер для записи с экрана;
"-r 30" - число кадров в секунду (FPS);
"-s 1024x768 -i :0.0" - размер видео и смещение позиции на экране, напирмер,
указав "-s 800x600 -i :0.0+200,100" можно организовать запись блока 800x600 со
смещением 200x100 относительно верхнего левого угла экрана;
"-vcodec libx264 -vpre lossless_ultrafast" - выбираем кодек libx264 без
потери качества.

На втором шаге перекодируем созданный ролик в более компактное представление и
отрезав лишние хвосты:
MP4/h.264:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libfaac\
-ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 video.mp4

Через опции "-ss 00:00:15 -t 00:05:01" организован пропуск первых 10 секунд
записи и вырезано несколько секунд перед концом (записывается ровно 5 минут и 1
секунда).
OGG/Theora:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libvorbis \
-ab 128k -ac 2 -vcodec libtheora -b 1000k video.ogg

Matroska/h.264:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libvorbis \
-ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 video.mkv

AVI/xvid:

ffmpeg -ss 00:00:15 -t 00:05:01 -i output_ll.mkv -acodec libmp3lame -ab 128k
-ac 2 \
-vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4
-trellis 1 \
-threads 0 our-final-product.avi

Если необходимо в процессе записи ролика отвлечься и прервать запись, разные
куски можно записать в отдельные файлы, а затем объединить их командой mkvmerge:

mkvmerge -o complete.mkv part1.mkv +part2.mkv +part3.mkv +part4.mkv


Материал заимствован из http://www.opennet.ru/tips/2534_screencast_video_ffmpeg.shtml

Глюк tcpdump


В время работы с этой замечательной утилитой в Ubuntu 10.10
заметил такой замечательный глюк

sudo tcpdump -i eth0 -w /var/tmp/4567.cap 
tcpdump: /var/tmp/4567.cap: Permission denied

Лечится это странным для меня образом

aa-complain /usr/sbin/tcpdump
Setting /usr/sbin/tcpdump to complain mode.

суббота, 7 апреля 2012 г.

Перекодирование ogg в mp3


Дано: Debian 6.0 squeeze
Надо: перекодировать ogg в mp3.
Решение: 
Все действия выполняем с правами root'а. 
1. Добавляем репозитарий в sources.list
echo "deb http://www.debian-multimedia.org squeeze main non-free" >> /etc/apt/sources.list


2. Скачиваем цифровые подписи пакетов 
wget -c http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2010.12.26_all.deb


3. Устанавливаем
dpkg -i debian-multimedia-keyring_2010.12.26_all.deb


4. Обновляем репозитарий БД apt
apt-get update


5. Обновляем/переустанавливаем ffmpeg:
apt-get install ffmpeg libavcodec


6. Далее, зайдя в директорию с файлами ogg создаем скрипт proc.sh:


#!/bin/bash
for name in *.ogg; do 
ffmpeg  -i "$name" "$(basename "$name" .ogg).mp3"; 
done;


chmod +x proc.sh
./proc.sh


Все!