Welcome to Omgili,
Omgili ( Oh My God I Love It ;) is a search engine for discussions. With Omgili you can find answers and solutions, debates, discussions, personal experiences, opinions and more... To learn more about Omgili click here.
This is a complete preview of the discussion as it was indexed by Omgili crawlers. Use this preview if the original discussion is unavailable.
Click here to view the original discussion.
 |
|
 |
|
Как конвертировать в avi сбойные ("неконвертируемые") mpg-файлы - CGTALK.RU – Профессионалы компьютерной графики и визуальных эффектов. Анимация и 3D графика.
А также как конвертировать в avi сбойные файлы других типов.
Иногда может возникнуть такая ситуация.
Вы скачали через торрент файл с расширение .mpg (или с другим).
Казалось бы, такой mpg-файл должен вообще без проблем проходить через DGIndex и просматриваться плеерами.
Но не тут-то было.
DGIndex его сплёвывает, некоторые плееры его хоть и воспроизводят, но через пень-колоду, другие вообще не берут, конвертеры также отказываются корректно конвертировать, Virtual Dub Mod вроде бы открывает, но показывает только часть изображения.
Проблема заключается в том, что видео в таком сбойном файле может быть закодировано MPEG-1 (!!), частота кадров и разрешение в заголовке указаны некорректно, и в некоторых других причинах.
Если вы в точности, не халтуря и не пытаясь что-либо упростить, выполните все приведённые ниже инструкции, то результат порадует вас своим жреческим качеством.
Поехали.
Запускаем GSpot, открываем файл.
Первая причина сбоя может быть в том, что в заголовке неправильно указана частота кадров в секунду.
Смотрим в подокно "Frames/s".
Если там видим, например, 59.941 – то это явно неправильная частота.
Для определения истинной частоты кадров в секунду используем Elecard Converter Studio, или tsMuxerGUI.
Определили. Обычно это будет 23.97, 25 или 29.97 кадров/сек.
Теперь смотрим в подокно "pic".
В нём указано то разрешение, с которым записано видео в файле.
Например, 704x480.
В подокне "seq ext" указано то разрешение, с которым, скажем так, якобы надо выводить картинку на экран.
Например, 1920x1080.
В этом – вторая причина сбоя.
Откройте хороший vob-файл, и вы увидите, что там окно "seq ext" либо пустое, а чуть правее в явном виде указано соотношение сторон, либо в нём стоит то же значение, что и в "pic".
Действуем так.
Из значений окна "seq ext" вычисляем соотношение сторон изображения.
И это соотношение используем, чтобы вычислить разрешение конечного файла по вертикали.
В нашем примере это будет: 704*1080/1920=396.
То есть разрешение конечного avi XViD файла должно быть 704x396.
(При конвертировании не следует увеличивать до 720 разрешение по горизонтали, так как такое увеличение приведёт к ухудшению качества с одновременным увеличением объёма.
То есть если в исходном файле разрешение по горизонтали 704, то его таким и оставляем.) Запоминаем вычисленное конечное разрешение – оно нам пригодится далее.
Кодеки же, которыми закодированы видео и аудио, GSpot всегда определяет верно (если GSpot не в состоянии правильно определить кодеки, то он вообще ничего в соответствующих подокнах не показывает).
Идём на сайт http://www.smlabs.net/tsmuxer.html и скачиваем tsMuxer последней версии.
Запускаем его. Открываем исходный mpg-файл.
На вкладке "Split & cut" точку ставим у "No split", в подразделе "Cutting" у параметра "Enable cutting" флажка быть не должно.
Иначе получим расчленёнку.
Аналогично на вкладке "Blu-ray" точку ставим у "No chapter".
Возвращаемся на вкладку "Input".
Щёлкаем левой кнопкой мыши по видеодорожке.
После выполнения этого действия стало возможным поставить флажок у "Change fps".
Ставим туда флажок.
Выбираем частоту кадров – в нашем примере это будет 30000/1001.
(30000 разделить на 1001 примерно равно 29.97).
Больше пока ничего не меняем.
Конвертируем сбойный исходник в файл с расширением .ts.
В этом ts-файле частота кадров будет задана уже правильно.
Выходим из tsMuxer и пробуем скормить полученный ts-файл DGIndex-у.
Может получиться, и тогда всё, написанное ниже, к вам не относится.
Если же DGIndex снова сплюнет, то делаем так.
Удаляем полученный ts-файл.
Запускаем tsMuxer, открываем сбойный исходник.
Настраиваем вкладки, как было описано выше.
Возвращаемся на вкладку "Input".
Щёлкаем левой кнопкой мыши по видеодорожке.
После выполнения этого действия стало возможным поставить флажок у "Change fps".
Ставим туда флажок.
Выбираем частоту кадров.
Убираем флажок у аудиодорожки.
Ставим точку у "ts muxing".
Жмём кнопку "Start muxing".
Дожидаемся конца демюксирования.
Ставим точку у "Demux".
Убираем флажок у видеодорожки и ставим флажок у аудиодорожки.
Снова жмём кнопку "Start muxing".
Дожидаемся конца демюксирования.
В итоге мы получили один беззвучный видео файл с расширением .ts, один аудио файл и один мета-файл.
Открываем при помощи блокнота мета-файл.
Ищем в нём значение timeshift.
Этот параметр представляет собой смещение аудио дорожки с обратным знаком.
Например, если мы имеем timeshift=315ms, то это значит, что когда мы будем присоединять аудио дорожку при помощи Virtual Dub, то нужно будет ввести смещение -315 миллисекунд.
(Информацию о размере смещения аудио нельзя считать абсолютно достоверной для всех случаев, хотя у меня пока всегда проходило.
Сбойный файл – он на то и сбойный, что всякое в нём может быть.
Возможно, что в некоторых случаях вам придётся подбирать величину смещения вручную.)
Читаем мои статьи "В чём разница между DRC из ffdshow и DRC из нового кодека AC3?" и "Точная подгонка громкости звука при его декодировании из AC3".
При помощи самого прекрасного аудио эдитора GoldWave конвертируем демюксированный аудио файл в .wav.
Входим в настройки видео декодера ffdshow.
Выполняем пять действий.
1.
Входим на вкладку "Кодеки".
Независимо от того, каким кодеком закодирован исходник, в строках "MPEG 1" и "MPEG 2" задаём "libmpeg2" (а не "libavcodec", и не что-то другое).
Также задаём, если это возможно, "libmpeg2" для того кодека, которым закодирован исходный файл.
Пояснения.
Декодер libmpeg2 более устойчив к различным сбойным ситуациям и лучше выруливает из всяких проблем, чем libavcodec.
Декодер libavcodec вроде бы, чуть-чуть, ну совсем чуть-чуть выдаёт более высокое качество, чем libmpeg2.
Поэтому для хороших исходников задаём libavcodec, для сбойных и глючных – libmpeg2.
2.
Ставим флажок у вкладки "Размеры".
Входим на эту вкладку.
Ставим флажок у "Обработка полного".
Ставим точку у "Specify horizontal and vertical size".
В подокнах "Новый" вводим вычисленные разрешения по горизонтали для конечного файла.
В нашем примере это будет 704 и 396.
Ставим точку у "Нет изменения соотношения".
(Этим действием мы заставим декодер работать конкретно с теми разрешениями по горизонтали и вертикали, которые мы задали, невзирая на то соотношение сторон, записанное в заголовке сбойного файла.) Ставим точку у "Изменять размер всегда".
Ставим флажок у "Process pixel aspect ratio internally".
Идём на вкладку "Установки" – она через одну ниже.
Отжимаем кнопку "Блок".
Значения "Метод" и "Для цветности" выставляем "Бикубический".
Оба ползунка "Parameter" выставляем в -0.60.
Ставим флажок у "Точное округление", убираем флажок у "Смешивание".
3.
Общеизвестно, что деинтерлейсинг должен производиться до изменения размеров.
Поскольку мы задали изменение размеров в ffdshow (а по-другому с таким сбойным файлом было нельзя), то вводить деинтерлейсный плагин в скрипт мы уже НЕ можем – иначе будет брак.
Поэтому, если исходник гребёнчатый, то нужно задействовать деинтерлейсинг из самого ffdshow.
Ставим флажок у вкладки "Деинтерлейс".
На этой вкладке выбираем метод деинтерлейсинга.
Самый лучший алгоритм – ядерный деинтерлейс.
Ставим флажок у "Обработка полного", ползунок "Ограничение" выставляем на 5, ставим флажок у "Резкое", остальные опции не меняем.
Алгоритм ffmpeg, в общем, тоже сойдёт, но он уже не столь хорош, как ядерщик.
Все остальные алгоритмы дают гораздо худший результат.
Внимание, ОЧЕНЬ важно!!!
Декодер libmpeg2 при включённой вкладке "Размеры" в некоторых случаях (не всегда) может сам включить деинтерлейсинг по порочному алгоритму Bob.
Похоже, здесь включается аппаратный Bob-деинтерлейсинг.
Какой-либо опции для управления этим включением нет.
В чём порочность Боба, вы все знаете?
В том, что Боб – это не деинтерлейсинг, а псевдо деинтерлейсинг методом размазывания движущихся гребёнчатых деталей.
Из-за описанного выше спонтанного включения Bob-деинтерлейсинга вам может показаться, что исходник не интерлейсный, и включать вкладку "Деинтерлейс" не нужно.
Поэтому вам вначале нужно очень конкретно выяснить, является ли исходник гребёнчатым или нет.
Это можно сделать, загрузив исходник в Elecard и подвигав ползунок.
Также можно отключить вкладку "Размеры" и загрузить исходник в Virtual Dub.
Вы увидите только часть кадра, но гребёнчатость, если она есть, будет отчётливо видна.
Или можно попробовать загрузить исходник в Virtual Dub Mod.
Если вы обнаружили гребёнчатость таким методом, то включайте "ядерный деинтерлейс", и благородный ядерщик, а не порочный Боб, будет качественно деинтерлейсить ваше египетское видео.
4.
На вкладке "Разное" убираем флажок у "Пропуск кадров при задержке:"
5.
Идём на вкладку "Вывод".
Ставим флажки у YV12, YUY2, RGB24, RGB32, Высококачественная конверсия YV12 в RGB.
В этом случае на выход изображение будет подаваться в том цветовом формате, в котором оно сидит в исходнике.
Практически всегда это будет YV12, но изредка возможно что-то другое, поэтому мы отметили все встречающиеся форматы.
Важно!
Все остальные флажки, в том числе серые, на этой вкладке нужно убрать!
Идём на вкладку "RGB conversion".
Ставим точку у "ITU-R BT.709".
Ставим флажок у "High quality YV12 to RGB conversion".
"Method" задаём "Force progressive", так как на выходе из ffdshow видео в данном случае всегда будет уже не интерлейсным.
В подразделе "Contrast" точку ставим у "Standard".
OK.
Устанавливаем последние версии Haali Media Splitter и Avisynth.
Перезагружаем компьютер.
Пишем вот такой скрипт для загрузки полученного ts-файла:
LoadPlugin("VagueDenoiser.dll")
DirectShowSource("Radiohead.ts", fps=30000./1001.)
AssumeFPS(30000,1001)
VagueDenoiser(nsteps=200, chromaT=0, percent=100)
ConvertToRGB24(matrix="rec709", interlaced=false)
Пояснения.
Параметр fps в DirectShowSource здесь строго обязателен.
Чтобы значение fps не было округлено до целого числа, в числителе и знаменателе дроби ставится точка (вспоминаем Фортран).
Параметр fps внутри DirectShowSource округляет значение fps до нескольких значащих цифр после запятой.
Разница в тысячные доли между дробью и округлённым значением на качество никак не влияет.
Но нам, жрецам, нужно, чтобы полученный avi-файл имел ещё и стандартный заголовок – хотя бы для того, чтобы такой авишник можно было соединять с другими стандартными авишниками с такой же частотой кадров.
Поэтому после DirectShowSource следует AssumeFPS.
Эта функция как раз и передаст, уже безо всяких округлений, стандартное значение fps.
Если частота кадров равна 23.976 кадров в секунду, то дробь должна быть 24000/1001.
Если частота кадров равна 25, то никакой дроби не нужно – так и пишем fps=25, а строка AssumeFPS в этом случае будет не нужна.
Читаем мою статью "Как полностью сохранить оригинальную цветовую гамму при кодировании кодеком XViD".
Загружаем скрипт в Virtual Dub.
Никаких изменений размера в Virtual Dub здесь делать уже не нужно!
Присоединяем звуковую дорожку.
Не забываем ввести смещение!
Кодируем в avi XViD и наслаждаемся древнеегипетским зрелищем.
Важное замечание.
Я рекомендую все файлы, которые можно загрузить в tsMuxer, (а не только сбойные), вначале демуксировать в беззвучный видео файл и аудиодорожку.
Далее аудиодорожку конвертируем в несжатый звук с расширением .wav программой GoldWave.
При помощи DirectShowSource загружаем в Virtual Dub конкретно полученный демюксированный ts-файл.
Звук присоединяем на стадии кодирования Виртуал Дабом.
Разница между работой с хорошими и сбойными файлами в том, что при конвертировании хороших файлов не требуется задействовать вкладку "Размеры" в ffdshow, используется декодер libavcodec, а не libmpeg2, и деинтерлейсинг при работе с хорошими файлами можно и нужно прописывать в скрипте.
И напоследок.
Когда вы закончите конвертировать сбойный файл, не забудьте в ffdshow убрать флажки у "Размеры" и "Деинтерлейс", а все декодеры переключить на libavcodec.
Если захотите выйти со мной на связь напрямую – то: nefezida53@mail.ru
Все мои статьи по различным аспектам работы с мультимедиа лежат здесь: http://www.cgtalk.ru/forum/forumdisplay.php?f=77
|
|
 |
|
 |
 |
|
 |
|
Цитата: Сообщение от Жреца В итоге мы получили один беззвучный видео файл с расширением .ts, один аудио файл и один мета-файл.
Открываем при помощи блокнота мета-файл.
Небольшое уточнение в результате таких махинаций мы никогда не получим этот мета-файл , он получается в результате нажатия на кнопку " Save meta file ", где потом указываем папку для сохранения , мелочь, но приятна!, да и сохранять в нем нет никакой необходимости, т.к.
В окошке Meta file виден сам текст, который в последствии будет сохранен в этом файле, если мы захотим, а сам timeshift может быть, а может и не быть , тоже все под вопросом и гарантий нет, что он покажет это смещение аудио
Если timeshift прописался, тогда запоминаем или сохраняем этот meta file
|
|
 |
|
 |
 |
|
 |
|
Цитата: Сообщение от Жреца То есть разрешение конечного avi XViD файла должно быть 704x396
Никаких изменений размера в Virtual Dub здесь делать уже не нужно!
Разве не надо применять требования кратности разрешения 32 по X и 16 по Y и таким образом в Виртуале или ffdshow ресайз окончательно выставляем 704 х 400 или пишем скрипт?
Что-то не понятно
|
|
 |
|
 |
|
|
|