Forums -> Работа с видео и аудио -> SVCD to AVI.
| Full Version

upan
Снял я файл с расширением mpg, ни медаплейер, ни бсплейер его прочитать не смогли, удалось открыть его только с помощью VLC, так так файл был больше 800 мб - я решил перегнать его в AVI, DrDIVX всю ночь что то пытался сделать, но так и не смог, нашёл другую программу по перегонке из формата в формат, в divx перегнать не смогла, начала ругаться на какойто dll, в xvid всё таки перегнал, НО вытянул изображение по вертикали, и после этого исходный файл тоже вытянулся в высоту, но стал проигрываться в любом плейере.
Вопрос: как вернуть высоту файла в нужный размер и перегнать файл из SVCD в AVI?
VxWorks
Открыть его ничто не могло потому что у тебя нет кодека для MPEG2. Установи что-нибудь типа PowerDVD и все будет нормально. По этой же причине он не конвертировался ни во что (надо же прочитать сначала, правильно?).
У VLC есть свой кодек, но он несовместим с остальным софтом.

Формат SVCD подразумевает, что картинка будет вытянута по вертикали, да еще и с интерлейсом. Поэтому, установи кодек для MPEG2, загони файл в VDub и сконвертируй во что тебе надо).
upan
VxWorks, просмотр работает, но дуб говорит что в файле не видео фреймов :( .
VxWorks
Это не есть хорошо... Может, файл битый?
Попробуй загнать его в какой-нибудь сильный видеоредактор, например, Vegas
upan
Vegasa пока нет, но Adobe Audition, открыл без проблем, только в вытянутом виде.
VxWorks
C Adobe я незнаком, но там наверняка есть что-то типа деинтерлейса :) Вот им и ресайзи
upan
Что то я оканчательно запутался, он ведь не везде вытянут, и я размер уменшить хотел.
VxWorks
Если это SVCD, то он должен быть вытянут по вертикали примерно раза в два по отношению к горизонтали.
upan
Иногда он 480Х352, а иногда 480Х576.
VxWorks
Там, где 576 - правильно. На этих кусках надо сделать деинтерлейс. Там, где 352... черт его знает. Странное число вообще.
:fear2:

Попробуй все-таки загнать его в Вегас.
upan
Вегас на работе стоит, там попробую.
valja
Обычный VirtualDub не умеет работать с MPEG2 файлами. Для этого есть специальный мод VirtualDub-MPEG2 (найдешь тут). Он имеет встроенный MPEG2 парсер и открывает MPEG2 файлы без дополнительных кодеков.

Если фильм стандартный SVCD, то размер кадра будет 480х480 (NTSC) или 480х576 (PAL). Этот кадр (вернее, активная часть кадра) соответствует обычному 4:3 кадру. Другими словами, из этого кадра вырезается часть 468х576 (для SVCD PAL) или 468х480 (для SVCD NTSC) и преобразуется в 4:3 кадр (типа 512х384, 448х336).
Set
QUOTE (valja @ 12-05-2004, 20:35)
Если фильм стандартный SVCD, то размер кадра будет 480х480 (NTSC) или 480х576 (PAL). Этот кадр (вернее, активная часть кадра) соответствует обычному 4:3 кадру. Другими словами, из этого кадра вырезается часть 468х576 (для SVCD PAL) или 468х480 (для SVCD NTSC) и преобразуется в 4:3 кадр (типа 512х384, 448х336).

А почему не ресайз: 480x576 -> 768x576 ? Прочитав несколько раз статью на Димонке, я до сих пор не понимаю смысл этого обрезания.

Сигнал выводимый на ТВ, как написано, содержит незначащие участки, но при чём тут они и SVCD (к примеру) ? Кодер при кодировании в MPEG-2 (для SVCD) эти участки не учитывает, а следовательно обрезание их будет искажать оригинальные пропорции.
valja
Set

Попробую объяснить. Форматы (S)VCD напрямую связаны с аналоговым телевидением и разработаны для дигитализации оного.

