Начнём с обработки видео. Я беру второй сезон Декстера. Да, я списал его из торрентов, но угрызений совести по этому поводу не чувствую.
Файлы идут с внешними субтитрами SRT (русскими и английскими). В видео встроена русская звуковая дорожка, и отдельно идёт английская дорожка в формате AC3.
Конвертация видео под iPad и iPhone
Не скажу, что я обрабатываю видео оптимально, что нельзя сделать лучше/быстрее, или что ffmpeg оптимальнее Handbrake. Меня устраивает вполне мой метод. И хоть каждый файл конвертируется очень даже неторопливо, но если оставить скрипт с десятком файлов на ночь, то всё вполне нормально.
$ ffmpeg -y -i Dexter.S02E01.avi -threads 0 -s 720x400 -aspect 720:400 \ -r 29.97 -vcodec libx264 -b 1000k -qmin 20 -qmax 50 -bufsize 10221k \ -maxrate 1800k -acodec libfaac -ar 44100 -ac 2 -ab 128k -f ipod \ -coder 1 -flags +loop -cmp +chroma \ -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method umh -subq 8 \ -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 \ -b_strategy 2 -qcomp 0.6 -qdiff 4 -bf 3 -refs 4 -directpred 3 -trellis 1 \ -flags2 +wpred+mixed_refs+dct8x8+fastpskip+mbtree -wpredp 2 \ Dexter.S02E01.m4v
Расписывать опции не буду – это тема для отдельной статьи.
Преобразование звуковой дорожки AC3 в AAC
$ ffmpeg -i Dexter.S02E01.ENG.ac3 -acodec libfaac -ar 44100 -ac 2 -ab 128k \ -threads 0 Dexter.S02E01.ENG.aac
Извлечение звуковой дорожки из видеофайла
Эта операция избыточна – можно было бы ограничиться тем, что после конвертации видео на первом шаге звуковая дорожка и так встроена в нормальном формате. Но для того, чтобы алгоритм был универсальным, я извлеку эту дорожку из файла по рецепту, описанном в предыдущей статье:
$ ffmpeg -i Dexter.S02E01.m4v Stream #0.0(und): Video: h264, yuv420p, 720x400 [PAR 1:1 DAR 9:5], 937 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 59.94 tbc Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 124 kb/s $ ffmpeg -i Dexter.S02E01.m4v -map 0:1 -acodec libfaac -ar 44100 -ac 2 \ -ab 128k -threads 0 Dexter.S02E01.RUS.aac
Склейка
Все файлы готовы:
-rw-r--r-- 1 ctrld staff 56970 Apr 26 13:05 Dexter.S02E01.ENG.srt -rw-r--r-- 1 ctrld staff 51175034 Apr 26 12:21 Dexter.S02E01.RUS.aac -rw-r--r-- 1 ctrld staff 65149 Apr 26 13:05 Dexter.S02E01.RUS.srt -rw-r--r--@ 1 ctrld staff 529523256 Apr 26 13:15 Dexter.S02E01.m4v
Для работы с дорожками понадобится Subler (бесплатный редактор для слияния треков).
Для начала желательно убрать все треки, кроме видео из файла:
Далее добавляем все нужные дорожки, проставляем языки:
После нажатия на Save некоторые дорожки пометятся как “Not Enabled”, поэтому их нужно включить и записать по-новому:
После записи файла на iPhone (формат для iPad идёт и на iPhone) ни один дополнительный трек (кроме основной аудиодорожки) недоступен:
Корректировка флагов в файле
Вдумчиво читаем статью “[FAQ] Создание видео для iPhone с несколькими звуковыми дорожками, субтитрами и главами“, а именно Часть 5, “Короткий вариант работы в Dumpster от kernalas”.
Видеофайл, собранный обычными утилитами типа Subler, содержит неправильные флаги, из-за чего iPhone/iPad не видит дополнительные треки. Для их корректировки используется Dumpster. Хорошая новость – он есть под Mac OS X Dumpster for Macintosh. Плохая – я не смог его заставить работать, он устанавливал флаги тоже неправильно (вместо 00000f ставил 0f0000) и файлы даже не добавлялись в iTunes. Поэтому пришлось использовать Windows-версию Dumpster (ссылка есть в Части 1), которую я запускал под Win XP в виртуальной машине.
Нужно выполнить рекомендации, описанные в Части 5, “Короткий вариант работы“, а именно для звуковых дорожек и сабтитров поменять поля Flags и Alternate Group:
Открываем сборку в Dumpmaster
- Audio1:
- Проверяем аудио у нас или нет? ‘moov’ > ‘trak’ > ‘mdia’ > ‘hdlr’ > Component subtype: ‘soun’
- ‘moov’ > ‘trak’ > ‘tkhd’ > Flags: $00000f
- ‘moov’ > ‘trak’ > ‘tkhd’ > Alternate Group: $0001
- Audio2:
- ‘moov’ > ‘trak’ > ‘mdia’ > ‘hdlr’ > Component subtype: ‘soun’
- ‘moov’ > ‘trak’ > ‘tkhd’ > Flags: $00000e
- ‘moov’ > ‘trak’ > ‘tkhd’ > Alternate Group: $0001
- Subtitle1:
- ‘moov’ > ‘trak’ > ‘mdia’ > ‘hdlr’ > Component subtype: ‘text’ заменяем на ‘sbtl’. Код: $7362746c
- ‘moov’ > ‘trak’ > ‘tkhd’ > Flags: $00000f
- ‘moov’ > ‘trak’ > ‘tkhd’ > Alternate Group: $0002
- Subtitle2:
- ‘moov’ > ‘trak’ > ‘mdia’ > ‘hdlr’ > Component subtype: ‘text’ заменяем на ‘sbtl’. Код: $7362746c
- ‘moov’ > ‘trak’ > ‘tkhd’ > Flags: $00000e
- ‘moov’ > ‘trak’ > ‘tkhd’ > Alternate Group: $0002
По умолчанию (f) – одна, альтернативных (е) – сколько угодно, т.е. галочка в свойствах фильма в QT равна “f” в dumpster-е.
Всё выглядит запутанно, но после нескольких минут становится всё понятно:
После этого шаманства файл перегоняется в iTunes, затем на iPhone, и наконец-то появляются все звуковые дорожки и субтитры:
Само собой, субтитры “soft”, т.е. отключаемые:
Для завершения покажу информацию по дорожкам файла:
$ ffmpeg -i Dexter.S02E01.m4v
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Dexter.S02E01.m4v':
Metadata:
major_brand : M4V
minor_version : 512
compatible_brands: isomiso2avc1
encoder : Lavf52.56.0
Duration: 00:53:35.17, start: 0.000000, bitrate: 1317 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x400 [PAR 1:1 DAR 9:5], 937 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 59.94 tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 124 kb/s
Stream #0.2(rus): Audio: aac, 44100 Hz, stereo, s16, 125 kb/s
Stream #0.3(eng): Subtitle: tx3g / 0x67337874, 0 kb/s
Stream #0.4(rus): Subtitle: tx3g / 0x67337874, 0 kb/s
Метатеги
Я не рассматриваю правильное прописывание метатегов, это вопрос для отдельной статьи. Есть программы, которые сами всё прописывают. Например, есть платная программа iFlicks, которая кроме конвертации видео (но без изысков вроде нескольких звуковых дорожек) берёт метаданные где-то в Интернет. Но можно прописать всё и бесплатно, через iTunes.


Pingback: Tweets that mention theapplegeek Конвертация видео с несколькими звуковыми дорожками и сабтитрами для iPad -- Topsy.com