Nokia 5800 vs Linux (кодирование видео-файлов для телефона)

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Nokia 5800 vs Linux

Сообщение Kido »

Пытаюсь пережать видео-файлы для сабжа.
Ориентируюсь на данные с форума про нокии:
Dron3d
Цитата:
RealPleyer играет MP4 со след кодеками:
1)h264 размер не более 352 x 288 30fps
2)Xvid не более 640x480 30fps
3)Mpeg4 так же как и Xvid 640x480 30fps
Самая простая программа для конвертации видео Any Video Converter.
AVI файлы не открываются.У меня без тормозов проигрался mp4 файл с битрейтом 1500

Сначала пробовал пережимать с помощью скрипта xvidenc - не читалось. Перешел на чистый mencoder. Использую следующий скрипт:

Код: Выделить всё

#!/bin/bash
mencoder $1 -o $1_5800.mp4 -vf scale=640:360 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=500 -oac lavc -lavcopts acodec=libfaac

Видео на сотовом все равно не проигрывается.
В чем может быть проблема?
Спасибо сказали:
virtul
Сообщения: 5

Re: Nokia 5800 vs Linux

Сообщение virtul »

Извини, что оффтопик, но как ты копируешь музыку на сабж под линуксом? Просто как флешку? Или все таки есть способ запустить Nokia PC Suite?
Спасибо сказали:
Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Re: Nokia 5800 vs Linux

Сообщение Kido »

virtul писал(а):
17.01.2009 12:07
Извини, что оффтопик, но как ты копируешь музыку на сабж под линуксом? Просто как флешку? Или все таки есть способ запустить Nokia PC Suite?

Как на флешку. PC Suite запускать не пробовал.
Спасибо сказали:
Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Re: Nokia 5800 vs Linux

Сообщение Kido »

Видимо я вчера устал сильнее чем мне казалось, раз написал такую ерунду.

Сегодня, после бдения над справками по mplayer'у и MP4Box'у написал следующий скрипт:

Код: Выделить всё

#!/bin/bash
INPUT="$1"
OUTPUT="$2"
MP4BOX="$(which MP4Box 2>/dev/null)"
MPLAYER="$(which mplayer 2>/dev/null)"
MENCODER="$(which mencoder 2>/dev/null)"

OUTPUT="$(echo "$OUTPUT" | sed 's|\.mp4|\.avi|')"

$MENCODER $INPUT -o /dev/null -vf scale=640:360 -ovc xvid -xvidencopts pass=1:bitrate=500 -oac faac
$MENCODER $INPUT -o $OUTPUT -of avi -vf scale=640:360 -ovc xvid -xvidencopts pass=2:bitrate=500 -oac faac -faacopts br=128:mpeg=4:object=2 -channels 2 -srate 48000

MP4FPS=$($MPLAYER \"$OUTPUT\" -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_FPS' | tail -n 1 | awk -F= '{print $2}')
$MENCODER $OUTPUT -nosound -ovc copy -of rawvideo -o $OUTPUT.cmp
VIDEOINPUT="-add $OUTPUT.cmp"
MP4AUD="$MP4BOX -aviraw audio $OUTPUT -out $OUTPUT.raw"
MVRAW="mv -f "$OUTPUT"_audio.raw $OUTPUT.aac"
AUDIOINPUT="-add $OUTPUT.aac"

$MP4AUD
$MVRAW

MP4OUT="$(echo "$OUTPUT" | sed 's|\.avi|\.mp4|')"

$MP4BOX $VIDEOINPUT -fps $MP4FPS $AUDIOINPUT $MP4OUT


Но полученный mp4- файл все равно не хочет воспроизводиться.
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Nokia 5800 vs Linux

Сообщение Rodegast »

1) Жми кодеком mpg4 из lavc.
2) Разрешение видео должно точно соответствовать разрешению телефона.
3) Делай звук наихудшего качества с наименьшим битрейтом и частотой дискретизации, ты всё равно на телефоне разницу не почувствуешь.
Спасибо сказали:
Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: Nokia 5800 vs Linux

Сообщение sspphheerraa »

mencoder делает на выходе avi независимо от того какое расширение ты пропишешь, можно конечно попробовать -of ... но тоже не лучший вариант, т.к. на выходе опять таки нормально поддерживается только avi

попробуй ffmpeg или avidemux
Sspphheerraa
Спасибо сказали:
Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Re: Nokia 5800 vs Linux

Сообщение Kido »

sspphheerraa писал(а):
18.01.2009 23:09
mencoder делает на выходе avi независимо от того какое расширение ты пропишешь, можно конечно попробовать -of ... но тоже не лучший вариант, т.к. на выходе опять таки нормально поддерживается только avi

попробуй ffmpeg или avidemux

