Конвертирование видео для КПК
С покупкой КПК возникла необходимость конвертировать фильмы в удобоваримый для него формат. Для пользователей офтопика, как обычно понаписана куча специализированных утилит (по крайней мере я постоянно натыкаюсь на их анонсы, пользоваться самому не доводилось). Для linux делается консольными утилитами, типа mencoder, ffmpeg, transcode и мордами к ним вроде acidrip, dvdrip и т.д. К сожалению acidrip и dvdrip умеют рипать только с DVD, как перекодировать уже сграбленный avi-файл я не нашел. Другие тулзы не пробовал, да и не интересно - интересней разобраться с консольными да и пользоваться ими удобней.
Информации по перекодированию везде хватает, в основном собирал по этому форуму, форуму на gentoo.org, документация на сайте mplayer-а и man mencoder. Какого-то полного и последовательного описания найти не удалось, так что приходилось связывать все в одно самому, ну и пробывать.
Особенности видео для КПК:
- Контейнер только avi, т.к. его понимает большинство плееров без проблем.
- Звук в mp3. Причина таже.
- Видео в mpeg4. Причина таже.
- Чем меньше результирующее разрешение видео -> тем меньше размер файла и меньше тормозов, но разумеется тем хуже качество.
В связи с этим были приняты следующие решения:
- Утилита для кодирования выбрана mencoder. ffmpeg узкоспециализирован, transcode менее популярен, да и описания по нему встретилось меньше. Возможно он чем-то лучше/хуже, но до нее у меня руки не дошли.
- Звук кодил mp3lame. CBR 96 k/bit. mono. Можно с битрейтами поэксперементировать, звук в деле конвертирования вопрос простой. Для себя я установил именно такой средний уровень. Битрейт должен быть постоянным (CBR) - особенность контейнера AVI, иначе может быть рассинхронизация с видео.
- Кодек видео libavcodec (он же lavc, является частью ffmpeg). Можно xvid - тоже хороший кандидат, но я не пробовал. msmpeg (он же divx3) устарел, x264 (H.264) более требователен к процу. Кодил в 2 прохода. Опции - mbd=2 v4mv trell, взято из man-ов как наиболее эффективное (и не слишком муторное для понимания).
- Оптимальное разрешение для себя я определил близкое к 320x240. При этом обе составляющие должны быть кратны 16 - особенность работы кодеков, требование не обязательное, но сильно желательное. Пропорции видео тоже портить нельзя. Поэтому часто перед уменьшением нужно подрезать кадр, как правило по ширине, т.к. все фильмы широкоформатные. Вообще если подрезать побольше, т.е. ближе к стандартному 4:3, то видео смотрится лучше - крупнее, но если отрезать слишком много, то можно и потерять важные детали из кадра. Как это делается на TV для меня загадка, но для себя я решил что немного подкрамсать бока бывает полезно. Комфортный битрейт на таких разрешениях также подбирается экспериментально, пока что сам я использую 400-600.
Еще об особенностях кодирования:
- Нельзя кодировать видео в отрыве от аудио. Т.е. нельзя использовать опцию nosound даже, если в дальнейшем звуковой поток будет присоединятся из другого файла и т.п. - это может привести к рассинхронизации видео. Поэтому на первом проходе я просто копировал звуковую дорожку (-oac copy), а на втором уже кодил в mp3 (-oac mp3lame). Вообще то я нигде не нашел чтобы так делали, обычно когда кодят в несколько проходах дорожку копирую на каждом, затем ее сжимают отдельно (можно тем же lame-ом), а уже затем сливают все в один файл, замещая оригинальную дорожку. Ну или типа того. Я попробовал на первом копировать, на втором кодить - так показалось удобней, побочных эффектов не обнаружил. Если у кого-то есть что возразить по этому вопросу - буду рад услышать.
- Обрезание и масштабирование делается фильтрами. Последовательность их указания соответствует последовательности применения.
- На всех проходах опции видео кодека должны абсолютно совпадать, кроме vpass.
Для примера использовал фильм "Фантастическая четверка 2". DVDRip 1,4 Gb (примерно 1000/400 видео/аудио xvid/ac3), разрешение - 720x304. Под рукой его сейчас нет, поэтому цифры по памяти.
Первый проход:
mencoder фч2.avi -o фч2_кпк.avi -oac copy -ovc lavc -vf crop=684:304:18:0,scale=288:128 \ -lavcopts vcodec=mpeg4:vbitrate=400:mbd=2:v4mv:trell:vpass=1
Второй проход:
mencoder фч2.avi -o фч2_кпк.avi -oac mp3lame -lameopts cbr=96:mode=3 -ovc lavc \ -vf crop=684:304:18:0,scale=288:128 -lavcopts vcodec=mpeg4:vbitrate=400:mbd=2:v4mv:trell:vpass=2
Или если доверить сжатие аудио lavc:
mencoder фч2.avi -o фч2_кпк.avi -oac lavc -ovc lavc -vf crop=684:304:18:0,scale=288:128 \ -lavcopts vcodec=mpeg4:vbitrate=400:mbd=2:v4mv:trell:vpass=2:acodec=mp3:abitrate=96
Но у меня почему-то lavc ругнулся на отсутствие кодека mp3 - возможно нужно что-то доустановить, разбираться не стал, тем более вариант с lame-ом работает превосходно.
В итоге получил файл размером 300 Mb (примерно 200/100), качество меня удовлетворило. На КПК проверил.
Дельные замечания приветствуются. Особенно советы по усовершенствованию процесса, так как я сам по сути с этим только начал разбираться.
P.S. Это не howto и не инструкция пользователя, это - описание моего опыта. Если кому-то будет это полезно - отлично, если кто-то может что-то подсказать мне - здорово.
- Для комментирования войдите или зарегистрируйтесь
Дельного
Дельного посоветовать ничего не могу, а просто коротко поделюсь тем, что делаю сам.
Иногда кодирую видео под смартфон. Использую ffmpeg и кодек xvid. Звук делаю mp3, моно, 96кб, если видео не музыкальное. Разрешение 208x176, битрейт 120 кб - для себя считаю достаточным. Готовый фильм получается до 100 мб.
Кодировал видео в формат 3gp. Получал очень даже не плохое качество и вполне приемлемый размер.
Не мог бы ты
Не мог бы ты написать опции к прогам как ты кодируешь. В точной последовательности. А то я в кодировании видио чайник... ПЛЗ.
________________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
Хорошая статья
Сабж
http://aquatique.rusunix.org/mencoding.html
покажи для ffmpeg
покажи для ffmpeg команду. я кодирую transcode. обычно тоже не ниже 300Mb.
пробовал mencoder тоже в пределах 300Mb.
хочу посмотреть как ffmpeg кодирует.
Мой опыт
Тоже, есть коммуникатор на WinMobile, HTC P3300.
Процессор у него экономичный Omap 850 на 200 MHz, для повседневных задач хватает, а вот неконверчённое видео смотреть некомфортно, даже разогнав проц до 273 MHz.
В качестве плейера использую TCPMP, ибо фриварен и всеяден.
В качестве контейнера для фильмов выбрал ogm. Звук риплю с DVD в WAV, потом в OGG с q от 0 до 3.
Видео кодирую mencoder, с параметрами:
кодек xvid;
битрейт 200-400 кбит/с, особой разницы не заметил, кроме уменьшения размера avi'шки;
разрешение привожу к размеру экрана коммуникатора 320х240.
Потом сливаю ogg с avi в ogm, и в коммуникатор. Фильм на 1,5 - 2 часа, получается чуnь больше 300 Mb, качеством больше чем доволен.
P.S. Сегодня Matrix перекодил, так один из VOB'ов с диска отказывался напрочь читаться (а там тот самый момент, где Новый с Тройняшкой вламывается в башню, Морфея спасать), и простым копированием, и образ не создавался, и dd ошибку чтения выдавал... Помог dvdrip, слил весь фильм. :)
P.P.S. Попутно вопрос. Как заставить mplayer играть нужную аудио дорожку из файла?
Когда, допустм, делаю, mplayer dvd:// -alang en то всё нормально
А когда с того же диска, mplayer video.vob -alang en то несмотря на параметр играет исключительно первая аудио дорожка.
Несколько субъективных впечатлений
Если кодировать с битрейтом меньше 192 Кбит/с, то "разваливание" изображения мешает смотреть кино.
А вот битрейт выше 256 Кбит/с даёт уже приемлимый просмотр, даже довольно динамичных сцен.
И вообще куда
И вообще куда mencoder пропал??? В портах нету....
______________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
Вообще-то туда где и был
Гы... (:
emerge mplayer
или http://www.mplayerhq.hu/design7/dload-ru.html
mplayer и так
mplayer и так стоит. А вот mencoder нет такого исполняемого файла в системе.
______________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
USE=encode emerge mplayer
USE=encode emerge mplayer
Как вот это вот
Вроде разобрался...
______________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
home / # mencoder
То что в последних двух строчках, Можно с ним как ни будь бороться???
______________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
H.264
Попробовал кодить видео в формате x264. Занятно.
Контейнер Matroska, звук в ogg.
Гигабайтный vob сконвертился в 23 Мб видеокусок (битрейт 256, scale 320:240 и crop), звук стерео ogg с качеством 2 около 10 мб. Итого 32 Мб отрывок.
С таким же битрейтом и звуком xvid получается около 45 Мб. Но качество получается похуже.
Но, xvid конвертился минут 20, a H.264 1,5 часа.
Надо будет
Надо будет попробовать. Скажи какими ты командами пользовался?
______________________________________________________
Linux home 2.6.19-gentoo-r5 #3 SMP Thu Jun 14 21:28:55 KRAST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux
Теперь и HTC TyTN :) Жалко на Windows Mobile 6.0 :(
Брал из блога
Процесс кодирования подсмотрел в блоге
http://strannick.blogspot.com/2007/04/x264.html
а опции кодека x264 нашёл поисковиком, ссылки под рукой нет.
Правда, видео закодированное H.264 немножко подтормаживает на HTC P3300, хотя времени разобраться и попробовать с разными параметрами не было.
И ещё, просматривал видео CorePlayer, так как TCPMP воспроизводить отказался, сначала отругался что у него нет кодека, доустановка кодека не помогла - плавного отображения не получилось, отдельные кадры и смена изображения рывками.
все-тки покажи
все-тки покажи полную команду чтобы без замутов можно было у себя поэксперементировать
В смысле,
В смысле, полную команду? Последовательность действий?
Сливаю vob'ы с dvd
cat *.vob > full.vob
Граблю mplayer'ом аудио в wav
mplayer full.vob -ao pcm:fast:file=full.wav -vo null
Перекодирую аудио в ogg с q 0-2
oggenc full.wav -q 2
Далее mencoder'ом перекодирую видео, как это делается в три прохода описано в блоге (ссылка выше), если фильм для КПК то указываю следующие параметры
-vf scale=320:240,crop=320:176:0:32 (crop для удаления чёрных полос из кадра, парметры получаю при проигрывании mplayer full.vob cropdetect)
на данный момент пробовал с постоянным битрейтом
-x264encopts bitrate=256
Далее всё по блогу, конверчённое видео в контейнер mpeg4 с помощью MP4Box, а потом mmg сливаю вместе видео и звук в матроску.
спасибо. и
спасибо. и сколько по времени декодит?
я так понимаю также как и в блоге в три подхода больше суток?
Нет, не больше.
Нет, не больше. :)
На моей машинке: 3 Гб оперативы, P4
Ггц, с постоянным битрейтом и в разрешение 320:240 полный vob около 5 часов. С постоянным качеством и переменным битрейтом целиком фильм не пробовал, а 16-ти минутный отрывок, около 2 часов.
Собсно один из
Собсно один из очень старых но действенных приемов т.н. "сжатия" видео это уменшение размера картинки. При незначительной растяжке артефактов не видать (ежели глаз не очень зоркий :).
Есть девайс
Так как у меня есть девайс и с экраном 220х176, то попробую и с таким разрешением видео на КПК погонять.
Кста, ещё субъективное впечатление: вроде как видео сжатое x264, с переменным битрейтом и постоянным quantizer(qp = 25 или 27), мой КПК ворочает пошустрее:
одна и та же динамичная сцена
- кодирование с постоянным битрейтом 256, coreplayer кажет fps 15,7.
- кодирование с qp=27, битрейт переменный, coreplayer кажет fps 22.
Хотя сравнение не совсем корректное, битрейт=256 это скорее qp=25. Но все же...
>Кста, ещё
>Кста, ещё субъективное впечатление: вроде как видео сжатое x264, с переменным битрейтом и постоянным quantizer(qp = 25 или 27), мой КПК ворочает пошустрее
Так и должно быть. Насколько помню битрейт, несжатого видео вычисляется просто как ширина*высота*глубина(цвет по русски)*количество кадров в секунду. То бишь количество бит, которое надо снязь с пзу в озу и обработать за 1 секунду. Собсно именно поэтому видео стали жать (качество, так сказать, портить). Аналоговая техника с этим справлялась на раз. А в цифровой скорость пзу раз в 20-30 менше чем скорость работы озу и проца вместе взятых. Вообще несжатое видео прилично кажется на настольных системах начиная с прошлого -позапрошлого года выпуска. Короче выгодней закачать поменше и распаковать нежели тянуть с винта (флэхи) сырец.
В качестве примера - атлон 3800 на сырцах отжирает свыше 90% цпу (тормозит нипадеццки). То же, но пожатое (сырец без потерь), - порядка 40-60%. Зажатое в мпег2 с переменным битрейтом и приличным качеством - процентов 5 -10.
Соответсвенно изобретателный народ (на ранних стадиях развития цифрового видео) уменьшал картинку до вменяемых размеров, понижал цветность или уменшал частоту кадров. Любой из этих параметров конкретно влияет на битрейт, а ежели перебрать то и на качество :). Затем на это безобразие стали накладывать специализированные алгоритмы сжатия. Основной аспект при выборе - скорость распаковки (скорость сжатия несущественна, таких быстрых на распакоку алгоритмов выше крыши, в том числе есть которые и без потерь). Когда сжимаешь постоянным битрейтом видео 25 кадров/сек, это означает, что за одну секунду система постарается выжрать с озу строго определенную порцию данных. Тормоза - произнак того, что подсистема ввода не справляется с поставленной задачей либо проц не справляется с распаковкой (он же еще и озу читает, и всякой ерундой занимается, плюс звук, опять жеж, нужен, ибо пора немого кино закончилась в 17 году). При переменном битрейте динамические сцены выглядят, как правило, приятней потому как быстрые они только для человека, а для шелезяки это всего лишь битрейт. Как правило ежели из 25 кадров смазать - заменит пару тройку - не особо заметно .
ЗЫ
Ежели есть возможность снизить нагрузку на систему (битрейт временно понизить), от чего бы им не воспользоваться.
Приличный ман на эту man mjpegtools
Пример
Кому интересно, пример динамичного видео (без звука) для КПК, кодировал так как описывал:
- длительность 45 с;
- формат H264;
- кадр 320х144;
- размер файла 1070882 байта.
the matrix
Конвертировать видео можно бесплатно прямо online
Совсем недавно открыл для себя новый ресурс www.all2convert.com, где можно совершенно бесплатно конвертировать видео фильмы музыку прямо online, при этом фильмы автоматически сохраняются на Вашем ПК. Очень удобно конвертировать видео с таких ресурсов, как youtube.com, video.google.com, break.com, lulu.tv, music.com, myspace.com.
Конвертировать видео можно в следующих форматах: AVI, MPEG, MPG, DVD, VOB, PSP, iPod, DivX, WMV, SWF, ASF, FLV, 3PG…
Всем советую эту халяву….
Редактирование vob-ов
Вот задался вопросом, каким образом можно выдрать кусок из vob'а, дабы не конвертить целиком диск.
Попробовал mencoder'ом:
mencoder in.vob -oac copy -ovc copy -o out.vob -ss 4900 -endpos 0:05:00
т.е. берём 5 минут начиная с кадра 4900.
Так вот при таком подходе, всё вырезается как надо и откуда надо, только вот видео на большом количестве сцен "рассыпается".
Кто-нибудь сталкивался с такой проблемой?
это так
это так задумано. Есть как ты наверно знаеш 2 типа кодров - первичный и вторичный. вот если ты попалбы на первичный - он целиком пишется - то всё ок. а ты начал со вторичного, а это значит что есть серия изменений - а опорной точки нет. Вот они рассыпались.
Т.е., грубо
Т.е., грубо говоря, попробовать найти первичный кадр?
ну вообще я
ну вообще я когда в винде резал divx то искал в редакторе - но там вообще может быть до 300 вторичных между первичными