Remux AVCHD с камеры в MKV

Mar 25, 2009 11:47

И так, после прихода осознания что есть по сути AVCHD и каковы ограничения в современных кодеках решение нашлось.

Сразу оговорюсь:
- будем считать что видео у нас в h.264, а звук в AC3;
- камера снимает в PAL 50i (50 полей в секунду т.е. 50 черезстрочных кадров);
- без пережатия, под альтернативными OpenSource операционками показывать на текущий момент не будет (поправка - будет показывать последний VLC), причина в предыдущем посте (это не мешает подготовить материал для последующего просмотра коммерческими кодеками под Windows);
- этот способ подходит для AVCHD камер и для Blu-ray дисков (структура файлов на носителях идентична, правда на BD могут использоваться кодеки отличные от h.264, например VC-1 и MPEG-2).

Что же такое remux?
Это тупая процедура смены неудобного M2TS контейнера на что-нибудь более подходящее (MKV, AVI) без пережатия материала т.е. без потери качества.
В идеале еще хочется склеить кучу маленьких файлов со сценами в один большой файл.

Общий алгоритм такой:
- демуксим M2TS на два элементарных потока h.264 и AC3;
- при необходимости пережимаем h.264;
- муксим два сырых потока в MKV

Сразу скажу h264tscutter клеит криво (переходы с артефактами), так что не заморачиваемся.

Поехали.

Способ 1 - для тех кто торопится

Если у вас Windows и вы не напрягаетесь по поводу того, что кто-то где-то что-то не увидит - это для Вас.
Качаем:
- Haali media splitter (можно без него, но тогда eac3to не сможет муксить напрямую в MKV);
- eac3to (отсюда)

Устанавливаем первое и распаковываем второе, например в c:\eac3to.
Запускаем cmd или Far и идем к заранее скопированным с камеры M2TS (MTS) файликам (обычно они лежат в директории AVCHD\BDMV\STREAM).
Далее все просто, даем команду: "c:\eac3to\eac3to.exe КЛИП_1+КЛИП_2+...+КЛИП_N output.mkv", где КЛИП - имя m2ts файла (например, 00001.MTS или 00002.M2TS), а output.mkv - итоговый файл.

Ждем минут 15 и получаем MKV файл который содержит склейку всех перечисленных клипов с камеры.
Поздравляю!

Способ 2 - для тех кто хочет немного разобраться в происходящем

Этот способ для тех у кого винда и для тех кто хочет расширенных возможностей (чаптеры, титры).
Тут нам понадобится:
- eac3to или это.
- mkvmerge (отсюда)

Устанавливаем mkvtoolnix (в составе которого mkvmerge), распаковываем eac3to, например в c:\eac3to.
Идем к M2TS файлам и даем команду: "c:\eac3to\eac3to.exe КЛИП_1+КЛИП_2+...+КЛИП_N -demux".

На выходе получаем два файла со склейкой видео в сыром h.264 (расширение h264) и со склейкой звука в сыром AC3 (расширение ac3).

Далее запускаем гуевую оболочку для mkvmerge, добавляем туда два наших файла с видео и звуком, не забываем на за закладке format specific options выбрать Aspect ratio (16/9) и FPS (для 50i PAL пишем руками 50, но этот момент требует уточнения) и жмем главную кнопку внизу: Start muxing.
В итоге опять получаем то, что хотели - MKV со склейкой всех клипов.

Важно указать FPS т.к. в элементарном потоке h.264 отсутствует информация о частоте кадров.

Альтернативный вариант для думукса M2TS - tsMuxer (очень рекомендую, см. ниже) или xport. Последний очень прост и не склеивает, получится куча файлов и нам придется клеить их в mkvmerge (функция append добавляет к треку содержимое нового файла, важно смотреть что к чему приклеивается и не перепутать звук и видео, подробнее в мануале).

В mkvmerge можно "резать" файл на чаптеры и добавлять титры.

Способ 3 - для мужиков

У Вас Linux но смотреть будем под виндой.

Качаем xport (или мой демуксер). Достаем 'xport.c' и даем команду: 'gcc -o xport xport.c' (нужен компилятор gcc со всем фаршем, под Ubuntu ставим пакет build-essential).
В результате получаем бинарник xport. Закиньте его куда-нибудь в /usr/bin.
Это демуксер ts.
К сожалению не умеет клеить несколько потоков, поэтому демуксить надо каждый клип отдельно, а потом клеить их в mkvmerge.
Далее для упрощения будем рассматривать одиночный клип.

