Показаны сообщения с ярлыком screencasts. Показать все сообщения
Показаны сообщения с ярлыком screencasts. Показать все сообщения

2012-04-12

h263 и mpeg в каком случае использовать?

матрицы
H.263 - обеспечивают лучшее сжатие, но дающие более высокую размытость
MPEG - более четкая картинка и меньше информации о цвете



http://rutracker.org/forum/viewtopic.php?t=2665308
amadegammus


Ради эксперимента, как то один и тот же фрагмент видео проконвертировал в DivX и XviD - визуально разныцы не увидел. Правда конвертировал Total Converter(ом) со стандартными настройками.
Т.к. DivX входит в сборки кодеков K-lite Codek Pack (правда не во все), то он поэтому и является относительно бесплатным.
h264 - замечательный кодек, только его не проигрывают большинство "железных плейеров".


Harper666


Тоже ради эксперимента - разницу видно сразу, хотя это ессесно ничего не доказывает:
Битрейт одинаковый = 890 kbps.


GarfieldX


Без разницы, везде фигня получается
Битрейт маловат.
К тому же матрица MPEG предназначена для более высоких битрейтов.
Матрица H264 все таки H.263...


Harper666


Матрица H264 все таки H.263...

На высоких битрейтах вообще нет разницы чем кодировать. По крайней мере я не видел.
К тому же матрица MPEG предназначена для более высоких битрейтов
То есть с высоким битрейтом ты вседа будешь MPEG использовать? H.263 хуже повлияет на качество картинки в таком случае?


GarfieldX


То есть с высоким битрейтом ты вседа будешь MPEG использовать?
Матрица MPEG лучше чем H.263, но требует большего битрейта. Всегда ей пользуюсь.


Harper666


GarfieldX
Понял. Спасибо.


kr60502


подскажите пож. - на каком битрейте нужно переходить с матрицы MPEG на H.263


manowar_gub


на каком битрейте нужно переходить с матрицы MPEG на H.263
на том, где видно явные артефакты компрессии вида "звон" по краям объектов изображения или квадратов квантизации на статичном фоне


kr60502


спасибо, а циферка какая (хоть примерно)


GarfieldX


спасибо, а циферка какая (хоть примерно)
~900Kbit

2012-04-08

Что такое матрицы распределения квантов и с чем их едят.

Источник http://rutracker.org/forum/viewtopic.php?t=760085

Что такое матрицы распределения квантов и с чем их едят.
Несмотря на то, что популярность стремительно набирают кодеки нового поколения, старому доброму XviD ещё жить и жить, пока люди не повыбрасывают на помойку свои старые консервные видео проигрыватели. Это ещё боюсь не год и не два. В общем дело вкуса, лично я сам давно для себя определил формат коллекции - AVC.

Тем не менее, XviD не так мало может, как может показаться на первый взгляд и у него есть одно неоcпоримое преимущество перед AVC(помимо консервной совместимости):
XviD - кодек, проверенный временем, стабильный и надёжный
Вот решил немного поделиться опытом кодирования с помощью XviD и ввести ещё несведущих в азы видеокомпресии. Если вы ничего не знаете о том, как работают видеокодеки - дальше лучше не читать, будет туго и бессмысленно.
Всем кому интересно - добро пожаловать. Материал собран с использованием информации, собранной по крупицам с doom9, моих комметнариев и дополнений. За подробные исследования respect Sharktooth, Didee, Dark Shikari и прочим мега кодерам с doom9

Приступим...

Что такое макроблоки? Плохо если вы не в курсе. Каждый фрейм mpeg4 поток состоит из типичных макроблоков размером 16x16 или 32x32. Каждый из макроблоков состоит в свою очередь из блоков 8x8, вокруг которых и пляшет алгоритм видеокомпрессии.
Самое ценное в видеокомпрессии - коэффициент сжатия, поэтому вместо того, чтобы хранить блоки в виде растрового изображения, макроблок хранится в виде сложной формулы, которая имитирует оригинальное изображение настолько точно, насколько это возможно в отведённые для конкретного макроблока биты.
Человеческий глаз наиболее чувствителен к изменениями в яркости изображения, чем к искажениям в цветах. Поэтому в mpeg4 заложено изначально резервировать больше битрейта для точной передачи яркости, чем для достоверной передачи цветов.
Каждый блок 8x8 представляется не в виде пикселей, а в виде единственной величины, которая передаёт среднее значение яркости или цвета в массиве 8x8, а все остальные значения представляют собой математические зависимости, в которых находится исходный блок от заданной величины яркости и цвета.
Другими словами, для конкретного макроблока задаётся некое значение, из которого путём математических преобразований восстанавливается блок целиком таким образом, чтобы он максимально был похож на исходный.

