view mobile version net4me Enable JavaScript in your browser! Linux education center net4me.
 
net4me logo

tux

linux commands
shell script
protocol
ip, tcp, smtp, ntp, ftp
telnet terminal
java and javascript
ajax web technology
documentation
howto, man, info
cisco in network
linux server
linux in home
online utility
and more more more.
python development
туе4ьу дштгч

  Содержание подраздела:

Конвертер видео для nokia под linux.

Как сделать видео воспроизводимым на nokia 770, 800, 810?

Понадобилось мне пережать flv большого размера в avi 400x240.
Почему именно 400x240? Да потому что именно этот формат подходит для моей nokia 810.
С объемом и продолжительностью видео я пока проблем не замечал, а вот с размером трудности были.
Если тот же файл flv или avi имеет размер хотябы 480x400, то mplayer "выпадает в осадок" после первых же кадров.
Да и вообще, хотелось бы смотреть фильмы, а не только клипы на своей nokia.


Перелопатив кучу ссылок в гугле, яху, яндексе, рамблере и т.д. я сумел нати только парочку достаточно кривых описаний
как это можно было бы сделать через ffmpeg с DivX. И просто огромное количество сайтов для накрутки других сайтов. =)
Но даже то, что предлагалось, меня не очень устроило.
Среди того что я нашел, самым грамотным решением был скрипт для mplayer но под винду.
Посмотрев на этот скрипт, я решил переписать его под линукс и адаптировать под свои нужды.


А нужно мне от скрипта было следующее:
  1. Конвертировать видео из flv в avi
  2. Перекодировать видео из avi в avi
  3. Изменять при этом любое разрешение на 400x240
  4. Чтобы при изменении разрешения не портилась "не плющилась" сама картинка.
  5. Чтобы при конвертации видео, оставалась нормальная аудио дорожка.
  6. Иметь возможность рекурсивно обработать все видео файлы в директории.
Посидев немного, и поковырявшись в man'ах, я разродился следующей командной строкой для конвертации видео:

mencoder Исходный_файл.flv -idx -noodml -ofps 20 -vf scale=-2:240,crop=400:240 -ovc lavc \
-ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -oac mp3lame \
-lameopts cbr:mode=0:br=96 -af resample=22050 -srate 22050 -o Итоговый_файл.avi;

Т.к. у меня kubuntu (тоже что и ubuntu, xubuntu), то мне пришлось поставить себе lame и mencoder. Mplayer у меня уже был. (ну и sed естественно тоже.)

И уже на основе этой самой строки написал следующий bash скрипт для конвертации видео именно под nokia (770,800,810 и т.д.):
#!/bin/bash
#=====================================
#
# Edit by Ben-Ja http://www.net4me.net
# On Sat 21 Jun 2008 03:26:20 AM MSD
#
#=====================================
# Скрипт перекодировки любого видео (avi, flv, etc) в формат avi 400x240 для nokia 770 800 810 и т.д.
# Скрипт написан для себя "на коленке за полчаса" и не претендует на образец правильности и оптимизации.

# Зависимости:
# 1. apt-get install lame mencoder mplayer
# 2. apt-get install sed (Если у вас его нет)

# Небольшой конфиг:
# Для перекодирования целой директории, мы должны задать расширение исходных файлов
FORMAT=".flv";
# Конец конфига
REC="-r"; # параметр рекурсивности.
if [ -f "$1" ] && [ "$2" ] # Проверка существования файла и введенных параметров
        then
                # конвертируем файл $1 в $2
                mencoder $1 -idx -noodml -ofps 20 -vf scale=-2:240,crop=400:240 -ovc lavc -ffourcc \
                                XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -oac mp3lame -lameopts \
                                cbr:mode=0:br=96 -af resample=22050 -srate 22050 -o $2;
                wait; # Ждем завершения процесса кодирования
        exit 0;
elif [ -d "$1" ] && [ "$2" ] && [[ $2 -eq $REC ]] # Если надо перекодировать все файлы в каталоге и всех его подкаталогах:
        then
                # конвертируем все файлы с заданым расширением
                # в дирректории $1 и всех вложеных в неё директориях.
                # Мы не можем юзать for i in $1 из-за вероятных пробелов в именах файлов.
                find $1 \( -type f -and -name "*$FORMAT" \) -print0  | while read -d '' FILE;
                do
                        mencoder $FILE -idx -noodml -ofps 20 -vf scale=-2:240,crop=400:240 -ovc lavc -ffourcc \
                                                XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -oac mp3lame -lameopts \
                                                cbr:mode=0:br=96 -af resample=22050 -srate 22050 -o $1$(echo -n $FILE |sed s/$FORMAT/.avi/g);
                        wait;
                done
        exit 0;
elif [ -d "$1" ] # Если надо перекодировать все файлы в каталоге
        then
                # кодим целую дирректорию $1
                # Мы не можем юзать for i in $1 из-за вероятных пробелов в именах файлов.
        echo "не рекурсивно одна директория";
        echo "этот параметр еще не дописан.";
        echo "если вы придумали вариант как это сделать не громоздко и лаконично, то просьба описать пример на net4me.livejournal.com";
        exit 0;
else
# help
        echo;
        echo Use:;
        echo 1. $0 ./file_from ./file_to;
        echo 2. $0 path_to_directory;
        echo 3. $0 path_to_directory -r for recursive;
        echo for example:;
        echo 1. $0 ./hack.flv ./not_hack.avi;
        echo 2. $0 ./youtube/ or ./;
        echo 3. $0 ~/flv_video/ -r;
        exit 66;
fi
exit 0;
# end


Результаты:
на входе фильм 1,4G ray.avi [XVID] 640x352 24bpp 25.000 fps 1129.9 kbps (137.9 kbyte/s)
на выходе фильм 514M Ray.avi [XVID] 400x240 24bpp 20.000 fps 384.2 kbps (46.9 kbyte/s)
На моей nokia 810 пережатый фильм идет "на ура" и места под него вполне хватает т.к. весит фильм почти в три раза меньше своего большого брата.

В данном скрипте не хватает конвертации файлов в одной заданной директории.
Т.к. Было уже поздно (точнее рано) и хотелось спать.
И если честно, то меня вполне устраивает как этот скрипт работает на данный момент.
Была идея изменять названия файлов убирая пробелы, потом пережимать, потом изменять на старые названия... Но это не оптимально.
Если у вас возникнет желание дописать недостающую часть - милости прошу в эту тему для обсуждения конвертации видео для нокиа.
Буду рад выслушать любые пожелания и комментарии.


P.S. Низачто бы не сел писать эту статью, если бы нашел хоть что-то вменяемое на эту тему.
При одиночной конвертации пробелы мешаются. Но это не так страшно как при рекурсивной обработке.


Ben-Ja for net4me
home back top
При копировании материалов нашего портала, сылка на net4me обязательна.
Рейтинг@Mail.ru   Valid HTML 4.01 Transitional     Яндекс цитирования   best billing

 



...

net4me snowflake
rfc2368
 
net4me portal This page last modified: Saturday, October 1, 2011   be in net. net4me

portal net4me linux education center