Идем к своим m2ts файлам и делаем: 'xport -h xxxx.m2ts 1 1 1', где xxxx - имя клипа.
После этого в той же директории получаем два файла: bits0001.mpv (сырой поток видео в h.264) и bits0001.mpa (сырой поток звука в AC3).
Даем файлам уникальные имена: 'mv bits0001.mpv 00001.264; mv bits0001.mpa 00001.ac3'.
Если надо повторяем процедуру для каждого клипа и получаем кучу пар файлов с элементарными потоками.

Тоже самое можно сделать с использованием tsMuxer, в последней версии появился GUI для Linux и MAC.
Вообще это мощнейшая программа для манипулирования различными TS потоками и для работы со структурой Blu-Ray. Интерфейс очень похож на mkvmerge. Можно склеить несколько m2ts в один (кнопка join) или демуксить их в пару h264/ac3 элементарных потоков. Программа свободная, но без исходных текстов. Рекомендую.

В любом случае мы получаем одну или более пару файлов: *.264 и *.ac3

Теперь берем mkvmerge (отсюда) и делаем так, как описано в предыдущем способе... для Linux тоже есть GUI. Это Важно т.к. ручками не очень удобно.

Кому интересно руками, заклинание для одной пары такое (параметры подставляем свои):
mkvmerge --aspect-ratio 0:16/9 --default-duration 0:25fps -o output.mkv bits0001.264 bits0001.ac3

Поздравляю, получился MKV который можно смотреть только под Windows (может и на MAC) :)

Способ 4 - для мужиков которые никуда не торопятся (подводим итоги)

У Вас Linux и смотреть будем под Linux. Этот способ идентичен предыдущему за исключением того, что придется пережимать видео :(

Сначала демуксим M2TS в одну или более пару h264/AC3 элементарных потоков с использованием tsMuxer, xport или этого (под Windows можно взять eac3to).

Получаем файлы *.264 и *.ac3.

AC3 не трогаем, хотя кто-то может захочет перегнать это, например в AAC и уже его положить в MKV.
Вот пример: 'ffmpeg -i 00001.ac3 00001.aac'.
Настало время h.264 кодирования.

Качаем референсный JM H.264/AVC кодек, разжимаем его и идем в JM/ldecod. Там даем команду: 'make' и получаем в директории 'JM/bin' бинарник 'ldecod.exe'.
Скопируем его куда-нибудь в /usr/bin под именем ldecod.

Теперь идем туда, где получили h.264 файлы и пишем (на диске надо реальную кучу места): 'ldecod -i 00001.264 -o 00001.yuv'.
Получаем абсолютно несжатый элементарный поток YUV 4:2:0, он не содержит в себе никакой информации о характеристиках видео (FPS, разрешение).

Дальше зажимаем это обратно в h.264 но уже OpenSource кодеком.
Можно воспользоваться ffmpeg или mencoder как описано тут, но я рассмотрю вариант со Standalone x264.

Берем x264 отсюда, разжимаем и собираем (можно взять из пакетов).
Теперь главное - выполняем заклинание (подставляем ваше разрешение, подходящий битрейт и профиль):
'x264 --level 4.1 --progress --threads 2 --bitrate 10000 -o 00001_repack.264 00001.yuv 1440x1080'.

Процедуру можно оптимизировать за счет использования конвеера через пайп (ограничения софта поможет обойти команда mkfifo) - не потребуется много места на диске для промежуточного хранения yuv потока.

Повторяем для каждого h.264 файла.

Поздравляю, теперь мы имеем пережатое 'правильным' кодеком видео и звук (возможно тоже пережат).
Кстати можно понизить битрейт если хочется :)

Осталось замуксить все это в MKV при помощи mkvmerge как в предыдущих примерах.
Главное не забудьте выставить правильный Aspect ratio и FPS.

Да, и не перепутайте новый h.264 с оригиналом - нам нужно то, что получилось после работы x264 (например, 00001_repack.264).

То, что получилось можно посмотреть где угодно чем угодно.

Под виндой правильные варианты: CoreAVC и Haali media splitter (если стоит K-Lite надо в настройках ffdshow отключить h.264, тогда будет использоваться CoreAVC, в настройках CoreAVC включаем deinterlace).

Знающие люди рекомендуют PowerDVD (не требует CoreAVC и видимо Haali media splitter). Говорят качество deinterlace гораздо лучше, но как и CoreAVC стоит денег :) ... я пока не пробовал.

Последний K-Lite тоже все должен показывать и так.

Если хочется можно сменить контейнер на AVI при помощи того же Avidemux (в предыдущих способах тоже). В результате для просмотра не потребуется Haali media splitter. Но лучше поискать правильные муксеры и муксить элементарный поток в AVI сразу.

видеомонтаж, avchd, софт, h264

Previous post Next post
Up