Итак, допустим, у нас есть некий avi-файл (xvid) и два файла с субтитрами (например, filmRUS.srt, filmENG.srt), которые мы хотим конвертировать в DVD-формат. В этой заметке мы будем использовать только инструменты командной строки. Дело в том, что большинство графических приложений в Linux для этих задач используют консольные утилиты, как то: FFmpeg, MEncoder и dvdauthor.
Давайте, попробуем:
1. Преобразование нашего .avi-файла используя FFmpeg или MEncoder в подходящий формат - .mpg
Предпочтительней будет использовать FFmpeg, так как для тех же операций он требует гораздо меньше параметров командной строки. В качестве примера приведу конвертирование AVI-файла в формат PAL DVD:
ffmpeg -i film.avi -aspect 4:3 -target pal-dvd dvd.mpg
Если же мы захотим повторить ту же операцию с помощью MEncoder, нам придётся добавить ряд параметров коммандной строки. Чтобы сделать свою жизнь проще, нужно пользоваться скриптами :) Вот пример:
#! /bin/bash # bash script for creating a pal dvd # movie is sneakers! mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \ -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \ -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\ keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \ -o sneakers.mpg sneakers.avi
Примечание: формат DVD сильно ограничен, то есть битрейт и соотношение экрана предварительно определены. Взгляните на эту таблицу:
Формат | Разрешение | В. кодек | В. битрейт | Частота дискретизации | A. кодек | A. битрейт | FPS | Соотношение сторон |
---|---|---|---|---|---|---|---|---|
NTSC DVD | 720x480, 704x480, 352x480, 352x240 | MPEG-2 | 9800 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 (только для 720x480) |
NTSC DVD | 352x240[a] | MPEG-1 | 1856 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 |
NTSC SVCD | 480x480 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 30000/1001 | 4:3 |
NTSC VCD | 352x240 | MPEG-1 | 1150 kbps | 44100 Hz | MP2 | 224 kbps | 24000/1001, 30000/1001 | 4:3 |
PAL DVD | 720x576, 704x576, 352x576, 352x288 | MPEG-2 | 9800 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 (только для 720x576) |
PAL DVD | 352x288[a] | MPEG-1 | 1856 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 |
PAL SVCD | 480x576 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 25 | 4:3 |
PAL VCD | 352x288 | MPEG-1 | 1152 kbps | 44100 Hz | MP2 | 224 kbps | 25 | 4:3 |
[a] Эти разрешения редко используются для DVD, поскольку имеют довольно низкое качество. |
2. Добавим субтитры с помощью spumux
Создадим два XML-файла с содержимым ниже, и сохраним их в качестве "filmRUS.xml" и "filmENG.xml" (то есть, для каждого языка).
<subpictures> <stream> <textsub filename="filmRUS.srt" characterset="cp1251" fontsize="28.0" font="devedesans.ttf" horizontal-alignment="left" vertical-alignment="bottom" left-margin="60" right-margin="60" top-margin="20" bottom-margin="30" subtitle-fps="25" movie-fps="25" movie-width="720" movie-height="574" force="yes" /> </stream> </subpictures>
Кодировку указываем исходя из того, в какой кодировке исходные файлы с субтитрами.
XML-файлы содержат информацию, необходимую для spumux. Имена опций говорят сами за себя. Шрифт можно использовать любой понравившийся, присутствующий в системе.
Теперь создаём MPG-файл с субтитрами:
spumux -s0 filmRUS.xml filmRUS.mpg rm film.mpg spumux -s1 filmENG.xml filmRUSENG.mpg rm filmRUS.mpg
3. Создаём файловую систему DVD при помощи dvdauthor в два этапа:
Создаём простой текстовый файл со следующим содержимым и сохраняем его как auth.xml
<dvdauthor> <vmgm /> <titleset> <titles> <subpicture lang="ru"/> <subpicture lang="en" /> <pgc> <vob file="filmRUSENG.mpg" /> </pgc> </titles> </titleset> </dvdauthor>
и вводим следующую команду в терминале:
dvdauthor -o mydvd -x auth.xml
В результате чего получим файловую систему DVD в директории mydvd.
4. Осталось записать всё это добро на диск!
growisofs -Z /dev/dvd -dvd-video mydvd/
Опция -Z сотрёт диск, если он не будет пустым.
Вот и всё :) Ничего сложного :)