Кодируем видео

Опубликовано

Приходилось ли кому-нибудь кодировать видео. Мне вот недавно пришлось. Процесс скажу я Вам долгий и кропотливый, хотя возможно это от неопытности и в следующий раз все получится быстрее.Как же я да такого дошел? Да все просто, скачал я как-то

с torrents.ru кино, которое оказалось в виде директории VIDEO_TS, скопированной по всей видимости с DVD диска. Все бы ничего, только вот ни любимый Gomplayer, ни Media Player Classic нормально играть сие медиа не хотели, вешались после 20-30 минут просмотра. Да и хранить как-то не очень удобно, одним файлом куда удачнее, ведь файлопомойки на винтах и так за глаза. В общем с такими мыслями я подошел к тому, что кино надо перекодировать.Соответственно тут же встал вопрос чем будем кодировать и в какой формат?Собственно инструмент в виде Mplayer (вместе с входящим в его комплект mencoder'ом и кучей поддерживаемых кодеков) был выбран без колебаний, т.к. не требовал поиска таблеток от жадности, ну лень мне последнее время этим заниматься. Жать видео было решено в H.264, как предназначенный для достижения высокой степени сжатия видеопотока при сохранении высокого качества, звук - в aac c помощью проверенного бесплатного кодера от Nero AG. Все получившееся хозяйства в итоге упаковалось в матрешку (файл .mkv) с помощью Mkvtoolnix.Путем гугления выяснил, что универсального рецепта по сжатию видео не существует, все подбирается индивидуально. Погуглив еще немного в поисках примеров и найдя пару статей в блоге Евгения Чайкина и на opennet'е, выбрал из фильма кусок подинамичнее и стал экспериментировать с опциями.Естественно первым делом фильм нужно было отмасштабировать дабы картинка не растягивалась при развороте на весь экран. Я масштабировал по высоте, ширину брал по аспекту, который у моего материала был 16:9. В результате имеем первую опцию при кодировании - scale=-2:576.Идем дальше. Неплохо бы отрезать черные полосы сверху и снизу (фильм-то широкоэкранный), запускаем

mplayer.exe c:\film.vob -aspect 16:9 -vf scale=-2:576,cropdetect

при этом видим в выводе командной стороки еще одну опцию, которую нужно будет применить при перекодировании, а именно - crop=1008:432:8:72.Собственно на этом мои собственные изыскания и закончились, дальше я пользовался чужими изысканиями, откопанными к анналах google, и после часов пяти тестирования нашел сочетание, которое меня устроило по соотношению размер файла/качество картинки.Пожалев что я не в Linux и полноценного шелла у меня нет я написал себе вот такой батник, который и запустил на выполнение

@echo offrem Определяем входной файлset IN=c:\film.vobrem Задаем опции кодирования видеоset VIDEO=-aspect 16:9 -vf pp=lb,softskip,hqdn3d=2:1:2,scale=-2:576,crop=1008:432:8:72 -ovc x264 -x264encoptsset VIDEO2=:turbo:qp=22:subq=2:8x8dct:partitions=all:me=umh:chroma_me:nr=500:trellis=2:frameref=4:bframes=3:b-pyramid:weightb:mixed-refs:direct_pred=auto:keyint=300:bime:psnr -nosound -of rawvideoset VIDEO3=:qp=22:subq=7:8x8dct:partitions=all:me=umh:chroma_me:nr=500:trellis=2:frameref=8:bframes=3:b-pyramid:weightb:mixed-refs:direct_pred=auto:keyint=300:bime:psnr -nosound -of rawvideorem Задаем опции извлечения звукаset AUDIO=-aid 128 -af resample=48000:0:2,volnorm=2:0.25-vc null -vo null -aopcm:waveheaderrem Пережимаем видео в три проходаmencoder %IN% %VIDEO% pass=1%VIDEO2% -o NULmencoder %IN% %VIDEO% pass=3%VIDEO3% -o NULmencoder %IN% %VIDEO% pass=3%VIDEO3% -o c:\film.264rem Извлекаем звуковую дорожкуmplayer %IN% %AUDIO%rem Кодируем звук в aacneroaacenc -if c:\audiodump.wav -of c:\film.m4arem Пакуем полученное в матрешкуmkvmerge" -o c:\film.mkv c:\film.264 c:\film.m4a

Естественно, в этом примере пути неверные, их нужно поправить по месту, но в остальном все в порядке.Данный батник на моем ноутбуке отрабатывал примерно полтора суток, может чуть побольше, однако при этом на компутере можно было вполне комфортно работать, так что заниматься кодирование видео лучше имея в активе мощную машинку, какой-нибудь core quard что ли...Думаю надо будет взять у родителей видеокамеру поматериться и продолжить эксперименты с пережатием видео, интерес проснулся.