Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


howtos:videoprocessing

Развлекушки с видео

Задача: сделать из нескольких видеофайлов DVD-Video диск, который можно смотреть не только на компьютере, но и на DVD-плейере

Входные данные: несколько файликов с фильмами/роликами в различных форматах(mpeg,avi..)
Выходные данные: DVD-видео в формате файликов, распиханых по специальным каталогам, либо в виде iso


Необходимые пакеты: mplayer, mencoder, dvdauthor

конвертирование в mpeg2

В связи с тем, что в DVD-video используется именно этот формат кодирования видео потока, то необходимо все имеющиеся файлики пережать в mpeg2. Для этого нам понадобиться mencoder. Перед тем как привести строку с параметрами имеет смысл понять, что за зверь этот MPEG-2 1) .

MPEG-2 — название группы стандартов цифрового кодирования видео и аудио сигналов. Стандарт MPEG-2 в основном используется для кодирования видео и аудио при вещании, включая спутниковое вещание и кабельное телевидение. MPEG-2 с некоторыми модификациями также активно используется как стандарт для сжатия DVD.
Стандарт MPEG-2 налагает определенные ограничения на видео поток

Обычная команда для перекодирования в MPEG-2 представляет из себя следующее:

$ mencoder -oac <audio-codec> -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=<X>:<Y>, \
  harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=<buffer>:vrc_maxrate=9800: \
  vbitrate=5000:keyint=15:aspect=<aspect> -ofps 25 -o outfile.mpg infile.avi 

расшифровка, используемых ключиков2):

      -o <имя_файла>
              Выводить результат в указанный файл.
      -oac <название кодека>
            Указывает кодировать заданным аудио кодеком (нет значения по умолчанию).
            Полный список доступных кодеков можно получить при помощи опции <ключик> help. (в данном случае -oac help)
      -ovc <название кодека>
              Указывает кодировать заданным видео кодеком (нет значения по умолчанию).
      -of <format> 
              Кодировать в указанный формат (по умолчанию: AVI).
      -mpegopts - параметры кодирования в MPEG
                 format=<mpeg1 | mpeg2 | xvcd | xsvcd | dvd | pes1 | pes2> формат  потока  (по  умолчанию:  mpeg2).
 
      Видео фильтры позволяют изменять видео поток и его свойства.  Синтаксис такой:
       -vf <фильтр1[=параметр1:параметр2:...],фильтр2,...>
              Устанавливает цепочку видео фильтров.
 
         scale[=w:h[:ilaced[:chr_drop[:par[:par2[:presize[:noup[:arnd]]]]]]]]
                Масштабирует изображение модулем программного масштабирования (медленно) и осуществляет YUV<->RGB
                преобразование пространства цветов.
             <w>,<h>  ширина/высота после масштабирования (по умолчанию: оригинальная ширина/высота)
             <ilaced> Переключает чересстрочное масштабирование.
                         0: выключено (по умолчанию)
                         1: включено
             <chr_drop>  пропуск цветности
                         0: Использовать все доступные линии для цветности.
                         1: Использовать каждую 2 входную линию для цветности.
                         2: Использовать каждую 4 входную линию для цветности.
                         3: Использовать каждую 8 входную линию для цветности.
             <par>[:<par2>] Устанавливает некоторые параметры масштабирования в зависимости от модуля
                            масштабирования,  выбранного  с помощью -sws.
                         -sws 2 (бикубический):  B (размытость) and C (ореол на границе цветов)
                         0.00:0.60 по умолчанию
                         0.00:0.75 "точный бикубический" VirtualDub’а
                         0.00:0.50 сплайн Catmull-Rom
                         0.33:0.33 сплайн Mitchell-Netravali
                         1.00:0.00 кубический B-сплайн
                         -sws 7 (гауссово): резкость (0 (мягко) - 100 (резко))
                         -sws 9 (lanczos):  длина фильтра (1-10)
          harddup дублирующиеся кадры будут принудительно кодироваться на выходе  
     -lavcopts параметры libAvCodec. 
          vcodec=<значение>
                 Задействует указанный кодек (по умолчанию: mpeg4).
          vrc_buf_size=<значение>
              размер буфера в кбит. Для MPEG-1/2 это также устанавливает размер vbv буфера,  
              для  VCD  рекомендуется использовать 327, 917 для SVCD и 1835 для DVD.  
          vrc_maxrate=<значение>
              максимальный битпоток в кбит/сек (по умолчанию: 0, неограничен)
          vbitrate=<значение>
              Указывает битпоток (по умолчанию: 800). (1кбит = 1000 бит)
                 4-16000
                      (в кбитах)
                 16001-24000000
                      (в битах)
 
          keyint=<value>
              Устанавливает  максимальный интервал между IDR-кадрами (по умолчанию: 250).  
              Большие значения экономят биты, таким образом, увеличивая качество  ценой  точности  
              перемещения. В  отличие  от  MPEG-1/2/4,  H.264  не  страдает  от погрешности DCT 
              при больших значениях keyint.
          aspect=<x/y>
              Сохраняет  пропорции  фильма  внутри  него,  в  точности как в MPEG файлах.  
              Намного приятнее при масштабировании, поскольку  качество  не  ухудшается.   
              Параметр опции aspect может быть задан дробью или вещественным числом.
 
      -ofps - частота кадров для выходного потока      

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

