Показаны сообщения с ярлыком Video. Показать все сообщения
Показаны сообщения с ярлыком Video. Показать все сообщения

GUI-конвертер pspvc конечно отлично подходит для создания одного-двух фильмов для PSP, удобен быстрым интуитивным доступом к настройкам и возможностью точно сгенерировать превью, однако удобным быть перестаёт в случае необходимости конвертирования целого набора видеофайлов.

В связи с этим выкладываю скрипт для пакетного конвертирования сразу нескольких видеофайлов для просмотра на PSP под Linux с gentoo-wiki с моими небольшими доработками, а именно:

1) Добавлен мини-конфиг: можно прописать путь к перекодированным файлам, задержку при создании превью и путь к ffmpeg (я, как видите,
использую не стандартный ffmpeg, а оный из поставки pspvc)

2) Проблема в том, что если вы перекодировали файл, переместили его на psp, а затем перекодировали ещё один,
имя нового файла так же будет M4V10001.MP4, потому что скрипт конечно не знает о существовании файла с таким же именем на psp
(и, конечно, никто кроме вас об этом не знает).
Я предлагаю решение: каждый раз при запуске скрипта вбивать некое значение (постфикс), которое будет прибавляться к цифровой части имени файла.
Это особенно удобно если вы например кодируете сериал: первый сезон с постфиксом 101, второй 201 и т.п. для получения говорящих имён файлов.
По умолчанию файлы по прежнему начинают именоваться с M4V10001.MP4, так что если не предвидиться конфликтов имён, вместо ввода постфикса можно просто нажать enter.

Собственно листинг:



#!/bin/bash
#script name: make_psp_movie.sh
# Converter for batch video encoding for PSP in Linux.
# http://damnsmallblog.blogspot.com
# Originally: http://gentoo-wiki.com/HOWTO_PSP#Converting_all_your_videofiles_at_once

### CONFIG -->

# Prefix for 100MNV01 dir (originally "/tmp/`echo $LOGNAME`/pspmovies/MP_ROOT/")
prefix="/home/`echo $LOGNAME`"

# Preview pic time position in seconds (originally 5)
ss=10

# Path to ffmpeg binary (originally ffmeg)
ffmpeg=/opt/psp/pspvc/share/pspvc/bin/ffmpeg

### CONFIG <--


if [ $# == 0 ]
then
echo "Use: make_psp_movie video1 video2 video3 ..."
fi

# First file's name postfix - number from 1 to 9999 (originally "1" - file name M4V10001.MP4) -->
output="10000"
postfix=0

until (("1" <= "$postfix" && "$postfix" <= "9999"))
do
echo -n "Enter first file's name postfix (from 1 to 9999): "
read postfix

if [ "$postfix" == "" ]
then
postfix=1
fi
done

let "output += $postfix"
# First file's name postfix - number from 1 to 9999 (originally "1" - file name M4V10001.MP4) <--

# target dir
target="$prefix/100MNV01"
mkdir -p "$target"

for m in "$@"
do
echo "-------------------"
echo "Start converting $m"
echo "-------------------"
#output="10001"
while [ -f "$target/M4V${output}.MP4" ]
do
let "output += 1"
done
#generate video
#If "-r 29.97" does NOT work try "-r 14.985"
$ffmpeg -i "$m" -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320x240 "${target}/M4V${output}.MP4"
#generate thumbnail
$ffmpeg -y -i "$m" -f image2 -ss $ss -vframes 1 -s 160x120 -an "${target}/M4V${output}.THM"
#list the files that were just generated
ls -l "${target}/M4V${output}.MP4" "${target}/M4V${output}.THM"
done
echo
echo "---------------------------------------------------------------------------"
echo "You will find any newly generated PSP videos in:"
echo " ${target}"
echo
echo "Please copy them to your PSP's 'MP_ROOT/100MNV01/' folder."
echo
echo "Note: if that folder doesn't already exist, just create the folders first."
echo "---------------------------------------------------------------------------"


Для решения задачи конвертации под Linux
видео для просмотра на Sony PSP
существует замечательная программа - PSPVC.


Процесс установки

Качаем архив (на данный момент последний релиз за номером 0.3 и все опыты проводились именно на нём) с программой с официального сайта.

Устанавливаем необходимые для сборки пакеты (и их -devel соответствия если нужно):
- nasm
- libfaac
- liba52
- libxvidcore
- gtk+2.0

Распаковываем архив и от рута даем команду установки:
./install.sh <путь для установки> (/usr/local по умолчанию)

После запуска pspvc вы увидите удобный gtk-интерфейс, где можно выставить параметры видео, запустить конвертацию и сгенерировать preview.
Описывать его подробно смысла нет.

Подводные камни

Возможно на вашем дистрибутиве программа соберётся без проблем (на Ubuntu 7.04 собирается без проблем), однако у меня (на ALTLinux) без них не обошлось.
Опишу подробней:

1) Проблема:
программа просто не собирается с ошибкой вида:
ffmpeg/libswscale/swscale_template.c
gcc is unable to create an executable file.
If gcc is a cross-compiler, use the --cross-compile option.
Only do this if you know what cross compiling means.
C compiler test failed.
If you think configure made a mistake, make sure you are using the latest
version from SVN. If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.err" produced by configure as this will help
solving the problem.
ERROR during configure FFMPEG

Решение:
В строке #56 файла install.sh убрать флаг "-lX11"

2) Проблема:
не компилируется ffmpeg с ошибкой (возможно из-за старой версии libxvidcore):
ERROR during configure FFMPEG

Если запустить компиляцию ffmpeg вручную видна суть ошибки:
vid_rc.o xvid_rc.c
xvid_rc.c: In function `ff_xvid_rate_control_init':
xvid_rc.c:70: error: structure has no member named `vbv_size'
xvid_rc.c:71: error: structure has no member named `vbv_maxrate'
xvid_rc.c:72: error: structure has no member named `vbv_initial'
make[1]: *** [xvid_rc.o] Ошибка 1
make[1]: Leaving directory `...'
make: *** [lib] Ошибка 2
ERROR during compilation or installation of FFMPEG

Решение:
Не самое элегантное и безопасное, но рабочее решение - закомментировать строки 70-72 в файле /pspvc-install-0.3/work/ffmpeg/libavcodec/xvid_rc (лучше перепаковать его в архив с ffmpeg, что идёт с программой, и удалить старую рабочую директорию work перед новой попыткой компиляции) :
//xvid_2pass2.vbv_size= s->avctx->rc_buffer_size;
//xvid_2pass2.vbv_maxrate= s->avctx->rc_max_rate;
//xvid_2pass2.vbv_initial= s->avctx->rc_initial_buffer_occupancy;


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.