Strona 1 z 1

bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 11:29
autor: maly_wariat
Mam taką pętle:

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
cd $folder
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
DST = "${SRC%%.[mM][pP]4}"
ffmpeg -i $SRC $DST.flv
n=$(date +%A-%d-%B-%y)
if [ -f $n ]; then
mv $DST.flv ./$n/$DST.flv
else
mkdir $n
mv $DST.flv ./$DST.flv
fi
done
cd ..
done
dlaczego pętla zrywa mi się po dwóch przebiegach?

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 11:47
autor: kabanek

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
	cd $folder
	find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; 
	do
		DST = "${SRC%%.[mM][pP]4}"
		ffmpeg -i $SRC $DST.flv
		n=$(date +%A-%d-%B-%y)
		if [ -f $n ]; then
			mv $DST.flv ./$n/$DST.flv
		else
			mkdir $n
			mv $DST.flv ./$DST.flv
		fi
	done
	cd ..
done
a czy przypadkiem tak nie wygląda DUŻO bardziej czytelnie?

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 11:51
autor: maly_wariat
Wygląda:) ale nie wnosi niczego nowego do tematu
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC;
a tu masz błąd:)
zmodyfikowałem:

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
        cd $folder
        find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
               DST = "${SRC%%.[mM][pP]4}
               ffmpeg -i $SRC -ar 22050 -acodec libmp3lame -ab 96k -vcodec flv -b 300k -g    150 -cmp 2 -subcmp 2 -mbd 2 -flags +aic+cbp+mv0+mv4 -trellis 1 $DST.flv
               n=$(date +%A-%d-%B-%y)
               if [ -f $n ]; then
                  mv $DST.flv ./$n/$DST.flv
               else
                  mkdir $n
                  mv $DST.flv ./$DST.flv
               fi
done
cd ..
done
i tym razem o co ?
FFmpeg version SVN-r19352-4:0.5+svn20090706-2ubuntu2, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5+svn20090706-2ubuntu2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --extra-cflags=-I/build/buildd/ffmpeg-0.5+svn20090706/debian/include --enable-shared --disable-static
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 0
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libavfilter 0. 4. 0 / 0. 4. 0
libswscale 0. 7. 1 / 0. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Oct 13 2009 22:15:16, gcc: 4.4.1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x844e700]multiple edit list entries, a/v desync might occur, patch welcome

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 59.94 (60000/1001)
Last message repeated 1 times
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './20091128-122043.mp4':
Duration: 00:00:10.28, start: 0.000000, bitrate: 349 kb/s
Stream #0.0(eng): Video: mpeg4, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 59.94 tbr, 300 tbn, 1k tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16
Output #0, flv, to './20091128-122043.flv':
Stream #0.0(eng): Video: flv (hq), yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 300 kb/s, 90k tbn, 59.94 tbc
Stream #0.1(eng): Audio: libmp3lame, 22050 Hz, stereo, s16, 96 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 615 fps= 48 q=3.8 Lsize= 776kB time=9.80 bitrate= 649.0kbits/s
video:646kB audio:115kB global headers:0kB muxing overhead 2.072419%
robi tylko jeden przebieg;/

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 13:00
autor: otokan

Kod: Zaznacz cały

 DST = "${SRC%%.[mM][pP]4}" 
Usun spacje przed i po = .

Usterek w Twoim kodzie jest troche wiecej. Koniecznie przeczytaj: http://mywiki.wooledge.org/BashPitfalls

Dodane:
Wiele ciekawych rzeczy jest też tutaj http://mywiki.wooledge.org/BashFAQ
btw: podczas pisania / debuggowania skryptu dobrze wstawic ' set -x' na poczatku skryptu

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 13:03
autor: maly_wariat
oryginalnie nie mam tej spacji, znacznik code mi ją dodał;/

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 13:26
autor: otokan
A co to wg Ciebie ma robic?

Kod: Zaznacz cały

 mv $DST.flv ./$DST.flv 
Na pewno chcesz miec -f w warunku ifa (a nie np. -d ?)

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 13:46
autor: maly_wariat
Kurcze przepraszam nie wyspałem się jak to przepisywałem. Zamieszczam oryginalną wersje
jeszcze raz przepraszam

Kod: Zaznacz cały

#!/bin/bash
cd /home/usr
for folder in testowy1 testowy2
do
cd $sklep
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
DST="${SRC%%.[mM][pP]4}"
echo $DST
ffmpeg -i $SRC -ar 22050 -acodec libmp3lame -ab 96k -vcodec flv -b 300k -g 150 -cmp 2 -subcmp 2 -mbd 2 -flags +aic+cbp+mv0+mv4 -trellis 1 $DST.flv
rm -rf $SRC
n=$(date +%A-%d-%B-%y)
        if [ -d $n ]
         then
        mv $DST.flv ./$n/$DST.flv
        else
	mkdir $n
	mv $DST.flv ./$n/$DST.flv
	fi       
done
cd ..
done

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 14:19
autor: otokan
A co to jest $sklep ? :P

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 14:21
autor: maly_wariat
$sklep -> $folder w oryginale

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 14:44
autor: otokan
W ostatnio zamieszczonym kodzie masz i $sklep i $folder.

Kod: Zaznacz cały

for folder in testowy1 testowy2
do
cd $sklep
Wklejaj kod z edytora, a nie przepisuj.

Topornie Ci pisanie tego skryptu idzie. Może weż zacznij metodą małych kroczków.

Najpierw

Kod: Zaznacz cały

#!/bin/bash

cd /home/usr
pwd
for folder in testowy1 testowy2
do
   echo "[$folder]"
   cd "$folder"
   pwd
   cd ..
done
Jak juz to przetestujesz i bedzie robic dokladnie to co chcesz to dodaj

Kod: Zaznacz cały

find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
echo "[$SRC]"
echo "[${SRC%%.[mM][pP]4}]"
done
itd

Odp: bash pętla zrywa się po dwóch przejsciach.

: 28 lis 2009, 15:02
autor: maly_wariat
właśnie o to chodzi że pisałem to małymi kroczkami i niby wszystko wyświetla się po prawnie, wydaje mi się że pętle przerywa ffmpeg. Dzisiaj wieczorem dopiero sprawdzę czy działa, bo teraz nie mam możliwości.