Возьмем PAL (он проще). В кадре 625 строк, из которых 576 содержат видеосигнал (остальное - кадровый гасящий имрульс итд). Каждая строка имеет длительность 64 мксек, из которых видеосигнал 52 мксек, остальное строчный синхроимпульс итд. Именно эти 52 мксек из этих 576 строк соответствуют нормальному 4:3 телевизионному кадру. В формате SVCD сигнал строки считывается с частотой 9 МГГц, то есть 52 микросекундам соответствует 468 точкек. То есть активная часть кадра (соответствующая 4:3 экрану) получается 468х576, и именно эту часть нужно приводить к 4:3.

Ширина дигитального кадра 480 точек выбрана по двум причинам. Во первых, в аналоговых системах начало строки может немного колебаться во времени, поэтому при дигитализации видеосигнала, считывание запускается чуть раньше реального начала строки и кончается чуть позже конца строки - чтобы обязательно захватить всю строку - то есть в каждой строке считывается не 52 мксек а 53.33 мксек. Поэтому при дигитализации аналогового TV сигнала, слева и справа всегда есть несколько "черных" пикселей - на кадре слева и справа видны черные вертикальные полоски.

Вторая причина связана с кодеком. Для MPEG1(2) кодека необходимо, чтобы ширина кадра делилась на 16 без остатка. 468 не делится на 16, а 480 делится, причем захватывает всю активную область 468 точек.

В результате и получается, что в полном дигитальном кадре 480х576, реальному телевизионному 4:3 кадру соответствует только часть 468х576, и края кадра нужно срезать до этого размера.

В NTSC ситуация аналогична, но чуть сложнее. Cтрока считывается с "запасом" (как и в PAL), но видеосигнал передается в течении 486 строк и активная (соответствующая 4:3 кадру) часть не помещается в дигитальный кадр из 480 строк. В результате 4:3 кадру соответствует дигитальный кадр 474х486. Поскольку реальная высота дигитального кадра 480 точек, у нас уже срезано 6 точек по вертикали, и для точной 4:3 пропорции нужно срезать соответствующее число точек и в строках (то есть по горизонтали) до ширины 468 точек. В результате получим кадр 468х480, соответствующий 4:3 пропорции.
valja
QUOTE (Set @ 12-05-2004, 18:02)
Сигнал выводимый на ТВ, как написано, содержит незначащие участки, но при чём тут они и SVCD (к примеру) ? Кодер при кодировании в MPEG-2 (для SVCD) эти участки не учитывает, а следовательно обрезание их будет искажать оригинальные пропорции.

Декодер (так же как и кодер) переводит пиксели в аналоговый TV сигнал с частотой 9МГц. То есть время одной SVCD строки в 480 пикселей будет 53.333 мксек, на TV экране же будет видно только 52 мксек. Черные поля, добавленные к дигитальному кадру (дополнение до 480) на экране видны не будут, они остаются "за кадром". Н экране будет видно как раз 468 точек каждой строки.

Искажение будет как раз тогда, когда 4:3 сигнал закодирован в полный 480х576 SVCD кадр. На экран телевизора поместится только 468 точек из 480, а для нормального 4:3 кадра должны были бы поместиться все 480. То есть, если корректный 4:3 дигитальный сигнал кодируется в SVCD, этот кадр должен быть приведен к 468х576, дополнен по краям до 480х576 и только тогда закодирован в SVCD. Тогда на экран телевизора будет выведена именно нужная часть кадра - 468х476.

EDIT:
Компъютерные декодеры же в аналог не конвертируют а просто переводят полный дигитальный SVCD кадр 480х576 в компъютерный 4:3 кадр (пропорции записаны в заголовке mpg файла) и на краях экрана как правило узкие черные полоски. Поэтому на компъютерном экране SVCD кадр, вообще говоря, слегка искажен (но формат SVCD ведь изначально и предусмотрен для TV а не для компъютеров).
Set
Хорошо, тогда к чему таблица и алгоритм преобразования, описанная тут: http://www.uwasa.fi/~f76998/video/conversion/ ?

Используя его считаем для SVCD PAL -> AVI: 480x576 (SVCD (2/3 of BT.601 sampling rate)) преобразуем в ***x576 ("True" computer square-pixel resolution):

480*(128/78)*(1/1) = 787,69230769230769230769230769231 , выравниваем по 16x16 и получаем размер конечного кадра: 784x480.
valja
QUOTE (Set @ 13-05-2004, 13:22)
Хорошо, тогда к чему таблица и алгоритм преобразования, описанная тут: http://www.uwasa.fi/~f76998/video/conversion/ ?  Используя его считаем для SVCD PAL -> AVI: 480x576 (SVCD (2/3 of BT.601 sampling rate)) преобразуем в ***x576 ("True" computer square-pixel resolution):  480*(128/78)*(1/1) = 787,69230769230769230769230769231 , выравниваем по 16x16 и получаем размер конечного кадра: 784x480.

