Сегодня я расскажу маленький секрет, как самому кодировать видео любых форматов в FLV, дабы его можно было смотреть через Flash плееры. Все на самом деле очень просто. Нам потребуется /ports/multimedia/mencoder, /ports/multimedia/flvtool++ и маленький скриптик на shell.
При установке mencoder выбираем те кодеки, которые нам нужны. Дабы не ошибиться можно выбрать все, что предлагают. Ну вот, установили mencoder и flvtool++. Кстати, FLVTool++ нам нужен, чтобы была поддержка перемотки видео при воспроизведении. Но это совсем не обязательно.
Теперь создаем скрипт. Назовем его mencoder.sh. Этот скрипт позволит нам кодировать видео в любое разрешение, с любым битрейтом и с любым качеством как видео так и звука.
Переписываем видео файл в одну папку с mencoder.sh. Даем права на запуск скрипту командой chmod +x mencoder.sh. И запускаем скрипт такой строчкой:
Теперь о файлах, которые мы получим в результате выполнения скрипта.
film.flv - это файл перекодированный AVI => FLV.
film.flv.seek.flv - это файл FLV с поддержкой перемотки.
Если нам файл без перемотки не нужен, то добавим в конец скрипта еще 2 строчки:
Параметров у mencoder очень много. В скрипте использованы лишь основные. Давайте их рассмотрим.
Кому понравилось/не понравилось и есть что предложить жду отзывов в коментах.
Теперь создаем скрипт. Назовем его mencoder.sh. Этот скрипт позволит нам кодировать видео в любое разрешение, с любым битрейтом и с любым качеством как видео так и звука.
#!/bin/sh /usr/local/bin/mencoder $1 -o $2 \ -of lavf \ -oac mp3lame \ -aid 1 \ -lameopts abr:br=56 \ -srate 22050 \ -af volnorm=2 \ -ovc lavc \ -lavcopts vcodec=flv:vbitrate=1024:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \ -vf scale=$3:$4,harddup /usr/local/bin/flvtool++ $2 $2.seek.flvТеперь нам нужен видео файл. Допустим это будет фильм film.avi. Чтобы начать кодирование нам нужно знать какое разрешение у видео файла. Посмотреть можно либо в плеере либо на сайте, откуда это видео было скачано. Допустим видео имеет разрешение 720x304 как обычный фильм хорошего качества. Но для веба нам этого будет жирновато. Уменьшим разрешение в 2 раза. А также урежем качество звука в 2 раза с 44100 до 22050. Так как фильмы в веб смотрят в основном на компьютерных колонках или в наушниках на качество это заметно не отразится, зато отразиться на размер результирующего файла и его битрейт. В скрипте указан максимальный битрейт 1024 килобита. Что примерно 128килобайт в секунду.
Переписываем видео файл в одну папку с mencoder.sh. Даем права на запуск скрипту командой chmod +x mencoder.sh. И запускаем скрипт такой строчкой:
./mencoder.sh film.avi film.flv 360 152Результатом выполнения скрипта будет 2 дополнительных файла и информация примерно такого содержания:
MEncoder 1.0rc2-3.4.6 (C) 2000-2007 MPlayer Team CPU: Intel(R) Xeon(R) CPU X3210 @ 2.13GHz (Family: 6, Model: 15, Stepping: 11) CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1 Compiled with runtime CPU detection. success: format: 0 data: 0x0 - 0x51328000 AVI file format detected. [aviheader] Video stream found, -vid 0 [aviheader] Audio stream found, -aid 1 VIDEO: [XVID] 720x304 12bpp 25.000 fps 1503.9 kbps (183.6 kbyte/s) [V] filefmt:3 fourcc:0x44495658 size:720x304 fps:25.00 ftime:=0.0400 ========================================================================== Opening audio decoder: [liba52] AC3 decoding with liba52 Using SSE optimized IMDCT transform Using MMX optimized resampler AUDIO: 48000 Hz, 2 ch, s16le, 192.0 kbit/12.50% (ratio: 24000->192000) Selected audio codec: [a52] afm: liba52 (AC3-liba52) ========================================================================== ** MUXER_LAVF ***************************************************************** REMEMBER: MEncoder's libavformat muxing is presently broken and can generate INCORRECT files in the presence of B frames. Moreover, due to bugs MPlayer will play these INCORRECT files as if nothing were wrong! ******************************************************************************* OK, exit Opening video filter: [expand osd=1] Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1 Opening video filter: [harddup] Opening video filter: [scale w=360 h=152] ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4) ========================================================================== MP3 audio selected. VDec: vo config request - 720 x 304 (preferred colorspace: Planar YV12) VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is 2.37:1 - prescaling to correct movie aspect. SwScaler: reducing / aligning filtersize 9 -> 8 SwScaler: reducing / aligning filtersize 9 -> 8 SwScaler: reducing / aligning filtersize 9 -> 8 SwScaler: reducing / aligning filtersize 9 -> 8 [swscaler @ 0x8646f38]SwScaler: BICUBIC scaler, from yuv420p to yuv420p using MMX2 [swscaler @ 0x8646f38]SwScaler: using 8-tap MMX scaler for horizontal luminance scaling [swscaler @ 0x8646f38]SwScaler: using 8-tap MMX scaler for horizontal chrominance scaling [swscaler @ 0x8646f38]SwScaler: using n-tap MMX scaler for vertical scaling (YV12 like) [swscaler @ 0x8646f38]SwScaler: 720x304 -> 360x152 videocodec: libavcodec (360x152 fourcc=31564c46 [FLV1]) [VE_LAVC] High quality encoding selected (non-realtime)! Compiler did not align stack variables. Libavcodec has been miscompiled and may be very slow or crash. This is not a bug in libavcodec, but in the compiler. You may try recompiling using gcc >= 4.2. Do not report crashes to FFmpeg developers. VIDEO CODEC ID: 22 AUDIO CODEC ID: 15001, TAG: 0 Writing header... Pos: 0.8s 22f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.082 [0:8] Skipping frame! Pos: 15.3s 385f ( 0%) 109.69fps Trem: 0min 0mb A-V:0.066 [292:53]Перекодирование может затянуться до часа-двух. В зависимости от мощности компьютера.
Теперь о файлах, которые мы получим в результате выполнения скрипта.
film.flv - это файл перекодированный AVI => FLV.
film.flv.seek.flv - это файл FLV с поддержкой перемотки.
Если нам файл без перемотки не нужен, то добавим в конец скрипта еще 2 строчки:
rm -f $2 mv $2.seek.flv $2Тогда будет только film.flv и уже с поддержкой перемотки.
Параметров у mencoder очень много. В скрипте использованы лишь основные. Давайте их рассмотрим.
- -oac mp3lame - Означает, что звук будем кодировать в MP3 формат.
- -srate 22050 - Означает, что качество звука будет 22050Khz.
- -af volnorm=2 - Означает, что будет производиться нормализация громкости.
- vbitrate=1024 - Означает, что итоговый битрейт видеофайла не будет превышать 1024Килобита
- -vf scale=$3:$4,harddup - Означает что размер видео будет изменен в $3 по ширине и в $4 по высоте. А также harddup говорит о том, что при наличии плохих фреймов они будут пропускаться и заменяться хорошими.
Кому понравилось/не понравилось и есть что предложить жду отзывов в коментах.

Комментировать