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 "---------------------------------------------------------------------------"
Предлагаю всё-таки использовать x264 для конвертирования видео, дабы не экономить на качестве звука, и увеличить разрешение видео. Вот мой пример модификации, закоментировать строчку:
$ffmpeg -i "$m" -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320x240 "${target}/M4V${output}.MP4"
и добавить ниже:
$ffmpeg -i "$m" -acodec aac -ab 128kb -vcodec h264 -b 500kb -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 480x272 -r 30000/1001 -title "Linux x264 Convertor" -f psp -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -pass 1/2 "${target}/M4V${output}.MP4"
рекомендую, перед этим обновить x264 кодек из поставки PSPVC, взять можно отсюда:
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
Так же не обязательно использовать версию ffmpeg из поставки PSPVC, подойдёт и та которая уже есть в системе...Но немножко по другому будут выглядеть ключики, например у меня Fedora 8, ffmpeg и x264 взяты из неофициальных репозиториев livna.org, для конфертирования видио на PSP использую:
ffmpeg -i INPUT.avi -acodec libfaac -ab 128kb -vcodec libx264 -b 500kb -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 480x272 -r 30000/1001 -title "clip one" -f psp -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -pass 1/2 -vlevel 13 OUTPUT.mp4
Где input.avi наш видео файл для конвертации (не обязательно .*avi), а OUTPUT.mp4 - результат нашего конвертирования (обязательно *.mp4)
Спешу заметить, что результат конвертирования ffmpeg версией из PSPVC немножко меньше (~5 мегабайт разницы)
А Вообще, автору огромное спасибо за этот скрипт! Блог уже в закладках ;)
Спасибо кстати, пользуюсь и Вашей "строчкой" когда нужно качество получить от видео =)