Всё остальное место занимают пиксели, точнее то, что мы привыкли называть пикселями, а на самом деле просто данные, которые передают геометрические детали изображения.
Присмотримся к блоку повнимательнее:
X X X X X X X X

X X X X X X X X

X X X X X X X X

X X X X X X X X

X X X X X X X X

X X X X X X X X

X X X X X X X X

X X X X X X X X
Значение в верхнем левом углу передаёт среднее значение макроблока. Т.е. если макроблок описывает кусочек неба, то грубо говоря в этом углу будет храниться среднее значение голубого цвета.
Вправо и вниз от этого угла расходятся значения отклонений от заданной величины.
Сверху вниз или справа налево в блоке по нарастающей описываются детали.
Если обратиться к исходному блоку 8x8, то детали трансформируются в значения в зависимости от частоты конкретной детали. Понятие частоты ту имеет несколько иной смысл. Чем тоньше деталь, тем выше частота, которая её описывает.
Таким образом, чем правее позиция в блоке, тем выше частота и соответсвенно более точно передаётся конкретная деталь.
Например:

В блоке 8x8 с кусочком неба почти нет деталей, поэтому частота в этом блоке очень низкая.

В блоке 8x8 в который попали 5 или 6 спичек появляется больше деталей, но не так много, поэтому частота такого блока находится на среднем уровне.

Блок 8x8, в который попали волосы крупным планом или трава или кусты, насыщен мелкими деталями, поэтому его частота высока.
Как видно, значение в блоках передают горизонтальные и вертикальные частоты деталей исходной картинки.
Формула, которая преобразует детали в частоты макроблока, называется Дискретная Косинусоидальная Трансформация (по англ. Discrete Cosine Transformation или DCT)
Теперь посмотрим на макроблок с учётом того, что мы уже о нём знаем.
Код:
Среднее значение цвета и яркости всего блока

                        I

                        I   Низкие частоты (крупные детали)

                        I   I

                        I   I     Средние частоты (обычные детали)

                        I   I      I

                        I   I      I

                        I   I      I         Высокие частоты (самые мелкие детали)

                        I   I      I         I

                        X--X--X--X--X--X--X--X

                        X--\--X--X--X--X--X--X

Низкие частоты -------- X--X--\--X--X--X--X--X

                        X--X--X--\--X--X--X--X

Средние частоты ------- X--X--X--X--\--X--X--X

                        X--X--X--X--X--\--X--X

                        X--X--X--X--X--X--\--X

Высокие частоты --------X--X--X--X--X--X--X--A

                                             I

                                             I

                           Математическое описание самой смой тонкой

                           детали по горизонтали и вертикали
Всё, с блоками надеюсь всё понятно, теперь перейдём к главному: квантовым матрицам.
Матрица распределения квантов (МРК) выглядит примерно так :
Код:
08 16 19 22 26 27 29 34

16 16 22 24 27 29 34 37

19 22 26 27 29 34 34 38

22 22 26 27 29 34 37 40

22 26 27 29 32 35 40 48

26 27 29 32 35 40 48 58

26 27 29 34 38 46 56 69

27 29 35 38 46 56 69 83
Теперь попробуем описать в простых словах всю сложность процесса. Для начала разберёмся что такое в принципе распределение квантов. Распределение квантов - это процесс выборочного уничтожения информации из первоисходника с как можно меньшими изменениями в визуальных ощущениях от просмотра. Каждое значение в МРК это порог для DCT формулы для преобразования описания детали в частоту. Т.е. МРК описывает на какой частоте детализации стоит выкинуть исходный материал из процесса компрессии. Все детали ниже этого порога будут просто проигнорированы при кодировании и бесследно потеряны. В этом и состоит суть компрессии с потерями. Детали просто теряются при компрессии, до того порога детализации, который указан в МРК. Как видно по матрице в примере, чем правее и ниже, тем выше порог потери детализации. Чем мельче деталь, тем больше места она займёт в видеопотоке, в противном случае она просто будет безвозвратно утеряна.
Чтобы приблизиться к пониманию процесса, опустимся до абстракции:

