И так, после прихода
осознания что есть по сути
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 сразу.