В твоем примере две ошибки (вернее, ошибка и описка).

В пункте "3.1 How to use the table for conversions" (из приведенной выше ссылки) в подпункте 2. подчеркивается: "(Be sure to use the active picture values from the table, not the sampling matrix size values.) То есть при приведении кадра 480х576 к размеру ***х576 ("True" computer square-pixel resolution) нужно брать не полную ширину SVCD кадра 480 а "actual active picture size / width" - столбец 6 таблицы, где записано 468. У тебя же взята полная ширина кадра (sampling matrix width) 480 из первого столбца.

Если мы возмем правильную цифру 468 то получим:

468*(128/78)*(1/1) = 768

При заданной высоте кадра 576 мы получим кадр 768x576, что есть корректный 4:3 кадр ( 768:576 = 4:3 ), причем точно, без всяких дополнений/округлений.

А в последней строке у тебя просто описка - ты задал высоту кадра 576, а в конечном размере написал ошибочно 480. По твоему примеру должно было бы быть 784х576 (а не 784х480).

Главная ошибка при таких преобразованиях именно в том и состоит, что к формату 4:3 (иногда 16:9) преобразуется весь исходный (S)VCD кадр, а в действительности нужно брать только активную часть кадра.

Вся эта таблица и примеры преобразований приведены для конверсий между стандартами, приведенными в той же таблице (то есть (S)VCD <-> DVD и тому подобное). Но когда эти стандартные форматы преобразуются в какой то avi файл с квадратным пикселем, то нам достаточно знать, что именно активная часть (S)VCD кадра должна преобразовываться в 4:3 кадр типа 576х432, 512х384 или 448х336. Эти размеры, вообще говоря, не соответствуют стандартам, но пропорции кадра здесь точные.
Set
Все мои предыдущие расчёты один большой глюк - я перепутал высоты (480 <-> 576) и не только в конце, сорри, на примеры засмотрелся. :fear2:
Вот правильно, по формулам с сайта:

vertical_conversion_factor = target_active_picture_height/source_active_picture_height = 576/576 = 1/1
horizontal_conversion_factor = (source_aspect_ratio) / (destination_aspect_ratio) * (vertical_conversion_factor) = (128/78)/(1/1)*(1/1) = 128/78

target_sampling_matrix_width = horizontal_conversion_factor * source_sampling_matrix_width = (128/78)*480 = 787,69230769230769230769230769231 ˇ 784

target_sampling_matrix_height = vertical_conversion_factor * source_sampling_matrix_height = (1/1)*576 = 576

P.S. Активная часть учитывается в формуле в синей строке, причём только активная высота, ... выходит: 784x576.
valja
Все почти правильно, осталось сделать последний шаг. Ты получил новый полный кадр, но не весь полный кадр соответствует соотношению 4:3. Соотношению 4:3 соответствует лишь активная часть как старого так и твоего нового кадра. В твоем новом кадре активна вся высота 576, но из всей ширины активна только часть, пропорциональная 468 (из 480). То есть (128/78)*468 = 768.

Да, весь кадр 784х576, но в пропорции 4:3 только активная часть этого кадра 768х576. Теперь перейдем к подпункту 7 из цитированной статьи: " Check if the new size matches the target resolution's sampling matrix dimensions. If not, crop (i.e. cut at the edges) and pad (i.e., add black borders) accordingly so that it will." Если преобразование делается в AVI (для компътерного экрана), то из полного кадра придется срезать края, оставив только активнуюу часть 768х576, котрая точно соответствует пропорциям 4:3 компъютерного экрана.

Вся эта путаница с "активной частью" возникает из за того, что на компъютерном экране воспроизводится весь исходный кадр. Поскольку этот экран в пропорции 4:3, то в фильмах для компъютерного просмотра нужно лишь активную часть исходного кадра (468х576) приводить к полному компъютерному кадру (512х384, 576х432) , изображаемому во весь экран в правильной пропорции.