Представим себе блондинку с длинными волосами, стоящую перед светло-серой стеной за 2 прутьями тюремной решётки.

Представим, что это изображение помещается в блок 8x8
Блондинка и светлая стена будут близки по контрасту, поэтому разница между средними значениями яркости и контраста и их максимальными значениями будет невелика.
Значения в блоке будут ниже и практически могут не преодолеть порога потери детализации. Это значит, что разница между участками будет минимальной и картинка превосходно будет поддаваться компресии.
Если бы стена была чёрной, контраст был бы намного больше и разница между средними значениями и максимальными будет зашкаливать. Если в такой блок не попадёт достаточно высокий порог из значений МРК, то либо блондинка может оказаться брюнеткой за счёт стены за ней, либо стена из чёрной станет серой, а скорее всего обе потеряют свой первоначальный цвет. В любом случае при более высоком контрасте через порог DCT пройдёт значительно больше деталей и попадут дальше в конвеер видеокомпрессора, который уже будет думать как же это всё запаковать поуютнее.
Тюремные прутья перед девушкой - детали, но совсем не мелкие, они пойдут в макроблок по низкой частоте.

(По крайней мере, если они будут отличаться цветом от блондинки)
Мы забыли, что у девушки есть волосы и разумеется волосы имеют сложную текстуру. Поэтому волосы пойдут в макроблок по высокой частоте.
Как видно по МРК, порог для высоких частот намного выше, чем для низких. Поэтому, чтобы волосы попали в видеопоток, они должны значительно отличаться от среднего значение цвета, иначе, могут просто слиться со средним фоном. Поэтому если разница со средним значением невелика (как в этом случае), детализация волос просто пропадёт на этом этапе. Ситуацию могут спасти разноцветные ленточки в волосах, которые увеличат контраст. Таким образом, чтобы детали на выходе получились чётким и резким, контраст деталей должен быть как можно дальше от среднего значения, иначе чёрная кошка утонет в чёрной комнате. Это упрощённое представление процесса видеокомпрессии. Для полноты картины надо добавить, что всё, вышесказанное справедливо для I-фреймов. МРК к p- b- фреймам применяется не напрямую, а после распределения векторов направления движения, что должно учитываться при составлении матриц.
Теперь подбираемся к главному. XviD кодек (забудем про DivX вообще, для меня он умер ) по умолчанию использует либо H.263 матрицу либо MPEG. H.263 даёт на выходе более размытую картинку с более точными значениями яркости/цветов, а MPEG передаёт больше деталей, но теряет больше параметров яркость-цвет. Эти матрицы по-умолчанию хороши в среднем для обычной штамповки. С помощью спец. подобранных матриц можно значительно улучшить результаты работы видеокомпрессора за счёт снижения сжимаемости картинки. Как видно, матрица в примере - как раз снижает сжимаемость, значение в среднем очень низкие.

Для чего могут использоваться квантовые матрицы:
Матрица для максимального сжатия устанавливает жёсткий порог деталей, чтобы битрейт расходовался более эффективно
В идеале можно разработать матрицы для конкретного типа видеоряда: космические баталии, мультики, аниме т.д.
С помощью матриц можно фильтровать шумы и артефакты, вычислив помеховые частоты можно добиться довольно точной фильтрации
В заключение, привожу матрицы, разработанные уважаемым г. Sharktooth, как на мой взгляд наиболее удачные в качестве исходного материала для экспериментов. Лёгкая подгонка этих матриц к конкретному фильму - и XviD будет творить чудеса.
EQM v3hr
Матрица для высоких битрейтов для кодирования DVD в полный анаромфный размер на битрейтах 1600Kbps+ (для фильмов со средним экншном)
Код:
8 10 10 10 11 11 13 15

10 10 10 10 11 12 14 16

10 10 11 11 13 14 16 18

10 10 11 13 15 17 19 23

11 11 13 15 19 22 26 29

11 12 14 17 22 28 34 41

13 14 16 19 26 34 44 55

15 16 18 23 29 41 55 72
15 15 15 15 16 17 19 22

15 15 15 15 16 18 20 23

15 15 16 17 19 20 23 27

15 15 17 19 22 25 29 33

16 16 19 22 28 32 38 43

17 18 20 25 32 41 50 60

19 20 23 29 38 50 66 81

