Смотрим кино с субтитрами сразу на двух языках

    Увидев только что на Хабрахабре вот эту блогозапись, подумал, а нельзя ли сделать так в Линуксе. Оказалось — можно. Причём метод не зависит от проигрывателя видео, главное, чтобы программа поддерживала субтитры в формате ASS.

    Скриншот

    if anyone needs this, i created a bash script allowing you to
    watch/convert movies with two subtitles shown at the same time. you
    may use this if a foreign friend comes to visit you and you both would
    like to watch a movie with subtitles in your mother language, for
    instance.


    Если кому-то надо, я создал скрипт на bash'е, позволяющий смотреть/конвертировать фильмы так, чтобы одновременно показывались две дорожки субтитров. Вы можете им пользоваться, если, скажем, к вам в гости приезжает друг из другой страны, и вы бы оба хотели посмотреть фильм с субтитрами на вашем родном языке.


    [MPlayer-users] two subtitles at one time (script)

    Я сделал в скрипте изменения в двух строчках, добавив опцию -subcp utf-8 в команду конвертации SRT-файлов.

    Зависимости скрипта — mplayer (в случае, если ваши файлы субтитров нужно сконвертировать в srt) и gnu utils (по поводу присутствия gnu utils на компьютере, что-то мне подсказывает, можно не беспокоиться).

    Сохраним скрипт merge2ass.sh к себе на компьютер (ссылка выше).

    Теперь откроем консоль и перейдём в каталог, в котором находится скрипт.

    Например так:
    cd scripts/ (находясь в домашнем каталоге)
    Или так:
    cd ~/scripts/ (находясь где-то ещё)

    Установим скрипту права на исполнение (делается один раз):
    chmod +x merge2ass.sh

    Теперь посмотрим, какие аргументы принимает скрипт.

    1. Файл фильма
    2. Одни субтитры
    2. Вторые субтитры
    4. Необязательный аргумент, может быть «-pm» или «--play-movie» для мгновенного перехода к просмотру фильма

    Итак, скачиваем русские и английские субтитры.

    Русские субтитры, скорее всего, в кодировке CP1251. Меняем кодировку на UTF-8.

    iconv -f cp1251 -t utf-8 movies/lie_to_me-s02e11-russian.srt > movies/lie_to_me-s02e11-russian-utf-8.srt

    И запускаем скрипт.

    ./merge2ass.sh movies/lie_to_me-s02e11.avi movies/lie_to_me-s02e11-english.srt movies/lie_to_me-s02e11-russian-utf-8.srt

    Скрипт создаёт файл lie_to_me-s02e11-bilingual.ass. Остаётся запустить кино.

    mplayer -noautosub -ass movies/lie_to_me-s02e11.avi -sub movies/lie_to_me-s02e11-bilingual.ass -subcp utf-8

    Приятного просмотра и, конечно же, изучения языков!
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 79

    • UFO just landed and posted this here
        0
        Ага, по парню видно, что он «того», у меня друг такой есть
          +2
          i hate subtitles
          © It crowd
            0
            того?
              0
              С неустойчивой психикой.
            0
            серии про психопатов у него очень хорошо выходят
            +11
            блогозапись
            Труды Мицгола не проходят даром!
            По теме: спасибо, полезная инфа. Хотя я обычно, если смотрю фильмы на английском, ограничиваюсь английскими же субтитрами, а в большинстве случаев стараюсь без них, хорошо тренирует восприятие речи «на слух».
              +5
              >>Мицгол, перелогинься.
                0
                Собственно, я как раз вспомнил Мицгола, когда писал. Думал сначала написать «пост», но подумал — зачем вставлять лишний англицизм в текст?
                  +6
                  Ага! «Блог» же чисто русское слово ;)
                    0
                    «Запись сетевого журнала» звучит слишком длинно. :)
                      +1
                      ЗАСЕЖ тогда будет по-русски))
                        0
                        ЗСЖ — звучит более угрожающе =)
                        0
                        А журнал — это конечно русское словов? ;)
                          0
                          Естественно, французское (journal). Просто заимствованное гораздо раньше.

                          Я, кстати, думал это добавить, но решил, что это уже будет какой-то перебор с занудством. :)
                    0
                    мимо меня тоже не прошли )) теперь тоже так говорю ))
                    и от этого слова не отделаться уже, главное… =D
                    –6
                    А маньяк Мартин случайно попал в скриншот?)
                      +8
                      Спойлеры!
                        0
                        Да ладно вам, в Lie to me обычно сразу ясно, кто плохиш, вопрос только в том, когда он расколется :)
                          0
                          Сегодняшняя серия была менее очевидной :)
                            0
                            Спасибо, ознакомлюсь :)
                      +1
                      Отличная новость! И хоть сам не нуждаюсь в подобных хаках но знаю людей которые бы от этого не отказались. Главная проблема тут заключается в том что пока вы будете читать субтитры на одном языке, осознаете что вы что-то не поняли, кадр уже с большей вероятности сменится и вы не успеете прочитать субтитры на другом языке.
                        +1
                        Так и хочется добавить: «use Pause button, Luke!»
                          –1
                          Лёжа на диване вы будете каждый раз вставать, подбегать к компьютеру, перематывать на 10 секунд и нажимать на паузу?
                            +2
                            А решений, кстати, много. Беспроводные мыши и клавиатуры, пульты дистанционного управления, да хоть голосовое управление (Xbox, play!). :)
                          0
                          Смысл в том, что поставить кино на паузу гораздо проще и быстрее, чем сворачивать проигрыватель, открывать словарь, смотреть перевод, закрывать словарь, разворачивать проигрыватель.

                          Другая проблема в том, что русские субтитры, к сожалению, часто переводятся некачественно. Взять то же выражение «to work hard», которое чуть ли не каждый из этих переводчиков считает своим долгом перевести как «тяжело работать» (а не: «стараться»).
                            +7
                            Вспомнилось:

                            Оригинал: «Boromir smiles» (Two Towers, chapter 1).
                            Муравьев: Боромир слабо улыбнулся.
                            Григорьева: Тень улыбки промелькнула по бледному, без кровинки, лицу Боромира.
                            От составителя: Кто больше, господа?
                              +3
                              Let it be — Давай съедим пчелу
                              All by myself — Всё покупаю сам
                              No need to run — Нет, надо бежать!
                              Can you hear me? — Ты можешь меня здесь?
                              Undressed custom model — Голая таможенная модель
                              I have been there — У меня там фасоль
                              God only knows — Единственный нос бога
                              Do you feel alright? — Ты справа всех чувствуешь?
                              Bye-bye baby, baby good-bye — Купи-купи ребенка, ребенок — хорошая покупка
                              I fell in love — Я свалился в любовь.
                              Just in case — Только в портфеле
                              Oh dear — Ах олень.
                              I'm going to make you mine — Я иду копать тебе шахту
                              Finnish people — Конченные люди
                              Phone seller — Позвони продавцу
                              Let's have a party — Давайте организуем партию
                              Watch out! — Посмотри снаружи!
                              I know his story well — Я знаю его исторический колодец
                              By the way — Купи дорогу!
                              I've just saw your balance sheet — Видел я ваш баланс… так себе баланс
                              All right — Все направо
                              Don't talk to me right now, I'm pissed — Помолчи, я обоссался
                              I want to get laid! — Я устал, пойду прилягу!

                              ©копипастено с просторов интернета
                          +5
                          Название, конечно, у формата…
                          Понимаю, что сокращение, но :)
                            –7
                            Да ну, я умоляю… «смотрим кино» — это громко сказано! Все внимание будет на этих «бегущих строках»…
                              +1
                              В MPlayer'е отключать и включать субтитры можно нажатием на «v» на клавиатуре. Если уровень английского позволяет, можно так и смотреть, включая субтитры только тогда, когда без них что-то не ясно.
                                +1
                                Я говорю сам факт, что смотреть фильм с субтитрами сразу на двух языках — это уже не смотреть фильм, и читать его. Если уж так хочется, то наверняка лучше слушать на разных языках
                                +7
                                угу, скажите это анимешникам со стажем
                                  +6
                                  Глупости. Со временем привыкаешь смотреть и кино и субтитры.
                                    0
                                    Вы просто не умеете их готовить
                                      +1
                                      когда привыкнешь, субтитры прекрасно воспринимаются на подсознательном уровне и не мешают смотреть фильм и слушать оригинальную речь.
                                        0
                                        субтитры прекрасно воспринимаются на подсознательном уровне
                                        так может их и транслировать тогда сразу в подсознание — зачем место на экране занимать?
                                          0
                                          если вы разработаете такую технологию — все анимешники скажут вам спасибо:)
                                            0
                                            эх, я б с радостью :)
                                      +2
                                      Отличная утилита, Лантерн. А может смена кодировки входящих субтитров сделать автоматом? Определить не особая проблема вроде (да и наверняка в Linux уже есть программа, которая определяет кодировку).
                                        0
                                        Андрей, эти утилиты могут быть ненадёжными. Вспомни автоопределение кодировки у браузеров — оно далеко не всегда срабатывает правильно. Так что проще уж, видимо, указать кодировку вручную. Как вариант, можно было бы добавить конвертацию кодировки iconv'ом прямо в скрипт и, соответственно, указывать входящую кодировку (если она отличается от utf-8) в параметрах скрипта. Что уж там говорить, можно вообще гуй написать.

                                        Я в комментариях к скрипту прочитал, что есть более медленный способ конвертации SRT, который не требует видеофайла.

                                        Вот что-то в таком духе:
                                          0
                                          Трудно определить koi8/cp1251 (там нужна эвристика), а cp1251 или utf8 (с русскими) буками определить гораздо легче :). Хотя, да, это лишние движения, лучше конвертацию в скрипт вставить.
                                            +1
                                            Очень хорошо работает chardet для python! Как-то перегонял с помощью неё базу CDDB (а там такой зоопарк кодировок, что проблема koi8/cp1251 — детский лепет). Пока не найдено ни одной ошибки.
                                              0
                                              Зачем лишние костыли? MPlayer уже давно поддерживает enca.
                                                0
                                                Я не очень доверяю enca. Как раз в том тесте с CDDB она сильно наломала дров. Может сейчас, конечно, всё лучше.
                                                  0
                                                  Очень зря. С субтитрами enca работает просто замечательно.
                                          0
                                          mplayer /dev/zero -rawvideo pal:fps=25 -demuxer rawvideo -vc null -vo null -noframedrop -benchmark -subcp utf-8 -sub movies/lie_to_me-s02e11-russian-utf-8.srt -dumpsrtsub

                                          Соответственно, можно написать веб-сервис, который создаёт ass-файл на основе двух srt-файлов. :)

                                          Или можно интегрировать такую функциональность в какой-нибудь хостинг субтитров.
                                          • UFO just landed and posted this here
                                              0
                                              enca — определяет, но хочет знать язык, в котором там текст. а enconv перекодирует
                                              $ echo "кириллица" > /tmp/text
                                              $ iconv -t cp866  /tmp/text > /tmp/text.cp866  # теперь там cp866
                                              $ enca --guess -L ru /tmp/text.cp866 
                                              IBM/MS code page 866
                                                LF line terminators
                                              $ enconv -x ${LANG/*\./} -L ru /tmp/text.cp866 
                                              $ enca --guess -L ru /tmp/text.cp866          # теперь там utf8
                                              Universal transformation format 8 bits; UTF-8
                                              

                                              правда не раздуплил как перекодировать и выплюнуть результат в stdout, как iconv
                                              • UFO just landed and posted this here
                                          • UFO just landed and posted this here
                                              +1
                                              А мне хочется смотреть фильм не с двумя субтитрами, а с двумя звуковыми дорожками. А то жена у меня любит смотреть на французском, а я по-французски не понимаю. Никак не могу решить такую головоломку:(
                                              • UFO just landed and posted this here
                                                  0
                                                  Вот я как-раз не понимаю, как дорожку направить в канал. Чем это сделать, это настройка чего?
                                                  • UFO just landed and posted this here
                                                      0
                                                      Т.е. создать файл, в котором на самом деле одна дорожка, а в разные каналы (передние/задние) идет звук на разных языках? Так это же ерунда получится — во многих фильмах важны и передние звуки и задние, а тут получится, что половина звуков будет убита.
                                                        0
                                                        Эм, ну а как вы ещё хотите? Каждому наушники 5.1? Мне кажется, если учесть, что это несколько экзотический вариант просмотра, вполне можно обойтись 2.0 каждому.

                                                        А если критично 5.1 — ну, покупаете вторую звуковую карту, и делаете примерно так, как я уже писал (с JACK'ом).
                                                          0
                                                          Да нет, 2.0 сойдет. Просто, видимо, придется слить вместе задние и передние каналы?

                                                          Впрочем, не важно. Это слишком заморочно — звук монтировать для каждого просматриваемого фильма. Попробую с JACK'ом.
                                                            0
                                                            Если наушники 2.0, да, естественно, придётся. Или MPlayer сам их сольёт, в зависимости от настроек (-channels).
                                                  +1
                                                  Попробуйте воспользоваться JACK'ом.

                                                  Включаете JACK.

                                                  Открываете кино с французской дорожкой вот так:
                                                  mplayer -vo null -ao jack (и, конечно, добавляете выбор дорожки)

                                                  Открываете кино с русской дорожкой вот так:
                                                  mplayer -ao jack

                                                  Разумеется, чтобы воспроизведение было синхронизированным, вам необходимо запустить два проигрывателя одновременно.

                                                  После этого открываете qjackctl и соединяете на вкладке Audio левый канал первого проигрывателя с playback_1, правый канал первого проигрывателя с playback_2 и со следующими playback'ам (если они там, конечно, есть) левый и правый канал второго проигрывателя.

                                                  А потом, как уже eurekafag писал выше, подключаете одни наушники к одному выходу звуковой карты, а другие — к другому.
                                                    +1
                                                    Звучит правдоподобно. Приду домой, попробую. Спасибо.
                                                • UFO just landed and posted this here
                                                    0
                                                    Неплохобы добавить в ваш скрипт поддержку enca, для автоматического определение кодировки субтитров
                                                      0
                                                      А я пытаюсь на слух ориентироваться, правда иногда запутываюсь и теряюсь…
                                                        0
                                                        о! Как раз вчера посмотрел эту серию) Совпадение какое.
                                                          0
                                                          Формат субтитров классный =)
                                                            0
                                                            стараюсь смотреть на языке оригинала без субтитров, сложности возникают только, если у актеров сильный акцент либо сыплят терминами — тогда смотрю субтитры + словарь
                                                              +1
                                                              А только мне одному кажется, что по имени этого скрипта можно сделать вывод, что он мерджит 2 задницы? %)
                                                                +2
                                                                Правильнее уж тогда, мерджит в задницу (2 = to).
                                                                  +1
                                                                  Объединяет в задницу.
                                                                    +1
                                                                    Не согласен. Мерджить (объединять) можно только что-то с чем-то. И соовественно объединить куда-то нельзя. И потому здесь цифра 2 означает, что будут объединятся 2 задницы. Задница слева с задницей справа (ну или как вариант сверху и снизу).
                                                                      0
                                                                      В данном случае две дорожки субтитров объединяются в один файл.
                                                                        +1
                                                                        >И потому здесь цифра 2 означает, что будут объединятся 2 задницы.

                                                                        Тогда было бы merge2asses.
                                                                  • UFO just landed and posted this here
                                                                    0
                                                                    а как промотать? У меня субтитры беспорядочно вылазиют сверху и сбоку
                                                                      0
                                                                      Скорее проблема конкретного набора программных компонентов. У меня всё замечательно мотается. Возможно, у Вас что-то не так с кодеками.
                                                                      0
                                                                      По поводу кодировок субтитров, mplayer умеет так:
                                                                        0
                                                                        subcp=enca:ru:en

                                                                      Only users with full accounts can post comments. Log in, please.