Совсем иначе дело с телевизионными стандартами. На экране телевизора отображается не весь кадр, а только его активная часть. То есть, при (S)VCD кадре 480х576 не экране телевизора видна только активная часть кадра - 468х576 (соответствующая 4:3 пропорции ТВ экрана), неактивная часть остается за рамками экрана.

Например, если переводить SVCD формат 480х576 в DVD формат, то по вышеприведенным формулам полный кадр преобразуется в 720х576. Но активные части (видимые на ТВ экране 4:3) - соответственно 468х576 и 702х576.

Если же ты хочешь перевести корректный 4:3 AVI кадр 512х384 (где весь кадр активный) в SVCD, то этот кадр нужно во первых перевести в размер 468х576 (активная часть SVCD кадра) а затем дополнить полученный кадр черными рамками до нужного размера 480х576. При просмотре на телевизоре эти черные рамки останутся за кадром, на экране будет лишь активная часть. Но на экране компъютера этот новый кадр будет слегка искажен, поскольку компъютерные проигрыватели выводят на весь экран полнй кадр 480х576 вместо активной части 468х576.

Извиняюсь за многословие, но объяснить короче, у меня, к сожалению, не получается. (Если это вообще получилось). :(



Set
valja

В который раз всё перечитав и изучив таблицу, до меня всё стало наконец доходить :sun: , спасибо за пояснения ! Теперь посмотрю, что с таблицей можно такого полезного сотворить... :insane:
upan
Читал, много думал (с).
А теперь можно для людей не сильно понимающих что там происходит.
Мне надой мой файл перегнать в .avi, его надо ресайзить? или просто перекодировать?
Set
В общем-то можно и в лоб ресайзить, без таблицы, обрезаний и добавлений ... ошибка в длинах будет не больше 2-3%. Плюс есть вероятность, что и источник был создан подобной конвертации, т.е. 100% качества при любом раскладе можно и не получить. ;)
valja
Кстати, при конвертации в AVI не нужно этих сложных вычслений, достаточно таблицы. Просто активнную часть кадра нужно конвертировать в полный 4:3 AVI кадр. То есть из стандартного SVCD кадра вырезается активная часть 468х576 (для SVCD PAL) или 468х480 (для SVCD NTSC) и преобразуется в 4:3 кадр (типа 512х384, 448х336).

И Set прав, очень часто неизвестно, как делался исходный файл. Но и в этом случае эти таблицы/коэффициенты служат как хорошие оценки/приближения.


upan
Вы сейчас с кем разговаривали? какие таблицы?
Вы что издеваетесь?
Set
upan

3 первых варианта, что в голову приходят:

1. Использовать Вегас, тогда соотношение сторон подгонять вручную не надо, он сам сделает.

2. VirtualDubMod и ресайзить "в лоб" начальную картинку до любого разрешения с соотношением сторон 4:3 (например 400x300 :) ). Если этого не сделать - картинка будет вытянута.

3.
QUOTE (valja @ 12-05-2004, 20:35)
Если фильм стандартный SVCD, то размер кадра будет 480х480 (NTSC) или 480х576 (PAL). Этот кадр (вернее, активная часть кадра) соответствует обычному 4:3 кадру. Другими словами, из этого кадра вырезается часть 468х576 (для SVCD PAL) или 468х480 (для SVCD NTSC) и преобразуется в 4:3 кадр (типа 512х384, 448х336).

Тоже VirtualDubMod. Это табличный способ, сначала нужно обрезать с боков картинки, т.ч. ширина станет 468 (первоначальная была 480) и ресайзит к любому размеру с отношением сторон 4:3.

P.S. Желательно чтобы конечная высота и ширина изображения были кратны 16.
upan
Первый вариант, поподробней.
upan
Ап, вы где?
Set
Что-то мне подсказывает, что тебе сначала надо попробовать Dr. DivX. ;)
upan
Dr. DivX всю ночь о чём то думал, так и не сделал ничего.
Newdjeen
Тогда Vegas
upan
А как в Вегасе? в двух словах где прочитать можно?
upan
Ну так как подсказать можете или нет? Воды налито много, а по ясней что то можно?
upan
Что то тихо тут стало, советов надовали кучу, а толком так ни чего и не сказали.
bvv
dvd2avi
upan
2bvv
Краткость - сестра таланта, но иногда лучше жевать чем говорить.