Это-то я знаю. mencoder'ом я получаю .avi, и потом уже перепаковываю его в mp4 через MP4Box.
Причем полученный файл прекрасно проигрывается как mplayer'ом (ну да он вообще всеядный), так и xine'ом. А вот сотовый его проигрывать не хочет.
Мне хотя бы понять - в чем проблема - в опциях кодирования в xvid, или в плохой "упаковке" в mp4?
Спасибо сказали:
dsx
Сообщения: 6
ОС: openSUSE 11.1

Re: Nokia 5800 vs Linux

Сообщение dsx »

Я кодирую ffmpeg'ом. Вот скрипт:

Код:

#!/usr/bin/env python import os from subprocess import Popen from optparse import OptionParser def parseOptions(): parser = OptionParser() parser.add_option("-f", "--file", type="string", dest="file", default="") parser.add_option("-d", "--dir", type="string", dest="dir", default=os.curdir) parser.add_option("-b", "--bitrate", type="string", dest="bitrate", default="672k") parser.add_option("-r", "--resolution", type="string", dest="resolution", default="640x360") parser.add_option("-t", "--threads", type="int", dest="threads", default=3) (options, args) = parser.parse_args() return options def encode(file, bitrate, resolution, threads): (name, ext) = os.path.splitext(file) cmd = prog + " -i \"" + file + "\" -b " + bitrate + " -s " + resolution + " -threads " + str(threads) + args + "\"" + name + ".mp4\"" print cmd p = Popen(cmd, shell=True) return p prog = "ffmpeg" args = " -vcodec mpeg4 -acodec copy -g 300 -aic 2 -mbd 2 -cmp 3 -precmp 3 -subcmp 3 -trellis 2 -flags +4mv+trell " options = parseOptions() if options.file == "": files = os.listdir(options.dir) else: files = [options.file] files.sort() for f in files: (name, ext) = os.path.splitext(f) if ext == ".avi": p = encode(f, options.bitrate, options.resolution, options.threads) os.waitpid(p.pid, 0)


Параметры для ffmpeg взяты здесь. С кодированием звука мучаться не стал, поставил "copy"
Спасибо сказали:
Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Re: Nokia 5800 vs Linux

Сообщение Kido »

Ура. Наметился прогресс. Ключем ко всему является значение max_bframes. Поставил его на 0 и полученное видео сразу же начало проигрываться.
Итого в планах:
1). Поиск значений для хорошего соотношение размер/качество видео.
2). Автоматическое распознавание и урезание не 16:9 видео
3). Хранение промежуточных файлов в /tmp.
Спасибо сказали:
Аватара пользователя
Kido
Сообщения: 949
Статус: Космический Засланец
ОС: ArchLinux x86_64 Current

Re: Nokia 5800 vs Linux

Сообщение Kido »

Полностью рабочий скрипт с автоматическим изменением разрешения.

Использование:

xvid5800 [исходный_файл] [получившийся_файл.mp4]

Код: Выделить всё