22 23 27 33 43 60 81 106
http://www.webalice.it/f.corriga/CQMs/eqm_v3hr.xcm
EQM V3LR:
Матрица для низких битрейтов до 1500Kbps для кодирования DVD на полном анаморфном разрешении. На более высоких битрейтах - отличный выбор для фильмов насыщенных экшном.
Код:
8  14  14  14  15  15  18  21

14  14  14  14  15  16  19  22

14  14  15  15  17  19  22  25

14  14  15  18  21  23  27  31

15  15  17  21  26  30  35  40

15  16  19  23  30  38  46  56

18  19  22  27  35  46  61  76

21  22  25  31  40  56  76  99
19  19  19  19  20  21  24  28

19  19  19  19  20  22  26  29

19  19  20  21  23  26  29  34

19  19  21  24  28  31  36  42

20  20  23  28  35  41  48  55

21  22  26  31  41  51  63  76

24  26  29  36  48  63  83 103

28  29  34  42  55  76 103 134
http://www.webalice.it/f.corriga/CQMs/eqm_v3lr.xcm
EQM V3ULR
Матрица для очень низких битретов:

- уменьшает артефакты насколько это возможно сохраняя хорошую картинку на низких битрейтах

- Одна из лучших матриц для кодирования на 1CD
Код:
8  14  20  28  38  45  56  65

14  20  26  37  44  56  64  70

20  26  36  43  55  64  70  75

28  37  43  54  63  70  76  79

38  44  55  63  70  77  80  83

45  56  64  70  77  81  84  88

56  64  70  76  80  84  89  95

65  70  75  79  83  88  95 102
18  19  20  22  24  26  28  30

19  20  22  24  26  28  30  34

20  22  24  26  29  30  34  40

22  24  26  30  32  36  44  50

24  26  29  32  38  48  55  60

26  28  30  36  48  58  74  80

28  30  34  44  55  74  92 104

30  34  40  50  60  80 104 128
http://www.webalice.it/f.corriga/CQMs/eqm_v3ulr_rev3.xcm
EQM V3UHR

Матрица для очень высоких битрейтов для кодирования DVD в полный анаморфный размер на очень высоких битрейтах. Точка насыщенности за счёт сжимаемости на 30% выше чем в матрице Didees 6of9
Код:
8 8 8 8 8 8 10 11

8 8 8 8 8 9 10 12

8 8 8 8 9 10 12 14

8 8 8 10 11 13 15 17

8 8 9 11 14 16 19 22

8 9 10 13 16 21 25 31

10 10 12 15 19 25 33 41

11 12 14 17 22 31 41 54
10 10 10 10 10 10 10 11

10 10 10 10 10 10 10 12

10 10 10 10 10 10 12 14

10 10 10 10 11 13 15 17

10 10 10 11 14 16 19 22

10 10 10 13 16 21 25 31

10 10 12 15 19 25 33 41

11 12 14 17 22 31 41 54
http://www.webalice.it/f.corriga/CQMs/eqm_v3uhr_rev2.xcm
EQM V3EHR

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

Сфера применения: создание резервных копий исходника или HD, не прибегая к кодекам, работающим по принципу "без потерь"
Код:
8   8   9  11  13  13  14  17

  8   8  11  12  13  14  17  18

  9  11  13  13  14  17  17  16

11  11  13  13  13  17  18  20

11  13  13  13  16  17  20  24

13  13  13  16  17  20  24  29

13  12  13  17  19  23  28  34

12  13  17  19  23  28  34  41
  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8

  8   8   8   8   8   8   8   8
http://www.webalice.it/f.corriga/CQMs/eqm_v3ehr.xcm
P.S.: Не претендую на абсолютную точность изложенной инфоромации, если найдёте в чём меня поправить, буду рад.

2011-05-17

Чем и как делать скринкаст UPDATED-2012-02-29

Для записи происходящего на экране я использую ffmpeg:

http://en.wikipedia.org/wiki/FFmpeg
http://ffmpeg.org/


Например так:

ffmpeg -r 7 -g 120 -s 1280x1024 -f x11grab -i :0.0 -s 1280x1024 -vcodec mpeg4 -sameq screencast.avi

-r 7 - 7 кадров в секунду, для скринкаста вполне достаточно, можно и 5
-s 1280x1024 - записываемое разрешение, обычно я делаю полный экран - максимальное разрешение вашего монитора, и потом обрезаю в другой программе, можно сделать меньше, тогда будет записан левый верхний угол,
-vcodec mpeg4 - кодек MPEG4, обязательно используйте его если планируете редактировать видео в последствии(обрезать, изменить размер, наложить звук, например записанный во время записи экрана)
-sameq - означает кодировать с качеством оригинала, для скринкаста самое-то
-f x11grab - источник видео, экран. Те кто все еще на Windows должны заменить x11grab на что-то другое, попробуйте спросить на google

