Как работать с видео в формате .3gp в Linux
Ниже описано, как просматривать такое видео с помощью MPlayer, а также как создавать такие ролики, чтобы записать на мобильный телефон.Прежде всего нам понадобятся MPlayer и ffmpeg. В Debian они берутся из официального репозитария и репозитария Кристиана Мариллата:
deb ftp://ftp.nerim.net/debian-marillat/ sid main
Для RPM-Based дистрибутивов пакеты стоит поискать в дистрибутиве или на http://freshrpms.net/
Для любителей собирать все их исходников все берется с:
MPlayer http://www.mplayerhq.hu/
FFMPEG http://ffmpeg.sourceforge.net/
После установки MPlayer, чтобы он мог играть видео в интересующем нас формате 3GP необходимо взять из исходников файл /etc/codecs.conf, либо, если вы ставили из пакетов - /usr/share/doc/mplayer-архитектура/examples/codecs.conf.gz (debian).
Нужно добавить в этот файл строку "format 0x33363273" в секцию videocodec ffh263после строки "driver ffmpeg". Также лучше сменить дату на текущую в секции релиза (около 6-й строки файла), чтобы MPlayer пользовался новыми установками.
После этого MPlayer у меня во всю начал играть видео с телефона.
Кодирование видео
Кодирование в формат 3GP происходит в несколько этапов:
$ mencoder video.mpg -nosound -ovc lavc -lavcopts vcodec=mpeg4 -vop expand=176:144,scale=176:-2 -o movie.avi -ofps 12Из нашего видео-файла извлечется видеоизображение без звука, изменятся соответствующим образом его размеры и будут выброшены лишние кадры. -ofps12 действительно нужна, иначе телефон перестает быть способным правильно играть видео (не хватает ресурсов процессора).
$ mplayer -vo null -ao pcm -af resample=8000, volume=+4db:sc video.mpgИзвлечет звуковую дорожку, ресемплирует ее в 8kHz и увеличит громкость на 4 децибела.
Теперь закодируем полученную информацию в .3gp с помощью ffmpeg:
ffmpeg -i movie.avi -i audiodump.wav -b 48 -ac 1 -ab 12 -map 0.0 -map 1.0 video.3gp
Склеит видео и аудио и закодирует в нужный формат...
Проверил - работает. Были, правда, проблемы со звуком. Чтобы закодировать без него, воспользовался командой:
$ ffmpeg -i movie.avi -b 48 -ac 1 -ab 12 -map 0.0 video.3gpНамного удобнее, чем писать это каждый раз, засунуть это в скрипт и запускать его по мере надобности =)
to3gp
#!/bin/bash TMPDIR=/tmp MOVIE=$TMPDIR/movie.avi AUDIO=audiodump.wav if [ -n "$1" ]; then if [ -n "$3" ]; then Q="$3"; else Q="12"; fi mencoder "$1" -nosound -ovc lavc -lavcopts vcodec=mpeg4 -vop expand=176:144,scale=176:-2 -o $MO VIE -ofps $Q mplayer -vo null -ao pcm -af resample=8000,volume=+4db:sc "$1" ffmpeg -i $MOVIE -i $AUDIO -b 48 -ac 1 -ab 12 -map 0.0 -map 1.0 "$2" rm -f $MOVIE $AUDIO ; #ffmpeg -i $MOVIE -b 48 -ac 1 -ab 12 -map 0.0 "$2" #rm -f $MOVIE ; else echo Usage: $0 source destination \[ fps \] ; fi
и делать просто
$ to3gp video.mpg video.3gpСсылки:
http://www.niemueller.de/wiki/?ConvertVideoTo3GP
http://tuxas.net/howto/howto-add-video-3gpp.html
http://circle.ch/wiki/3gpVideo
- 9013 просмотров
Страница для печати

У меня прекрасно со всем этим справляется один только ffmpeg.
Делаю так:
ffmpeg -i in_file -acodec amr_nb -ar 8000 -ac 1 -ab 32 -vcodec h263 -b 96 -r 10 -s 176x144 out_file.3gp
И все замечательно проигрывается на телефоне.
Отправить комментарий