Господа, требуется помощь в написании скрипта. В связи в началом нового сериального сезона в голову пришла мысль что хватит уже «руками» каждый файл кодировать, надо этот процесс как то автоматизировать. задача: есть папка с видео, из неё необходимо выбирать файлы, в названиях которых содержится — LostFilm.TV, и если при этом нет такого же файла с расширением mp4 (уже закодированный) — запихивать в скрипт и кодировать. Кодирую видео при помощи ffmpeg: ffmpeg -i House.M.D.s07e01.rus.LostFilm.TV.avi -acodec aac -strict experimental -ab 128kb -vcodec mpeg4 -b 1000kb -s 320x180 -r 23.98 House.M.D.s07e01.rus.LostFilm.TV.mp4
тут мы понимаем, что нам как раз нужна эта конструкция, также читаем про команду test которая и будет проверять есть ли такой файл.
Дальше берём утилиту find и находим в нужном каталоге файлы LostFilm.TV
результат команды отправляем скрипту по перекодированию, пока в находятся файлы по маске.
Вывести строки, в которых есть слова foo и bar:
awk '/foo/ && /bar/'
Вывести строки, в которых есть слово foo, но нет bar:
awk '/foo/ && !/bar/'
Преобразование wav файлов в mp3
# Скрипт создает структуру каталогов в другом месте
# затем ищет все wav файлы в указанной директории, определяет что они не сжатые
# сжимает их, причем имя становится name.wav.mp3, то есть к имени файла добовляется .mp3,
# а оригиналы копирует в подготовленное дерево дирикторий
#Переходим в каталог
cd "/home/samba/archives/Архив\ рекламы\ 2004/"
#создаем структуру каталогов в /home/samba1/Архив рекламы 2004/
find ./ -type d | awk '{system ("mkdir -p \"/home/samba1/Архив рекламы 2004/"$0"\"")}'
#ищем все wav файлы, сжимает их, а оригиналы копирует в подготовленное дерево дирикторий
find ./ | grep -i .wav$ \
| awk '{system ("file \""$0"\""); print $0}' \
| awk '/PCM/ {getline; system ("/usr/local/bin/lame -m s -b 256 \""$0"\" \""$0".mp3\" && mv \""$0"\" \"/home/samba1/Архив рекламы 2004/"$0"\"")}'
<source/>
#!/bin/bash
video_folder="/tmp/video"
for i in `ls -a $video_folder/*.avi`
do
i=$(echo $i | sed -s 's/.avi//')
if [[ ! -e "$i.mp4" ]]
then ffmpeg -i $i.avi -acodec aac -strict experimental -ab 128kb -vcodec mpeg4 -b 1000kb -s 320x180 -r 23.98 $i.mp4
else shift
fi
done
2 bliznezz:
Вы правы, конечно )
*философски* а если по-хорошему, то стоило бы сделать как-то так:
use File::Find;
my $dir="/tmp/video";
my @files=();
find(\&listing,"$dir");
sub listing()
{
push @files, $File::Find::name if(/^.*lostfilm\.tv.*\.avi$/i);
}