Примеры для записи cо звуком из микрофонного входа:
ffmpeg -isync -r 25 -g 120 -s 400x304 -f x11grab -xerror -i :0.0+3,70 -vcodec mpeg4 -sameq -f alsa -i front -acodec libmp3lame -ab 128k -ac 1 -y screencast.avi
ffmpeg -isync -r 25 -g 120 -s 400x304 -f x11grab -xerror -i :0.0+3,70 -vcodec mpeg4 -sameq -f oss -i /dev/dsp -acodec libmp3lame -ab 128k -ac 1 -y screencast.avi
arecord -l
ffmpeg -isync -r 25 -g 120 -s 400x304 -f x11grab -xerror -i :0.0+3,70 -vcodec mpeg4 -sameq -f alsa -i hw:0,0 -acodec pcm_s16le -ac 1 -y screencast.avi

ffmpeg -an -f x11grab -r 15 -s 1600x1200 -i :0.0 -vcodec libvpx -s 1024x768 -threads 4 -y "'date +%F--%k-%M'.webm"
ffmpeg -an -f x11grab -r 15 -s 1600x1200 -i :0.0 -vcodec qtrle -s 1024x768 -threads 4 -y "'date +%F--%k-%M'.mov"
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 400x300 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 -t 5 -y screencast.avi
Предустановки (-vpre) я нашел в каталоге: /usr/local/share/ffmpeg


Еще несколько примеров:

ffmpeg -f x11grab -vc theora -s 1280x1024 -r 12 -b 2000000 -i :0.0 ./screencast.ogv

-vc theora - правильный кодек, для истинных ценителей :)
-b 2000000 - установить битрейт видеозаписи


ffmpeg -r 7 -g 120 -s 1280x1024 -f x11grab -i :0.0 -s 1280x1024 -vcodec qtrle -sameq screencast.mov

-vcodec qtrle - кодек для мак-оводов


ffmpeg -r 7 -g 120 -s 1280x1024 -f x11grab -i :0.0 -s 1024x768 -vcodec qtrle -sameq screencast.mov

-s 1024x768 - во втором случае означает, будет записано разрешение указанное в первом параметре т.е. 1280x1024, но вся запись будет ужата до 1024x768. Не рекомендую это делать, в крайнем случае сделайте это в видео редакторе


PS:
Под Windows так-же имеется ffmpeg, однако не знаю возможно-ли там записать экран, думаю google поможет, пару windows примеров:

ffmpeg.exe -i youtube_flash_video.flv -r 15 -b 200kbit/s -s 176×144 -vcodec h263 -ar 8000Hz -ab 10.2k -acodec libamr_nb for_mobile.3gp

ffmpeg.exe -i youtube_flash_video.flv -vcodec mpeg4 divx_youtube_movie.avi



У меня нет микрофона, по этому для записи звука использую обычный mp3 плеер

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


Для редактирования звука использую Audacity

http://ru.wikipedia.org/wiki/Audacity
http://audacity.sourceforge.net/?lang=ru


Для редактирования видео

Обрезание вначале и в конце записи, обрезание краев экрана, наложение звука - Avidemux
http://ru.wikipedia.org/wiki/Avidemux
http://avidemux.org/

Еще стоит взглянуть на OpenShot
http://ru.wikipedia.org/wiki/OpenShot_Video_Editor
http://openshot.org/
и Kdenlive
http://ru.wikipedia.org/wiki/Kdenlive
http://kdenlive.org/


Весь представленный софт opensource, можно пользоваться бесплатно, и самим влиять на разработку, спасибо добрым людям.


ОБНОВЛЕНИЕ:

Для отображения нажатых клавиш можно использовать следующие программы:

http://code.google.com/p/key-mon/
http://linux.softpedia.com/progScreenshots/key-mon-Screenshot-53024.html
http://code.google.com/p/key-mon/downloads/list
для openSUSE есть в репозитарии: http://download.opensuse.org/repositories/X11:/Utilities

и

https://launchpad.net/screenkey
https://launchpad.net/screenkey/+download

Я пользуюсь key-mon.