[zps@note-fox-cub Documents]$ mplayer -vo dummy -identify kolobki.avi 2> /dev/null
MPlayer SVN-r23784 rpm.livna.org (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) M processor 1.73GHz (Family: 6, Model: 13, Stepping: 8)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
 
Playing kolobki.avi.
AVI file format detected.
ID_VIDEO_ID=0
[aviheader] Video stream found, -vid 0
ID_AUDIO_ID=1
[aviheader] Audio stream found, -aid 1
VIDEO:  [DX50]  512x384  24bpp  25.000 fps  1767.5 kbps (215.8 kbyte/s)
ID_FILENAME=kolobki.avi
ID_DEMUXER=avi
ID_VIDEO_FORMAT=DX50
ID_VIDEO_BITRATE=1767472
ID_VIDEO_WIDTH=512
ID_VIDEO_HEIGHT=384
ID_VIDEO_FPS=25.000
ID_VIDEO_ASPECT=0.0000
ID_AUDIO_FORMAT=85
ID_AUDIO_BITRATE=127704
ID_AUDIO_RATE=0
ID_AUDIO_NCH=0
ID_LENGTH=1235.76
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400)
ID_AUDIO_BITRATE=128000
ID_AUDIO_RATE=44100
ID_AUDIO_NCH=2
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================

Данный файлик имеет звуковую дорожку, запакованную в mp3, в то время, как нам для совместимости с DVD-Video хорошо бы иметь AC3. Поэтому конвертируем этот файлик следующим образом:

$ mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=720:576,harddup -srate 48000 \
-af lavcresample=48000 -lavcopts \ vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:\
abitrate=192:aspect=16/9 -ofps 25 -o kolobki.mpg kolobki.avi

Далее можно откинуться на спинку кресла, и подождать пока все перекодируется, потому что этот процесс занимает кучу времени.После того, как закончится перекодирование, появиться новый файлик в формате MPEG-2, но уже в формате 16:9 и немного большим разрешением :)

чтобы его просмотреть, можно выполнить:

$ mplayer -vo x11 kolobki.mpg 
Получение DVD MPEG 2 из avi, который уже содержит звук в формате AC3
  $ mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=720:576,harddup \
 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:aspect=16/9 \
 -ofps 25 -o kolobki.mpg kolobki.avi
Получение Video CD MPEG 2 из avi
$ mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd \
 -vf scale=352:288,harddup -srate 44100 -af lavcresample=44100 \
 -lavcopts vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\
 vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224 \
 -ofps 25 -o kolobki.mpg kolobki.avi
Получение SVCD MPEG 2 из avi
$ mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd \
 -vf scale=480:576,harddup -srate 44100 -af lavcresample=44100 \
 -lavcopts vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917: \
 vrc_minrate=600:vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224 \
 -ofps 25 -o kolobki.mpg kolobki.avi

Cоздание DVD диска

Перед тем, как записать DVD, необходимо создать структуру DVD-Video. В этом деле нам поможет DVDAuthor. DVDAuthor имеет всего два параметра:
-o – директория в которой создать структуру диска
-x – входной xml-файл с описанием DVD-Video диска (: Документация DVDAuthor Простейщий файл выглядит следующим образом:

<dvdauthor>
  <vmgm>
    <menus>
      <video format="pal" aspect="16:9" resolution="720x576" widescreen="nopanscan" />
      <audio />
      <pgc entry="title" pause="inf">
        <button name="1">jump title 1;</button>
      </pgc>
    </menus>
  </vmgm>
  <titleset>
    <titles>
      <pgc>
        <vob file="kolobki.mpg" chapters="0,1:01,5:01" />
        <post>call vmgm menu 1;</post>
      </pgc>
    </titles>
  </titleset>
</dvdauthor>

более детально пока не разобрался. вся информация касательно создания инфраструктуры dvd-video лежит в man dvdauthor

источник на английском

You could leave a comment if you were logged in.
howtos/videoprocessing.txt · Last modified: 2016/08/07 01:20 by kel