November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Saturday, July 22nd, 2006 10:20 pm
Итак, у вас есть замечательный DVD с любимым фильмом. Только весь звук там исключительно на непонятном английском языке. Или с дурным переводом имени N-ного канала. А вам хочется посмотреть его с переводом Гоблина, который совершенно бесплатно можно взять у автора.

По результатам собственных мучений написался Mini-HOWTO:

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

Инструменты (большинство есть в пакетах, поэтому источник не указываю):
(optional) dvdbackup
(optional) audacity
mplayer
ffmpeg
sox
tcrequant из комплекта transcode
tcmplex (когда-то тоже входил в transcode, потом долго не обновлялся, и в конце концов, был оттуда убран). Вот здесь можно взять пропатченную версию, которая умеет несколько аудиодорожек.
multimux там же
spumux, spuunmux, dvdauthor из комплекта dvdauthor
growisofs
mkisofs, который неявно вызывается из growisofs


  1. Готовим много места на диске. Пусть это будет в каталоге /big/movie

  2. Запускаем
    dvdbackup -i /dev/dvd -I
    И смотрим, что он говорит насчет номера основного тайтла. Например:
    Main feature:
            Title set containing the main feature is  1
            The aspect ratio of the main feature is 16:9
            The main feature has 1 angle(s)
            The main feature has 1 audio_track(s)
            The main feature has 32 subpicture channel(s)
            The main feature has a maximum of 28 chapter(s) in on of its titles
            The main feature has a maximum of 6 audio channel(s) in on of its titles
    Но можно попробовать
    mplayer dvd://1
    потом 2, и т.д.

  3. рипаем нужный тайтл в один большой файл
    mplayer -ao null -vo null dvd://номер_тайтла -dumpstream -dumpfile movie.vob
    Желающие могут использовать
    tccat -i /dev/dvd -P -T номер_ролика > movie.vob
    или другой инструмент по желанию, хотя бы и тот же
    dvdbackup -F

  4. вытаскиваем оттуда видео:
    mplayer -ao null -vo null movie.vob -dumpvideo -dumpfile movie.m2v

  5. слушаем по очереди все звуковые дорожки. MPEG audio нумеруются с нуля, AC3 - с 0x80.
    mplayer movie.vob -aid 0
    потом 1, ... 0x80, 0x81..
    и определяем, какие из них нужны. Потом нужные вытаскиваем в отдельные файлы:
    mplayer -ao null -vo null movie.vob -aid 0 -dumpaudio -dumpfile track0.mpa
    mplayer -ao null -vo null movie.vob -aid 1 -dumpaudio -dumpfile track1.mpa
    ...
    mplayer -ao null -vo null movie.vob -aid 0x80 -dumpaudio -dumpfile track0.ac3
    mplayer -ao null -vo null movie.vob -aid 0x81 -dumpaudio -dumpfile track1.ac3
    и т.д.

  6. смотрим субтитры
    mplayer movie vob -sid 0
    потом 1, и т.д.
    и определяем, какие из них нужны. Учтите, что иногда дорожки с субтитрами идут не по порядку. Потом создаем отдельные директории для нужных субтитров и вытаскиваем их туда:
    mkdir sub0; spuunmux -s 0 -o sub0/sub movie.vob
    mkdir sub1; spuunmux -s 1 -o sub1/sub movie.vob
    ...

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

  7. Переходим к следующему этапу - созданию дополнительной звуковой дорожки.
    Скачиваем mp3 и разворачиваем его в wav, потому что все дальнейшие манипуляции будут проводиться именно с несжатым звуком.
    Например, так:
    mplayer track2.mp3 -ao pcm:file=track2_in.wav
    или так:
    ffmpeg -i track2.mp3 track2_in.wav
  8. Обнаруживаем, что в файле содержится только дикторский перевод, а оригинального звука от фильма там вообще нет. То есть, слушать это можно, но..
    Поэтому берем оригинальную дорожку и делаем из нее тоже wav:
    ffmpeg -i track0.ac3 track0.wav
    или так:
    mplayer track0.ac3 -ao pcm:file=track0.wav
    Правда, при этом от нее останется только стерео, все тылы, центр и LFE пропадут, ну да и ладно.

  9. Делим wav на левый и правый канал, попутно меняя частоту сэмплирования на 48 кГц (хотя она, скорее всего, в ac3 такая и была):
    sox track0.wav -r 48000 -c1 track0l.wav -l
    sox track0.wav -r 48000 -c1 track0r.wav -r
  10. Поскольку перевод был монофонический, накладываем его и на левый, и на правый каналы оригинального звука, слегка уменьшая громкость оригинала:
    soxmix -V -v 0.8 track0l.wav track2_in.wav -r 48000 -c1 track2l_out.wav
    soxmix -V -v 0.8 track0r.wav track2_in.wav -r 48000 -c1 track2r_out.wav
    Если в результате будет сообщено о слишком большом количестве обрезанных (clipped) сэмплов, то можно коэффициент еще немного понизить, и можно добавить -v с коэффициентом (возможно, бОльшим 1) и к файлу с переводом.

  11. Склеиваем новые левый и правый каналы в один wav:
    multimux track2l_out.wav track2r_out.wav -o track2_out.wav
  12. И конвертируем wav в в 2-канальный ac3 с частотой 48 кГц и битрейтом 128 кбит/с (по 64 на канал):
    ffmpeg -i track2_out.wav -ab 128 -ar 48000 -ac 2 track2_out.ac3
    Если места на стерео жалко, то можно вышеуказаным способом склеить левый и правый каналы от оригинальной дорожки (или даже просто взять один из каналов), а потом наложить перевод и сконвертировать в 1-канальный ac3 с битрейтом 64 килобита. Или даже меньше.

  13. И, наконец, мультиплексируем видео и все аудиодорожки, включая новую, в единый файл:
    tcmplex -i movie.m2v -0 track0.ac3 -1 track1.ac3 -2 track2_out.ac3 -o movie_out0.vob -m d
    Попытка использовать здесь mplex из комплекта mjpegtools успехом не увенчалась - он долго и нудно ругался, а разибраться, что именно ему не понравилось в этих файлах, мне было недосуг. tcmplex все эти файлы воспринял совершенно нормально.

  14. Смотрим полученный фильм
    mplayer movie_out0.vob -aid 0x82
    и.. с глубокой печалью убеждаемся, что получилась фигня. Перевод расползся с оригиналом.

    После некоторых раздумий и проверок обнаруживаем, что фильм (и звуковоые дорожки от него) идут 1:38:34 (5914 секунд), а перевод - 1:42:43 (6163 секунд). Возникает естественное решение: ужать перевод по времени в 6163 / 5914 = 1.04210348 раз.
    sox -V track2.wav -c1 track2_.wav speed 1.04210348
    При этом обнаруживается, что после конвертирования файла sox зацикливается и продолжает бесконечно писать в выходной файл какие-то сэмплы (на слух - тишина). Поэтому когда размер выходного файла превысит размер входного, sox можно убить, а из выходного файла вырезать звук нужной длины:
    ffmpeg -t 5914 track2_.wav track2_clipped.wav
    Повторяем процедуры с наложением перевода на оригинал, конвертированием в ac3, (и, по желанию, с мультиплексированием аудио и видео). Обнаруживаем, что почти получилось, только в начале фильма перевод опережает оригинал примерно на 4 секунды.

    Соответственно, перевод надо сделать еще на 4 секунды короче, и подклеить к нему в начале 4 секунды тишины. Чем эти 4 секунды тишины сделать проще всего - не знаю, я сделал audacity. Новый коэффициент ужимания - 6163 / (5914 - 4) = 1.04280879.
    sox -V track2.wav -c1 track2_.speed 1.04280879
    ffmpeg -t 5910 track2_wav track2_clipped.wav
    sox -V 4secsilence.wav track2_clipped.wav -c1 track2_ready.wav
    Еще раз повторяем процедуры с наложением перевода на оригинал (не забывая поменять имя файла на track2_ready.wav), конвертируем в ac3, мультиплексируем полный файл.

    Всё, с аудио разобрались.

  15. Подмешиваем обратно субтитры
    cat movie_out0.vob | spumux -s 0 sub0/sub.xml [ | spumux -s 1 sub1/sub.xml ...] > movie_out1.vob
    Естественно, имена каталогов надо брать те, в которые складывались субтитры из оригинального фильма, а номера дорожек (-s) ставить по порядку, начиная с нуля

  16. смотрим, какого размера получился выходной файл.
    Предположим, он получился 5591609344 байт (5460556 кБ). На однослойную DVD+ влезает 2295104 2-килобайтных секторов, то есть, 4590208 кБ. На DVD- примерно столько же. (Overburn на DVD иногда бывает, но лучше на это не полагаться). Для надежности можно запустить
    dvd+rw-mediainfo /dev/dvd
    и уточнить, сколько влезает на данную конкретную болванку.

    Соответственно, файл надо уменьшить на 5460556 - 4590208 = 870348 кБ. Ну или еще чуть побольше, потому что небольшой overhead пойдет на создание файловой системы. Скажем, на 870600 кБ.

    Уменьшать можно только за счет пережатия видео. Смотрим на размер оригинальной видеодорожки movie.m2v. Предположим, она занимала 5031712768 байт (4913782 кБ). Получить из нее надо 4913782 - 870500 = 4043182 кБ. Коэффициент сжатия 4913782 / 4043182 = 1.21532

    Пережимаем:
    tcrequant -i movie.m2v -o movie_out.m2v -d 3 -f 1.21532
  17. Мультиплексируем ролик заново, теперь с пережатым видео:
    tcmplex -i movie_out.m2v -0 track0.ac3 -1 track1.ac3 -2 track2_out.ac3 -o movie_out0.vob -m d
  18. Опять подмешиваем субтитры
    cat movie_out0.vob | spumux -s 0 sub0/sub.xml [ | spumux -s 1 sub1/sub.xml ...] > movie_out1.vob
    И убеждаемся, что файл стал нужного размера. Если нет, внимательно проверяем все расчеты и ищем ошибку.

  19. Файл готов. Теперь пишем xml-файл для authoring'а - dvdauthor.xml.
    Примерно такой:
    <dvdauthor dest="/big/movie/image">
      <vmgm>
        <fpc>
          audio=0;
          subtitle=64;
          jump title 1;
        </fpc>
      </vmgm>
      <titleset>
        <menus>
          <pgc entry="root">
            <pre>
              jump vmgm menu;
            </pre>
          </pgc>
        </menus>
        <titles>
          <video format="pal" aspect="16:9" resolution="720x576" />
          <audio format="ac3" lang="en" />
          <audio format="ac3" lang="fr" />
          <audio format="ac3" lang="ru" />
          <subpicture lang="en" />
          <subpicture lang="de" />
          <pgc>
            <vob file="movie_out1.vob" 
                  chapters="0,4:46,6:42,9:04.50,14:44,21:49.70,
                            25:52.50,29:38,32:07.50,34:57,39:55.50,42:02.50,
                            46:16.60,48:27,51:25,55:02,59:52,1:02:34,1:04:59.20,
                            1:09:15.40,1:13:03,1:15:53,1:16:59.30,1:21:45,
                            1:24:31,1:29:38,1:32:21,1:34:31" /> 
          </pgc>
        </titles>
      </titleset>
    </dvdauthor>

    Там практически все понятно, подробности см. в man dvdauthor.
    Если явно не указать номер аудиодорожки, то будет проигрываться нулевая.
    А если явно не указать номер субтитров, то не будет никаких, надо будет вручную выбирать с пульта плеера.
    А если указать просто номер дорожки с субтитрами (0, 1, ...), то она будет считаться дорожкой по умолчанию, но показываться все равно не будет. Чтобы субтитры сразу начали показываться, надо указать номер дорожки + 64.

  20. Делаем пофайловый образ диска
    dvdauthor -x dvdauthor.xml
  21. Пишем на болванку
    growisofs -dvd-compat -Z=/dev/dvd -dvd-video -V 'Название диска' /big/movie/image
    Всё.


    P.S. А ежели надо просто взять один тайтл, попутно удаляя ненужные аудиодорожки и субтитры, и пережать его, чтоб влез на однослойную болванку, то вместо всего вышеописанного ужаса надо просто воспользоваться программой vamps и ее графической оболочкой qvamps ;)
    Правда, я видел dvd, на котором qvamps ломался со страшным треском при попытке прочитать структуру диска.
