Online video hd

Смотреть 365 видео

Официальный сайт morning-news 24/7/365

Смотреть видео бесплатно

vvorth 22.11.2010 08:27

Скрипты на bashКодирование видео в mp4 для мобильных устройств.

Бывают видео, которые можно смотреть вечно.

И просто записать их себе на телефон, уменьшив разрешение, бывает недостаточно - сенсорные нокии по умолчанию растягивают любое видео во весь широкоформатный экран(5530XM в частности), и лезть в меню чтобы переключить соотношение сторон просто лень.

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

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#convert video to mp4 for nokia
function all2mp4 () {
if < -f "$1" >;
then
info=$(mplayer -identify -frames 0 "$1")

#audio bitrate
abitrate=128
if < $((`echo "$info" | grep ID_AUDIO_BITRATE | head -1 | awk -F= '{print $2}'`/1000)) -lt 128 >;
then
abitrate=$((`echo "$info" | grep ID_AUDIO_BITRATE | head -1 | awk -F= '{print $2}'`/1000))
# несколько видео в выводе mplayer'а показывали 0 в битрэйте,
# но кодировались нормально - это для них
if < $abitrate -eq 0 >;
then
abitrate=128
fi
fi

#video bitrate
vbitrate=600
if < $((`echo "$info" | grep ID_VIDEO_BITRATE | head -1 | awk -F= '{print $2}'`/1000)) -lt 600 >;
then
vbitrate=$((`echo "$info" | grep ID_VIDEO_BITRATE | head -1 | awk -F= '{print $2}'`/1000))
if < $vbitrate -eq 0 >;
then
vbitrate=600
fi
fi

# разницы между 640*360 и 426*240 я не заметил, тогда зачем платить больше?
#final resolution 16*9 small - соответствует соотношению экрана
output_w=426
output_h=240
#final resolution 16*9 big
#output_w=640
#output_h=360
#final resolution 4*3
#output_w=320
#output_h=240

#original video frame size - размерность входного видео
original_w=`echo "$info" | grep ID_VIDEO_WIDTH | head -1 | awk -F= '{print $2}'`
original_h=`echo "$info" | grep ID_VIDEO_HEIGHT | head -1 | awk -F= '{print $2}'`

#final video frame size - считаем насколько уменьшать(если вообще надо)
# и насколько заливать чёрным - expand
if < $(($original_w*100/$original_h)) -gt $(($output_w*100/$output_h)) >;
then
if < $original_w -gt $output_w >;
then
frame_w=$output_w
else
frame_w=$original_w
output_w=$frame_w
output_h=$(($output_w*9/16))
fi
frame_h="-3"
else
if < $original_h -gt $output_h >;
then
frame_h=$output_h
else
frame_h=$original_h
output_h=$frame_h
output_w=$(($output_h*16/9))
fi
frame_w="-3"
fi

echo expand: $output_w x $output_h, scale: $frame_w x $frame_h

#encode
mencoder -of lavf\
-lavfopts format=mp4 -oac lavc -ovc lavc\
-lavcopts aglobal=1:vglobal=1:acodec=libfaac:abitrate=$abitrate:vcodec=mpeg4:vbitrate=$vbitrate:keyint=25\
-ofps 25 -af lavcresample=44100 -vf scale=$frame_w:$frame_h,expand=$output_w:$output_h -mc 0 -noskip\
"$1" -o "`basename '$1'`.mp4"
fi;
unset info abitrate vbitrate output_w output_h frame_w frame_h original_w original_h
}




Собственно создаёт в текущей директории файл с именем, совпадающем с входным файлом, только расширение(не меняется!) добавляется в конце.

Хардкодить старался по минимуму, переменных всего 4(2 битрейта и окончательное разрешение) и 2 множителя(соотношение сторон 16 и 9), и изменив их можно использовать для других разрешений, соотношений.

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


Тэги: Android encode mencoder nokia video
+ 9 -
Похожие Поделиться

cubiccat 22.11.2010 10:54 #
+ 4 -
Жаль, что нельзя два раза плюсануть. Мысленно ставлю второй за ссылки.
На счет заливки недостающей части черными полосами как-то раньше не задумывался.
Благо телефон адекватно реагирует на видео разного разрешения.
Спасибо за наводку.

Кстати расширение файла я меняю так:
FILENAME=`basename "$*"`
OUTPUTFILENAME=`echo "$FILENAME" | sed -e 's/\(.*\)\(\..*$\)/\1\.mp4/'`
vvorth 22.11.2010 13:41 #
+ 2 -
точно, есть же basename - совсем забыл!! а оригинаьлно расширение я как информацию решил оставить, изначально я туда разрешение ещё писал, но решил что излишество.
vvorth 22.11.2010 15:38 #
+ 0 -
Только сейчас в ридере увидел что вчера был тоже скрипт для видео =.)))
Avestius 10.10.2013 10:46 #
+ 0 -
Опоздал маленько :)
| grep ID_AUDIO_BITRATE | head -1 | awk -F= '{print $2}'`/1
поменять на
| grep ID_VIDEO_WIDTH | cut -f2 -d'='
Avestius 10.10.2013 10:47 #
+ 0 -
Блин, имел в виду head + awk на cut :)

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн