video converter for nokia 770 800 810 : конвертировать видео для nokia : изменить размер avi flv : пример


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

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

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

 

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

А нужно мне от скрипта было следующее:

  1. Конвертировать видео из flv в avi
  2. Перекодировать видео из avi в avi
  3. Изменять при этом любое разрешение на 400×240
  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] 640×352 24bpp 25.000 fps 1129.9 kbps (137.9 kbyte/s)
на выходе фильм 514M Ray.avi [XVID] 400×240 24bpp 20.000 fps 384.2 kbps (46.9 kbyte/s)
На моей nokia 810 пережатый фильм идет «на ура» и места под него вполне хватает т.к. весит фильм почти в три раза меньше своего большого брата.

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

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

Ben-Ja for net4me