Как работать с видео в формате .3gp в Linux


stasikos - Posted on 18 Февраль 2006

Ниже описано, как просматривать такое видео с помощью MPlayer, а также как создавать такие ролики, чтобы записать на мобильный телефон.Прежде всего нам понадобятся MPlayer и ffmpeg. В Debian они берутся из официального репозитария и репозитария Кристиана Мариллата:

Для 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

0
Ваша оценка: Ничего

У меня прекрасно со всем этим справляется один только 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

И все замечательно проигрывается на телефоне.

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.