#!/bin/bash
INPUT="$1"
OUTPUT="$2"
MP4BOX="$(which MP4Box 2>/dev/null)"
MPLAYER="$(which mplayer 2>/dev/null)"
MENCODER="$(which mencoder 2>/dev/null)"
INWIDTH=$($MPLAYER $INPUT -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_WIDTH' | tail -n 1 | awk -F= '{print $2}')
INHEIGHT=$($MPLAYER $INPUT -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_HEIGHT' | tail -n 1 | awk -F= '{print $2}')
let "OUTWIDTH=((230400/$INHEIGHT))"
let "OUTHEIGHT=((640*$INHEIGHT/$INWIDTH))"
INASPECT=$($MPLAYER $INPUT -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_ASPECT' | tail -n 1 | awk -F= '{print $2}')
SCALE="640:360"

if [[ $ASPECT != 1.7778 ]]
  then
    if [[ $ASPECT > 1.7778 ]]
     then
    SCALE="640:$OUTHEIGHT"
      else
    SCALE="$OUTWIDTH:360"
    fi
fi


OUTPUT="$(echo "$OUTPUT" | sed 's|\.mp4|\.avi|')"


$MENCODER $INPUT -o /dev/null -vf scale=$SCALE,harddup -ovc xvid -xvidencopts pass=1:max_bframes=0 -oac faac
$MENCODER $INPUT -o $OUTPUT -of avi -vf scale=$SCALE,harddup -ovc xvid -xvidencopts pass=2:bitrate=1000:max_bframes=0 -oac faac -faacopts br=128:mpeg=4:object=2 -channels 2 -srate 48000

MP4FPS=$($MPLAYER $OUTPUT -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_FPS' | tail -n 1 | awk -F= '{print $2}')
$MENCODER $OUTPUT -nosound -ovc copy -of rawvideo -o $OUTPUT.cmp
VIDEOINPUT="-add $OUTPUT.cmp"
MP4AUD="$MP4BOX -aviraw audio $OUTPUT -out $OUTPUT.raw"
MVRAW="mv -f "$OUTPUT"_audio.raw $OUTPUT.aac"
AUDIOINPUT="-add $OUTPUT.aac"

$MP4AUD
$MVRAW

MP4OUT="$(echo "$OUTPUT" | sed 's|\.avi|\.mp4|')"

$MP4BOX $VIDEOINPUT -fps $MP4FPS $AUDIOINPUT $MP4OUT
rm $OUTPUT.cmp
rm $OUTPUT.aac
rm $OUTPUT
rm divx2pass.log
Спасибо сказали:
lexxus
Сообщения: 27
ОС: Linux Ubuntu

Re: Nokia 5800 vs Linux

Сообщение lexxus »

А куда файл-то готовый сохраняется?!

Делал в папке с фильмами... а после проделанной процедуры... ничего не появилось...
?!
Спасибо сказали:
unton
Сообщения: 12
ОС: Gentoo

Re: Nokia 5800 vs Linux

Сообщение unton »

мой вариант xvid5800

Код: Выделить всё

#!/bin/bash
INPUT="$1"
OUTPUT="$2"
mencoder $INPUT -o $OUTPUT -noskip -of lavf -lavfopts format=mp4 -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:vbitrate=1000:acodec=libfaac:abitrate=128:vglobal=3:aglobal=3 -vf dsize=640:360:0,scale=0:0
Спасибо сказали:
Shade89
Сообщения: 8
ОС: Arch Linux Current

Re: Nokia 5800 vs Linux

Сообщение Shade89 »

lexxus писал(а):
25.01.2009 17:19
А куда файл-то готовый сохраняется?!

Делал в папке с фильмами... а после проделанной процедуры... ничего не появилось...
?!

Ну это, видимо из-за строчки

Код:

rm $OUTPUT
Спасибо сказали:
Аватара пользователя
Nekosargot
Сообщения: 159

Re: Nokia 5800 vs Linux

Сообщение Nekosargot »

Попробуй h263 320х240 23fps 450kb/s, aac 22050 stereo 64 kb/s.
Я жал также, только 15 fps для 6233... Полет норм был. Дело было до моего знакомства с линем..юзал триалку проги mpegablex4live -там есть какойто выбор между типами конвертирования..не помню уже как называется..если выбрить не тот-тело матерится и не показывает видео.
юзаю winff сча , кормлю кпк;)
Sempron LE-140 3.8Ghz |2gb ddr2|1TB|Debian stable x86-64 + Ratpoison
Она: Женатые мужчины для меня не существуют, как класс.
Он: Только как объекты. © Bash
Спасибо сказали:
Shade89
Сообщения: 8
ОС: Arch Linux Current

Re: Nokia 5800 vs Linux

Сообщение Shade89 »

Вот такой вот скриптик для Nokia E90 получился:

Код:

#!/bin/sh INPUT_FILENAME=${1} OUTPUT_FILENAME=${2} BITRATE=750 INPUT_WIDTH=`mplayer $INPUT_FILENAME -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_WIDTH' | tail -n 1 | awk -F= '{print $2}'` INPUT_HEIGHT=`mplayer $INPUT_FILENAME -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_HEIGHT' | tail -n 1 | awk -F= '{print $2}'` let "OUTPUT_HEIGHT=((800*$INPUT_HEIGHT/$INPUT_WIDTH))" let "OUTPUT_WIDTH=(($OUTPUT_HEIGHT*$INPUT_WIDTH/$INPUT_HEIGHT))" let "OUTPUT_WIDTH_0=((352*$INPUT_WIDTH/$INPUT_HEIGHT))" if [ $INPUT_WIDTH -gt 800 -a $INPUT_HEIGHT -gt 352 ] then SCALE="$OUTPUT_WIDTH:$OUTPUT_HEIGHT" elif [ $INPUT_WIDTH -lt 800 -a $INPUT_HEIGHT -gt 352 ] then SCALE="$OUTPUT_WIDTH_0:352" else SCALE="$INPUT_WIDTH:$INPUT_HEIGHT" fi FPS=`mplayer $INPUT_FILENAME -identify -nosound -vo null -nocache -frames 1 | grep '^ID_VIDEO_FPS' | tail -n 1 | awk -F= '{print $2}'` mencoder $INPUT_FILENAME -ofps $FPS -o temp.avi -of avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$BITRATE:threads=8 -vf lavcdeint,scale=$SCALE,harddup -lavdopts threads=8 mencoder $INPUT_FILENAME -ofps $FPS -o temp.aac -of rawaudio -ovc frameno -oac lavc -lavcopts acodec=libfaac:threads=8 mencoder temp.avi -nosound -ovc copy -of rawvideo -o temp.cmp MP4Box -new -add temp.cmp -add temp.aac -fps $FPS -brand mp42 -isma $OUTPUT_FILENAME rm -f temp.*
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Nokia 5800 vs Linux

Сообщение komcumir »

мы жали ffmpeg может и не кошерно, но решили написать Xовую морду для него tkffmpeg вот ссылка https://sourceforge.net/project/showfiles.p...group_id=265536 состояние проги pre-alfa так что многого от нее ждать не стоит есть желание можете затестить.
Спасибо сказали: