Итак, у вас есть замечательный DVD с любимым фильмом. Только весь звук там исключительно на непонятном английском языке. Или с дурным переводом имени N-ного канала. А вам хочется посмотреть его с переводом Гоблина, который совершенно бесплатно можно взять у автора.
По результатам собственных мучений написался Mini-HOWTO:
На полноту, простоту и минимализм не претендую. Я пользовался первым попавшимся инструментом, который подходил для выполнения задачи.
Инструменты (большинство есть в пакетах, поэтому источник не указываю):
(optional) dvdbackup
(optional) audacity
mplayer
ffmpeg
sox
tcrequant из комплекта transcode
tcmplex (когда-то тоже входил в transcode, потом долго не обновлялся, и в конце концов, был оттуда убран). Вот здесь можно взять пропатченную версию, которая умеет несколько аудиодорожек.
multimux там же
spumux, spuunmux, dvdauthor из комплекта dvdauthor
growisofs
mkisofs, который неявно вызывается из growisofs
По результатам собственных мучений написался Mini-HOWTO:
На полноту, простоту и минимализм не претендую. Я пользовался первым попавшимся инструментом, который подходил для выполнения задачи.
Инструменты (большинство есть в пакетах, поэтому источник не указываю):
(optional) dvdbackup
(optional) audacity
mplayer
ffmpeg
sox
tcrequant из комплекта transcode
tcmplex (когда-то тоже входил в transcode, потом долго не обновлялся, и в конце концов, был оттуда убран). Вот здесь можно взять пропатченную версию, которая умеет несколько аудиодорожек.
multimux там же
spumux, spuunmux, dvdauthor из комплекта dvdauthor
growisofs
mkisofs, который неявно вызывается из growisofs
- Готовим много места на диске. Пусть это будет в каталоге /big/movie
- Запускаем
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, и т.д. - рипаем нужный тайтл в один большой файл
mplayer -ao null -vo null dvd://номер_тайтла -dumpstream -dumpfile movie.vob
Желающие могут использоватьtccat -i /dev/dvd -P -T номер_ролика > movie.vob
или другой инструмент по желанию, хотя бы и тот жеdvdbackup -F
- вытаскиваем оттуда видео:
mplayer -ao null -vo null movie.vob -dumpvideo -dumpfile movie.m2v
- слушаем по очереди все звуковые дорожки. 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
и т.д. - смотрим субтитры
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 ...
Итак, мы выдрали из исходного файла все, что нам нужно - видео, аудио, субтитры. В принципе, его после этого можно стирать. - Переходим к следующему этапу - созданию дополнительной звуковой дорожки.
Скачиваем mp3 и разворачиваем его в wav, потому что все дальнейшие манипуляции будут проводиться именно с несжатым звуком.
Например, так:mplayer track2.mp3 -ao pcm:file=track2_in.wav
или так:ffmpeg -i track2.mp3 track2_in.wav
- Обнаруживаем, что в файле содержится только дикторский перевод, а оригинального звука от фильма там вообще нет. То есть, слушать это можно, но..
Поэтому берем оригинальную дорожку и делаем из нее тоже wav:ffmpeg -i track0.ac3 track0.wav
или так:mplayer track0.ac3 -ao pcm:file=track0.wav
Правда, при этом от нее останется только стерео, все тылы, центр и LFE пропадут, ну да и ладно. - Делим wav на левый и правый канал, попутно меняя частоту сэмплирования на 48 кГц (хотя она, скорее всего, в ac3 такая и была):
sox track0.wav -r 48000 -c1 track0l.wav -l sox track0.wav -r 48000 -c1 track0r.wav -r
- Поскольку перевод был монофонический, накладываем его и на левый, и на правый каналы оригинального звука, слегка уменьшая громкость оригинала:
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) и к файлу с переводом. - Склеиваем новые левый и правый каналы в один wav:
multimux track2l_out.wav track2r_out.wav -o track2_out.wav
- И конвертируем wav в в 2-канальный ac3 с частотой 48 кГц и битрейтом 128 кбит/с (по 64 на канал):
ffmpeg -i track2_out.wav -ab 128 -ar 48000 -ac 2 track2_out.ac3
Если места на стерео жалко, то можно вышеуказаным способом склеить левый и правый каналы от оригинальной дорожки (или даже просто взять один из каналов), а потом наложить перевод и сконвертировать в 1-канальный ac3 с битрейтом 64 килобита. Или даже меньше. - И, наконец, мультиплексируем видео и все аудиодорожки, включая новую, в единый файл:
tcmplex -i movie.m2v -0 track0.ac3 -1 track1.ac3 -2 track2_out.ac3 -o movie_out0.vob -m d
Попытка использовать здесь mplex из комплекта mjpegtools успехом не увенчалась - он долго и нудно ругался, а разибраться, что именно ему не понравилось в этих файлах, мне было недосуг. tcmplex все эти файлы воспринял совершенно нормально. - Смотрим полученный фильм
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, мультиплексируем полный файл.
Всё, с аудио разобрались. - Подмешиваем обратно субтитры
cat movie_out0.vob | spumux -s 0 sub0/sub.xml [ | spumux -s 1 sub1/sub.xml ...] > movie_out1.vob
Естественно, имена каталогов надо брать те, в которые складывались субтитры из оригинального фильма, а номера дорожек (-s) ставить по порядку, начиная с нуля - смотрим, какого размера получился выходной файл.
Предположим, он получился 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
- Мультиплексируем ролик заново, теперь с пережатым видео:
tcmplex -i movie_out.m2v -0 track0.ac3 -1 track1.ac3 -2 track2_out.ac3 -o movie_out0.vob -m d
- Опять подмешиваем субтитры
cat movie_out0.vob | spumux -s 0 sub0/sub.xml [ | spumux -s 1 sub1/sub.xml ...] > movie_out1.vob
И убеждаемся, что файл стал нужного размера. Если нет, внимательно проверяем все расчеты и ищем ошибку. - Файл готов. Теперь пишем 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. - Делаем пофайловый образ диска
dvdauthor -x dvdauthor.xml
- Пишем на болванку
growisofs -dvd-compat -Z=/dev/dvd -dvd-video -V 'Название диска' /big/movie/image
Всё.
P.S. А ежели надо просто взять один тайтл, попутно удаляя ненужные аудиодорожки и субтитры, и пережать его, чтоб влез на однослойную болванку, то вместо всего вышеописанного ужаса надо просто воспользоваться программой vamps и ее графической оболочкой qvamps ;)
Правда, я видел dvd, на котором qvamps ломался со страшным треском при попытке прочитать структуру диска.
Tags:
no subject
no subject
Вот удалять ненужные - это vamps умеет. И на ходу пережать видео может. Поэтому см. P.S.
no subject
no subject
лучше всего, когда одна кнопка, например, "Свести баланс", а еще лучше - просто "Баланс"!
:-)
no subject
Но всё равно, ради "перевода" Гоблина идти на такие муки - это ж жуть просто!
no subject
no subject
no subject
спасибо.
В мемориз.
no subject
наиболее ценно - это перечень используемых инструментов :)
no subject
no subject