Saturday, July 22nd, 2006 10:28 pm (UTC)
Бля, пиздец как сложно! Ниасилил!
Saturday, July 22nd, 2006 10:41 pm (UTC)
Да нет там ничего сложного. Основная проблема - я не смог найти программу, которая умеет подмешивать дополнительные аудиодорожки к существующему мультиплексированному потоку. Поэтому и приходится разбирать на отдельные потоки, потом собирать обратно.

Вот удалять ненужные - это vamps умеет. И на ходу пережать видео может. Поэтому см. P.S.
Saturday, July 22nd, 2006 10:53 pm (UTC)
Да не, всё сложно очень. Какие-то команды с тучей параметров, xml файлы и т.п.
Saturday, July 22nd, 2006 11:56 pm (UTC)
да-да, много букф :)
лучше всего, когда одна кнопка, например, "Свести баланс", а еще лучше - просто "Баланс"!

:-)
Sunday, July 23rd, 2006 12:04 am (UTC)
Не, кнопка должна быть одна: Do Stuff.

Но всё равно, ради "перевода" Гоблина идти на такие муки - это ж жуть просто!
Sunday, July 23rd, 2006 01:16 am (UTC)
у вас есть перевод лучше?
Monday, July 24th, 2006 07:26 pm (UTC)
Не, кнопка должна быть другая: "Make Money" ;)
Saturday, July 22nd, 2006 10:51 pm (UTC)
ух

спасибо.

В мемориз.
Saturday, July 22nd, 2006 11:57 pm (UTC)
спасибо.
наиболее ценно - это перечень используемых инструментов :)
Thursday, August 3rd, 2006 10:57 pm (UTC)
ммм.. а можно конкретную ссылку на "который совершенно бесплатно можно взять у автора"? что-то я не могу найти на oper.ru.
Friday, August 4th, 2006 08:48 am (UTC)
Хм.. а и вправду нет. Когдя я это писал - оно там было, ибо я действительно mp3 оттуда скачивал.