2011-04-24

Скрипт перекодирования всех видео файлов в текущей папке в формат Android 'а

Скрипт перекодирования всех файлов в текущей папке в формат Android'а и бытового DVD player'а.
имеет опцию(--screencast) для скринкастов(сохранение качества, по возможности), использую для railscasts.com, и поцию(--movie-low) для больших документальных фильмов.
(параметр dsize=480:320 можно заменить на ваше разрешение, mencoder оптимально отмасштабирует поб это разрешение с сохранением пропорций)


Если кто-то знает "способ лучше", комментарии приветствуются.

____________________________________________________________
#! /bin/bash
echo ;echo ;echo ;echo ;echo ;

#     echo "Parameters are '$*'"
#     until [ -z "$1" ]
#     do
#       echo "Processing parameter of: '$1'"
#       if [ ${1:0:1} = '--' ]
#       then
#           tmp=${1:1}               # Strip off leading '/' . . .
#           parameter=${tmp%%=*}     # Extract name.
#           value=${tmp##*=}         # Extract value.
#           echo "Parameter: '$parameter', value: '$value'"
#           #eval $parameter=$value
#       fi
#       shift
#     done


E_OPTERR=65

if [ "$#" -eq 0 ]
then   # Script needs at least one command-line argument.
  echo "Usage: $0 --movie-low|--screencast"  # [--force-ffmpeg-precoding] --movie-hi|--movie-mid|--cartoon
  echo "ffmpeg-precoding forced for .MOV files"
  echo ;echo ;echo ;echo ;echo ;
  exit $E_OPTERR
fi  

while [ ! -z "$1" ]
do
  case "$1" in





    --movie-low) 
      echo "Movie \"Low\" Quality profile"   #$2
fps=15
fps_ff="-r "$fps
fps_mc="-fps "$fps
#fps_ff=""
#fps_mc=""

mp3bitrate=24
mp3opts_mc="-srate 24000 -oac mp3lame -lameopts cbr:br=$mp3bitrate"
mp3opts_ff=$mp3bitrate"k"

vf="dsize=480:320:0,scale=-8:-8,harddup"
name_postfix="mc-q5.25-vbr$mp3bitrate-fps$fps"
xvidopts="fixed_quant=5.25:vhq=4:bvhq=1:chroma_opt=1:quant_type=h263:trellis=1:lumi_mask=1:hq_ac=1"
#:bitrate=-1400 #1400mb   #:cartoon
scale=7
# 7 - gauss
      echo;;





    --screencast)
      echo "Screencast profile"  #$2
fps=5
fps_ff="-r "$fps
fps_mc="-fps "$fps
#fps_ff=""
#fps_mc=""

mp3bitrate=96
mp3opts_mc="-oac mp3lame -lameopts cbr:br=$mp3bitrate"
mp3opts_ff=$mp3bitrate"k"

vf="eq=0:3,dsize=480:320:0,scale=-8:-8,eq=0:3,harddup"
name_postfix="mc-q1-vbr$mp3bitrate-fps$fps"
xvidopts="fixed_quant=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:trellis:lumi_mask:hq_ac"
#:bitrate=-1400 #1400mb   #:cartoon
scale=9
# 9 - lanczos
      echo;;





#     --force-ffmpeg-precoding)
#       echo "FFMpeg precoding forced"
#       echo;;
     *) 
      echo "Wrong argument, usage: $0 --movie-low|--screencast"  # [--force-ffmpeg-precoding]--movie-hi|--movie-mid|--cartoon
      echo "ffmpeg-precoding forced for .MOV files"
      echo;echo ;echo ;echo ;echo ;
      exit $E_OPTERR
      break;;
  esac

  shift
done





out_folder_name=Android_DVD_out

mkdir $out_folder_name
#ls --format=single-column

