Вы здесь

Конвертирование видео для КПК

С покупкой КПК возникла необходимость конвертировать фильмы в удобоваримый для него формат. Для пользователей офтопика, как обычно понаписана куча специализированных утилит (по крайней мере я постоянно натыкаюсь на их анонсы, пользоваться самому не доводилось). Для 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 :(

покажи для ffmpeg команду. я кодирую transcode. обычно тоже не ниже 300Mb.
пробовал mencoder тоже в пределах 300Mb.
хочу посмотреть как ffmpeg кодирует.

И вообще куда 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 :(

Вроде разобрался...
______________________________________________________
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 /mnt/video/Video/Без\ Лица.avi -o /Без\ лица.avi -oac mp3lame -lameopts cbr=96:mode=3 -ovc lavc -vf crop=480:208:8:10,scale=288:128 -lavcopts vcodec=mpeg4:vbitrate=400:mbd=2:v4mv:trell:vpass=2
MEncoder dev-SVN-rUNKNOWN-4.1.1 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (Family: 15, Model: 3, Stepping: 3)
MMX supported but disabled
MMX2 supported but disabled
SSE supported but disabled
SSE2 supported but disabled
CPUflags: Type: 15 MMX: 0 MMX2: 0 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0
Скомпилировано для x86 CPU со следующими расширениями:

успех: формат: 0  данные: 0x0 - 0x2ac7a22e
Обнаружен AVI формат файла!
[aviheader] Найден видео поток, -vid 0
[aviheader] Найден аудио поток, -aid 1
VIDEO:  [DIVX]  496x224  24bpp  23.976 fps  579.2 kbps (70.7 kbyte/s)
[V] формат:3  fourcc:0x58564944  размер:496x224  fps:23.98  ftime:=0.0417
==========================================================================
Открываю декодер аудио: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)
Выбран аудиокодек: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
Открываю видео фильтр: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
Открываю видео фильтр: [scale w=288 h=128]
Открываю видео фильтр: [crop w=480 h=208 x=8 y=10]
Crop: 480 x 208, 8 ; 10
==========================================================================
Открываю декодер видео: [ffmpeg] FFmpeg's libavcodec codec family
Выбран видеокодек: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
==========================================================================
Выбрано MP3 аудио
[mpeg4 @ 0x8665b80]looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag
VDec: запрос vo config - 496 x 224 (предпочтимое цветовое пространство: Planar YV12)
VDec: использую Planar YV12 в качестве выходного csp (не 0)
Movie-Aspect не определён - премасштабирование не применяется.
SwScaler: reducing / aligning filtersize 8 -> 7
SwScaler: reducing / aligning filtersize 8 -> 7
SwScaler: reducing / aligning filtersize 8 -> 7
SwScaler: reducing / aligning filtersize 8 -> 7
[swscaler @ 0x86631c8]SwScaler: BICUBIC scaler, from yuv420p to yuv420p using C
[swscaler @ 0x86631c8]SwScaler: using X86-Asm scaler for horizontal scaling
[swscaler @ 0x86631c8]SwScaler: using n-tap C scaler for vertical scaling (YV12 like)
[swscaler @ 0x86631c8]SwScaler: 480x208 -> 288x128
videocodec: libavcodec (288x128 fourcc=34504d46 [FMP4])
[VE_LAVC] Выбрано высококачественное кодирование (не в реальном времени)!
Запись заголовка...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Запись заголовка...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Pos:   0.9s     21f ( 0%) 18.36fps Trem:   0min   0mb  A-V:0.083 [0:63]
Пропускаю кадр!
Pos:   1.5s     36f ( 0%) 24.84fps Trem:   0min   0mb  A-V:0.084 [279:64]
Пропускаю кадр!
mencoder: ratecontrol.c:696: ff_rate_estimate_qscale: Assertion `picture_number<rcc->num_entries' failed.
Аварийный останов

То что в последних двух строчках, Можно с ним как ни будь бороться???
______________________________________________________
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 :(

Совсем недавно открыл для себя новый ресурс 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…

Всем советую эту халяву….