Показать сообщение отдельно
Старый 18.12.2011, 16:29   #1368
Карполя
Техподдержка
Медаль пользователю. ЗОЛОТОМедаль автору. ЗОЛОТО Форумчанин
Аватар для Карполя
Регистрация: 25.01.2008
Адрес: Санкт-Петербург
Сообщения: 1,314
Репутация: 298
Никак. Сам принцип сжатия MPEG подразумевает, что резать можно только с ключевого кадра (это полный кадр, содержащий всю информацию об изображении, а в остальных - только разность между изображением текущего кадра и ближайшими клбючевыми). И ЛЮБОЙ фрагмент должен начинаться и заканчиваться обязательно ключевым кадром.

Так что при прямопотоковом копировании вырезать произвольный фрагмент невозможно, т.к. кадры в этом режиме не перекодируются и программа автоматически расширяет выбранный вами фрагмент так, чтобы в него вошли ближайшие ключевые кадры перед меткой начала и после метки конца.

Некоторые перекодировщики якобы позволяют вырезать с любого кадра, но они попросту обманывают пользователя: декодируют фрагмент и заново кодируют его, создавая из помеченных вами кадров начала и конца ключевые кадры. Но при этом сами назначают параметры кодирования и отнюдь не те же, что были в исходном фильме (т.к. параметров кодирования в исходном файле нет; их должен задать пользователь вручную, а автоматически кодировщик назначет параметры по своему усмотрению, в результате чего мало того, что фрагмент будет закодирован совершенно не с теми параметрами, что исходный - а это не пригодно для семпла, т.к. семпл в результате не покажет то качество кодирования, что было в исходном видео, - да еще такое перекодирование в любом случае ухудшит качество - ведь используются кодеки с потерями.

VirtualDub предназначен для профессионального кодирования, поэтому на такой обман не идет - считается, что его пользователь грамотный, и если ему нужно вырезать фрагмент не по ключевым кадром, он это будет делать сам, вручную.

При этом перекодировщик не сам определяет, какие кадры должны быть ключевыми - это делает кодек (любой перекодировщик - это только оболочка, которая позволяет в удобной форме задать параметры кодирования, а непосредственно для кодирования вызывает кодер и передает ему параметы). Так что возможность принудительно вставить ключевые кадры точно в нужном месте зависит от используемого кодека.

В частности, в кодек DivX такая возможность не заложена - он определяет, какие кадры должны быть ключевыми только автоматически.

Но такая возможность есть у кодека XviD. Так что я, например, при необходимости точно вырезать фрагмент (например, для удаления рекламы из телепередачи с точностью до кадра) ставлю режим полной обработки, выбираю кодек XviD, задавая огромный битрейт - примерно 5000 - 6000 кб/с - потери качества при таком битрейте минимальны и практически незаметны (чтобы не вносить дополнительное ухудшение из-за лишнего перекодирования) и указываю кодеку номера кадров, в которых впоследствии нужно будет ставить метки начала и конца фрагментов, подлежащих удалению или вырезанию. Затем кодирую.

После этого открываю созданный файл (т.е., новый весь фильм) и уже в нем помечаю нужные фрагменты (теперь это можно сделать точно, т.к. в начале и конце фрагментов кадры ключевые). После чего кодирую нужным кодеком (например, DivX) с требуемыми параметрами.

Но еще раз повторюсь, что для создания семпла такой метод не пригоден, т.к. семпл должен иметь те же параметры (именно те же, а не перекодированный с такими же параметрами, поскольку задаваемые пользователем параметры - это лишь задание кодеку, что надо получить в результате, а кодек уже сам решает, какой кадр с какими параметрами кодировать, и часто даже при повторном кодировании, например, на следующий день, того же исходного материала с теми же параметрами приводит к другому результату), что и исходный материал и семпл надо делать ТОЛЬКО в режиме прямопотокового копирования!
  Ответить с цитированием