for in_file in *; do
    #echo ;echo --- "infile" --------------------- $in_file --------------------------------------

    for in_ext in '.mov' '.mp4' '.avi' '.flv'; do #for arg in "$file" "$iname"; do
      #echo ;echo ------ "in_ext " -------------- "${in_ext}" -------------------------

      in_file_lowcase=`echo $in_file | tr A-Z a-z`
      #echo -- "${in_file_lowcase:(-4)}" == "$in_ext"
 if [ "${in_file_lowcase:(-4)}" == "$in_ext" ]
 then
   echo --- IN -------------------- "${in_file}" ------------------------- 119

   in_file_wo_ext=${in_file/$in_ext/}
   #file_wo_ext=${file/abc/xyz}    # xyzABC123ABCabc # Replaces first match of 'abc' with 'xyz'
   #file_wo_ext=`echo "$file" | sed 's/\.\w*$//'`
   ##orig:  i_wo_ext=`echo "$i" | sed 's/\.\w*$/.avi/'`    
   #echo DEBUG: "${in_file_wo_ext}"

   out_file="./$out_folder_name/$in_file_wo_ext-$name_postfix.avi"
   echo --- OUT -------------------- "${out_file}" ------------------------- 128


   curr_file=$in_file
   if [ "${in_file_lowcase:(-4)}" == '.mov' ]
   then

     echo ">>> INFO: .MOV file, need FFMPEG preencoding";
     ff_out_file=./$out_folder_name/$in_file_wo_ext-FFMPEG.avi
     echo ">>> OUT-FF: $ff_out_file"
     rm "$ff_out_file"
     
            echo ;echo ;echo ;echo ;
     ffmpeg -i "./$in_file" $fps_ff -f avi -vcodec mpeg4 -sameq -b 2100000 -g 1 -bf 2 -acodec libmp3lame -ab $mp3bitrate "$ff_out_file"
     curr_file=$ff_out_file
   fi

   echo ; echo ; echo "===================== IN-MENCODER ${curr_file} ===================================== 145";
   mencoder "${curr_file}" -idx $fps_mc -sws $scale -vf $vf -o "${out_file}" -ovc xvid -xvidencopts $xvidopts $mp3opts_mc
### OLD   mencoder "$ff_file"                   -idx $fps_mc -sws $scale -vf $vf -o $i_out        -ovc xvid -xvidencopts $xvidopts -nosub -oac copy
   rm "$ff_out_file"





 fi
    done
done





echo ;echo ;echo ;echo ;echo ;

  #mencoder -ovc help
  #mencoder -oac help
  #mencoder -of help

  #mplayer $i -identify -frames 0
  # -msglevel identify=4
  # -identify=6
  #mplayer -ac help 
  #mplayer -vc help



















#mencoder [in_file] -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:keyint=250:threads= 2 -oac mp3lame -lameopts cbr:br=128 -ffourcc XVID -vf scale=320:-2,crop=320:240,expand=320:240 -af resample=44100:0:0 -o [out_file]

#mencoder $i -of lavf -ovc lavc -lavfopts format=mov -lavcopts aglobal=1:vglobal=1:vcodec=h264:acodec=mp3:vbitrate=512 -oac mp3lame -lameopts br=96:cbr -mc 0 -o "./OUT/$i noFF.mov"

#mencoder "./$i" -vf dsize=480:320:2,scale=-8:-8,harddup -idx -o "./$i.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr

#DV_Player# ffmpeg -i ./$i -f avi -s 720x544 -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k ./$i.avi
#OGG#       ffmpeg -i ./$i -vcodec libtheora -sameq -acodec libvorbis -ab 128k ./$i.avi

# SAMPLE 1
# 
# cat /mnt/datos/kpax/vob/video*.vob | nice -+19 mencoder -sws 9 -vop scale=544:256:5,crop=650:435:35:75 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=850:vhq:v4mv:vpass=1:vqmin=2:vqmax=31:vmax_b_frames=2 -o /dev/null -
# 
# cat /mnt/datos/kpax/vob/video*.vob | nice -+19 mencoder -sws 9 -vop scale=544:256:5,crop=650:435:35:75 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=850:vhq:v4mv:vpass=2:vqmin=2:vqmax=31:vmax_b_frames=2 -o K-Pax.avi -


# SAMPLE 2
# 
# cat vts_*.vob | mencoder -nosound -sws 9 -vop scale=480:384:5,crop=698:568:10:4,lavcdeint -ovc lavc -lavcopts vcodec=mpeg4:vqscale=2:vhq:v4mv:vmax_b_frames=1:precmp=2:cmp=2:subcmp=2:vb_qoffset=0.6:qpel:trell:vpass=1 -o /dev/null -
# 
# cat vts_*.vob | mencoder -nosound -sws 9 -vop scale=480:384:5,crop=698:568:10:4,lavcdeint -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1600:vhq:v4mv:vmax_b_frames=1:precmp=2:cmp=2:subcmp=2:vb_qoffset=0.6:qpel:trell:vpass=2 -o beethoven.avi -



# -aid 128k
#mencoder -idx ./$i -o ./$i.avi -oac mp3lame -lameopts cbr:br=128 -ovc xvid -xvidencopts fixed_quant=2 quant_type=mpeg
#mencoder -idx ./$i -o ./$i.avi -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=200:vhq
#ffmpeg -i ./$i -vcodec libtheora -sameq -acodec libvorbis -ab 128k ./$i.avi

##-b bitrate
#ffmpeg -i ./$i -f avi -s 720x544 -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k ./$i.avi

##mencoder "./$i" -vf scale=432:320 -force-avi-aspect 4/3  -idx -o "./$i andr432x320.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr
# mencoder "./$i" -vf scale=480:272 -force-avi-aspect 16/9 -idx -o "./$i andr480x272.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr

# mencoder ./$i  -vf pp=ci,scale=480:272 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:bitrate=3200 -sws 9 -alang ru -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi
# mencoder ./$i  -vf pp=ci,scale=432:320 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:bitrate=1200 -sws 9 -alang ru -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi
# prj  mencoder ./$i  -vf pp=ci,scale=432:320 -ovc dx -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi




# MULTILINE SAMPLE
# 
# mencoder tv:// -tv driver=v4l2:width=768:height=576:input=0:normid=17:alsa:adevice=hw.1,0 \
#    -ovc xvid -xvidencopts bitrate=1200:chroma_opt:bvhq=1:quant_type=mpeg \
#    -oac mp3lame -lameopts vbr=0:br=64:mode=3 \
#    -vf pp=hb/vb/dr/al/fd,hqdn3d,crop=688:540:18:16 -sws 2 \
#    -o "$file" &



# x264 
# mencoder /
#   -idx /
#   "./$i" /
#   -o ./$i.m4v /
#   -oac faac -faacopts mpeg=4:object=2:raw=1:br=96 /
#   -ovc x264 -x264encopts crf=20:nocabac:global_header:threads=auto:frameref=5:subq=7 /
#   -of lavf -lavfopts format=mp4 /
#   -vf scale=-10:320,harddup -sws 7 -ass -noautosub







# -sws <software scaler type> (see -vop scale option too) This option sets the quality (and speed, respectively) of the software scaler, with the -zoom option. For example with # x11 or other outputs which lack hardware acceleration. Possible settings are:
# 0    fast bilinear (default) 
# 1    bilinear 
# 2    bicubic (good quality) 
# 3    experimental 
# 4    nearest neighbour (bad quality) 
# 5    area 
# 6    luma bicubic / chroma bilinear 
# 7    gauss 
# 8    sincR 
# 9    lanczos 
# 10   bicubic spline 
# NOTE: For -sws 2 and 7, the sharpness can be set with the scaling parameter (p) of -vop scale (0 (soft) - 100 (sharp)), for -sws 9, it specifies the filter length (1 - 10).

# -sameq    # same bitrate

#  lame -m s -h -b 256 $i -o mp3_out/$i

#  ffmpeg -i ./$i -ab 262144 ./mp3_out/$i
#  #sample: ffmpeg -i ./Lazarev\ 18\ 09\ 2010.mp3 -aq 5 ./Lazarev\ 18\ 09\ 2010 low.mp3 






# #/bin/sh
# #Файл который надо перекодировать (указываете свой)
# in_file=/home/user/MyDownloads/Swift.avi
# #Итоговый файл
# out_file=swift.avi
# 
# #Битрейт видео (больше обычно нет смысла, хотя можете попробовать)
# bit_rate=200
# #Ширина кадра (или 320, если ваш девайс имеет такой экран)
# width=220 
# #Битрейт аудио (для кина достаточно, если клип, то поставьте 128)
# abit_rate=48
# 
# #Собственно само кодирование (ничего менять не надо):
# mencoder $in_file -vf scale -zoom -xy $width -o $out_file -oac mp3lame -ovc xvid -channels 2 -srate 22050 -fps 20 -lameopts cbr:br=$abit_rate>/dev/null













#
# Converts all MP4 files in the current directory to MP3s.
#

#for f in *.mp3; do
 #newname=`echo $f | tr ' ' '_' `
#  echo $f
 #mv "$f" $newname
 #f=$newname
 #mplayer $f -ao pcm:file=tmp.wav
 #lame -b 128 -q 2 tmp.wav ${f/.MP4/.mp3}
 #rm -f tmp.wav
#done