codiere

来自「Motion JPEG编解码器源代码」· 代码 · 共 487 行

TXT
487
字号
#!/bin/sh## codiere ist ein Shellscript das entweder AVI-files bearbeitet.# Bei AVI-Files wird der Name des AVI-Files auch f黵 die komprimierten# Files verwendet - erweitert um entsprechende 膎derungen.# AVI-Files beginnen - so setzt es das script voraus - mit# einem Grossbuchstaben und enden mit Kleinbuchstaben.# Editlisten beginnen mit Kleinbuchstaben und es wird folgendes# Schema verwendet: ja01[a - z] wird zum ersten File zusammengefasst.# Die Dateien ja02[a-7] werden zum zweiten File zusammengefasst.## codiere is a shell-script that works with AVI-files and# editlists. In case of AVI-Files the name of the file is used# also for the output-Name. In case of editlists you are asked# for the name of the output-file.# It is mandatory that AVI-files start with a capital letter.# It is mandatory, that editlist-files don't start with capitals.# For editlists the following scheme is used:# Files ja01[a-z] will be used for the first output-file# Files ja02[a-z] will be used for the second output-file.# # If you want to get rid of the German questions: I tried to# translate everything - just browse the script for the word# English - and change it to your preferences.## A second word of warning: Change the input- and output- directories # to your needs# Otherwise the script might not work :-)#echo -e "\n READ & ADAPT THE SHELL-SCRIPT TO YOUR NEEDS (LINE 37+38)" echo -e "After that: Delete lines 30 to 36\n"echo -e "\nBitte das Shellscript anpassen Zeile 37 und 38"echo -e "danach Zeilen 30 - 36 entfernen\n"#exit 0directin=/video/   # CHANGE HERE and keep BOTH slashesdirectout=/toast2/ # CHANGE HERE and keep BOTH slashes## The following options are for yuvscaler - not used for now# The variables are needed but have no meaning for now -# that's work in Progress.# Die folgenden Zeilen sind Arbeitsvorbereitung - die Variablen# werden gebraucht, haben aber noch keine weitere Bedeutung!# ---------------start work in progress--------------------------yuvform=""## yuvform="-n p" newer option - not used for now.# yuvform not used for now# yuvform="-n p"   # p = PAL   n = NTSC    s = SECAM# # # for now: not used: yuvinform=## yuvinform="-I INTERLACED_ODD_FIRST"#yuvinform=""## N.B: yuvoutform new format is not used for now### -----------------End work in progress-----------------cd $directinecho -e "\n  Ist der erste Buchstabe gross, werden avi-Files bearbeitet."echo "  Ist der erste Buchstabe klein,"echo "  werden ohne weitere Pr黤ung editlisten vorausgesetzt"echo -e "\n\n Welche Dateien bearbeiten? \c"# English:# echo -e "\n If the first letter oft the filename is a capital letter# echo "I'll asume avi-files."# echo "  Otherwise editlists are assumed."# echo -e "\n\n Which files should I process? \c"read c#echo -e "M = Monochrome oder ENTER = Farbe \c"# English echo -e " M = Monochrome   ENTER = Colour \c"read bwif [ "$bw" = "m" ] || [ "$bw" = "M" ]thenbwfilter="-m"# # yuvscoutadd="-O MONOCHROME" # not used for nowyuvscoutadd=""#elseyuvscoptadd=""bwfilter=" "fi#echo -e "LAV2YUVfilter: 0 = n0 d1   1 = n1 d1   2 = n1 d2  3 = n1 d3 (Enter = 2) \c"read filterif [ -z "$filter" ]thenfilter=2fi## Nun folgen - absichtlich einger點kt - die verschiedenen Filterfunktionen# Ich habe hier experimentelle Werte verwendet - bei mir ergab es so die# besten Resultate. F黵 R點kmeldungen bin ich dankbar.## English# I used the values, that proofed best for my eyes. Your mileage may vary.# Feedback is very welcome.#	if [ "$filter" = "0" ] 	then	filter="-n 0 -d 1"	mpegoptadd="-q 4"	mplexoptadd="-V"	fi	if [ "$filter" = "1" ]	then	filter="-n 1 -d 1"	mpegoptadd=" -q 5"	mplexoptadd=" -V"	fi	if [ "$filter" = "2" ]	then	filter="-n 1 -d 2"	mpegoptadd=" -q 5"	mplexoptadd=" -V"	fi	if [ "$filter" = "3" ]	then	filter="-n 1 -d 3"	mpegoptadd="-q 6"	mplexoptadd="-V"	fi#filter="${filter} ${bwfilter}"### FRAMEOFFSET#echo -e "Frameoffset in Frames? (ENTER=0) \c"read offqif [ -z "$offq" ]thenoffset=""elseoffset="-o $offset"fiecho -e "Bitrate 1152 - 2500 (ENTER=2500) \c"read bratif [ -z "$brat" ]thenbrat=2500fi# Breitband-Video: Das sind die Filme, bei denen oben und unten# ein schwarzer Rand zu sehen ist und bei manchen Fernsehern# die Seiten ein wenig abgeschnitten werden. Also: Leinwandfilme,# die im Fernsehen ausgestrahlt werden.# Da empfiehlt es sich, diese fast schwarzen R鋘der abzuschneiden.# Das verbessert die Kompression weil nicht im Schwarz-Flimmern# nach Ver鋘derungen gesucht werden muss.## Wideformat Video: Those Hollywood-Movies where you have the# bottom and top with large black stripes.#echo -e "B = Breitbandfilm  V = VHS-Video   ENTER = Direkt ab Tuner \c"## English # echo -e "B = Wideformat-movie     Enter = normal video \c"#read breitif [ -z "$breit" ]	then	BREIT=0	else	if [ "$breit" = "b" ] || [ "$breit" = "B" ]		then		BREIT=1		else		BREIT=2	fifi## Wurde die Aufnahme bereits als vcd gemacht und enth鋖t die# Hinweis darauf im Namen? Dann muss nicht viel gefragt werden,# ausser nach der Bitrate. SVCD und XVCD k鰊nen aus diesen# Aufnahmen sowieso nicht mehr gemacht werden :-)# Die Randbreiten wurden experimentell gewonnen, wenn jemand# das genauer machen kann: Bitte verbessern!## Auch bei "normalen" VHS bzw. Video - Aufnahmen wird oben und# unten ein kleiner Rand abgeschnitten. Die obersten und untersten# Zeilen enthalten meistens nur Geflimmer.## If recorded as vcd (taken from extension):# There i no need to ask for the kind of file, you want to# create :-) # No further questions necessary, assume optimal values# The values for the margins are experimental - I cut off some lines# from the recorded movie, that are normaly not useful. The amount# depends on the source you used for recording.# Improvements are welcome.#VCD=""if [ ${c} \> "Zz" ] # Dateiname mit Kleinbuchstabe First letter not a capital	then	VCD=$( cat ${c}* 2>/dev/null | grep vcd ) # get argument from editlist	else	VCD=$( ls ${c}* 2>/dev/null | grep vcd ) # get argument from filenamefiif [ -n "$VCD" ] 	then	#	# Optimale Werte einstellen - Zeit spielt keine Rolle, ist	# sowieso rasend schnell.	# Assume optimal values - no further questions concering quality.	# VCD is always very fast - if recorded as VCD	quopt="-4 1 -2 1"	yuvscopts="$yuvform $yuvinform $yuvoutform -k VCD"	YUVMEDIAN=1	SCALER=0	if [ $BREIT = "1" ]	then	lavopt="-s 0 $filter -a 352x202+0+43"        else		if [ "$BREIT" = "2" ]		then		lavopt="-s 0 $filter -a 352x240+0+24"		else		lavopt="-s 0 $filter -a 352x270+0+9"		fi	fi	mpegopt="-m 1 -s -h -b $brat $quopt -r 16 "	mplexopt="-m 1 -f 2 -S 840"##	add="${brat}_vcd"	o="VCD MPEG 1 : $brat "else   # According to filenames it's no VCD-record - ask more questions.# # Ist keine VCD-Aufnahme - deshalb ist Abfrage sinnvoll#SCALER=1	echo -e 'Der yuvmedianfilter filtert zus鋞zlich "noise" - braucht aber Zeit'	echo -e "Yuvmdianfilter einsetzen  J = Ja   N oder ENTER = Nein \c"	read yu 	if [ -z "$yu" ]		then		YUVMEDIAN=0		else		if [ $yu = "j" ] || [ "$yu" = "J" ] || [ "$yu" = "y" ] 			then			YUVMEDIAN=1			else			YUVMDEIAN=0		fi	fi # End for YUVMEDIANFILTER ?#	echo -e "Felddiagnose a=optimal b=schnell=ENTER ( 30% schneller, reicht meistens) \c"# English: echo -e "a = optimised for quality b = optimised=ENTER for speed in most cases ok \c"	read qopt	if [ -z "$qopt" ]	then	qopt=b	fi	if [ $qopt = "a" ] || [ "qopt" = "A" ]		then		quopt="-4 1 -2 1"		else		quopt=" "		fi		echo -e "\nA = SVCD    B = XVCD   C = VCD   ( ENTER = SVCD ) \c"		read F		if [ -z "$F" ]			then			F="a"			fi		if [ "$F" = "A" ] || [ "$F" = "a" ]		then		d=$brat		yuvtarget="-k SVCD"       	yuvscopts="$yuvform $yuvinform $yuvoutform $yuvtarget"		f=2		if [ "$BREIT" = "1" ]		then		lavopt="-s 0 $filter -a 768x406+0+85"		else			if [ "$BREIT" = "2" ]			then			lavopt="-s 0 $filter -a 768x480+0+48"			else			lavopt="-s 0 $filter -a 768x540+0+18"			fi		fi		mpegopt=" -m 2 -b $brat $mpegoptadd $quopt -r 16 -F 0"		mplexopt="-m 2 -f 4 -S 840 $mplexoptadd"		o="SVCD MPEG 2 mit $brat "		add="${brat}_m2"	fi	if [ "$F" = "B" ] || [ "$F" = "b" ]		then		d=$brat		f=1		yuvtarget="-k SVCD"       	yuvscopts="$yuvform $yuvinform $yuvoutform $yuvtarget"		if [ "$BREIT" = "1" ]		then		lavopt="-s 0 $filter -a 768x406+0+85"		else			if [ "$BREIT" = "2" ]			then			lavopt="-s 0 $filter -a 768x480+0+48"			else			lavopt="-s 0 $filter -a 768x540+0+18"			fi		fi		mpegopt="-m 1 -h -b $brat $quopt -r 16 "		mplexopt="-m 2 -f 4 -S 840"##		add="${brat}_xvcd"		o="XVCD MPEG 1 mit $brat "	fi	if [ "$F" = "C" ] || [ "$F" = "c" ]		then		d=$brat		yuvtarget="-k VCD"       	yuvscopts="$yuvform $yuvinform $yuvoutform $yuvtarget"		f=1		if [ $BREIT = "1" ]		then		lavopt="-s 0 $filter -a 768x406+0+85"       		else			if [ "$BREIT" = "2" ]			then			lavopt="-s 0 $filter -a 768x480+0+48"			else			lavopt="-s 0 $filter -a 768x540+0+18"			fi		fi		mpegopt="-m 1 -b $brat $quopt -r 16 "		mplexopt="mplex -m 1 -f 2"		add="${brat}_vcd"		o="VCD MPEG 1 mit $brat "	fifi  ## Ende Abfrage ob es eine VCD-Aufnahme ist# End of "Is it a VCD-record or do I need more Information"#if [ ${c} \> "Zz" ] # Dateiname mit Kleinbuchstabe First letter not a capital	then	echo -e "\n Bitte Ausgabe-Name angeben \c"# English echo -e "\n Enter Output-Name \c"	read ausfi# ##echo -e "\nWartezeit in Minuten  (Enter startet sofort, CTRL-C unterbricht) \c"# English echo -e "\n Enter delay in minutes (Just ENTER starts, CTRL-C to break \c"read warteif [ -z "$warte" ]	then	warte=0	else	warte=`expr $warte \* 60`fisleep $warteif [ ${c} \> "Zz" ] # Dateiname mit Kleinbuchstabe	then	auszahl="1"	maches="ja"	null=`expr $auszahl \< "10"`	if [ -n $null ]	then	auszahl="0"$auszahl 	fi	klein=${c}${auszahl}*	machs=`ls $klein 2>/dev/null`	if [ -n "$machs" ]	then	maches="ja"	else    echo "Keine Dateien zur Verarbeitung gefunden"# English echo "No files found "	maches="nein"	fi	date >startzeit_$c	while [ "$maches" = "ja" ]	do	if [ -f ${directout}${aus}${auszahl}_${add} ] || [ -f ${directin}${aus}${auszahl}_${add}.mpg ]		then		echo "MPEG-File ${directout}${aus}${auszahl}_${add} exists"		else	if [ "$YUVMEDIAN" = "1" ]	then	if [ "$SCALER" = "1" ]  # And YUVMEDIAN=1	then	lav2yuv $lavopt $offset $klein | yuvscaler $yuvscopts | yuvmedianfilter | mpeg2enc -h -s $mpegopt -o ${directout}${aus}${auszahl}_${add}	else	lav2yuv $lavopt $offset $klein | yuvmedianfilter | mpeg2enc -h -s $mpegopt -o ${directout}${aus}${auszahl}_${add} 	fi	# end for SCALER	else	if [ "$SCALER" = "1" ]  # And YUVMEDIAN=0	then	lav2yuv $lavopt $offset $klein | yuvscaler $yuvscopts | mpeg2enc -h -s $mpegopt -o ${directout}${aus}${auszahl}_${add}        else	lav2yuv $lavopt $offset $klein | mpeg2enc -h -s $mpegopt -o ${directout}${aus}${auszahl}_${add}	fi	# End for SCALER	fi     # End for YUVMEDIAN	fi     # End: existing file    if [ -f ${directout}${aus}${auszahl}.snd ]	then	echo "Soundfile ${directout}${aus}${auszahl}.snd exists"	else	lav2wav $klein | mp2enc -V -o ${directout}${aus}${auszahl}.snd	fi	if [ -f ${directout}${aus}${auszahl}_${add}.mpg ]	then	echo "${directout}${aus}${auszahl}_${add}.mpg exists"	else	mplex -v 0 $mplexopt $mplexoptadd -o ${directin}${aus}${auszahl}_$add.mpg ${directout}${aus}${auszahl}_$add ${directout}${aus}${auszahl}.snd	fi	auszahl=`expr $auszahl \+ 1`#        echo $auszahl	null=`expr $auszahl \< "10"`	if [ $null = "1" ]	then	auszahl="0"$auszahl	fi	klein=${c}${auszahl}*#        echo $klein	machs=`ls $klein 2>/dev/null`	if [ -n "$machs" ]	then    maches="ja"	else	maches="nein"	fi	doneelse## Input-file-name starts with capital letter# Source-Datei beginnt mit Grossbuchstabe#for i in ${c}*avidoa=`basename $i .avi`if [ -f ${directout}${a}_${add} ] || [ -f ${directout}${a}_${add}.mpg ]thenecho "MPEG-File ${a}_${add} exists"else	if [ "$YUVMEDIAN" = "1" ]	then	if [ "$SCALER" = "1" ]		then	echo "	lav2yuv $lavopt $offset $i  | yuvscaler $yuvscopts | yuvmedianfilter | mpeg2enc $mpegopt -h -s -o ${directout}${a}_${add}"		else		lav2yuv $lavopt $offset $i  | yuvmedianfilter | mpeg2enc $mpegopt -h -s -o ${directout}${a}_${add}	fi	# for SCALER	else	if [ "$SCALER" = "1" ]   # And YUVMEDIAN = 0		then		lav2yuv $lavopt $offset $i  | yuvscaler $yuvscopts | mpeg2enc $mpegopt -h -s -o ${directout}${a}_${add}		else		# SCALER 0 0 And YUVMEDIAN = 0		lav2yuv $lavopt $offset $i  | mpeg2enc $mpegopt -h -s -o ${directout}${a}_${add}		fi # FOR SCALER	fi # FOR YUVMEDIANfi	# For existing fileif [ -f ${a}.snd ]thenecho "Soundfile exists"elselav2wav $i | mp2enc -V -o ${directout}${a}${auszahl}.sndfiif [ -f ${directout}${a}_${add}.mpg ]thenecho "MPLEX-File ${directout}${a}_${d}_mp${f}.mpg exists"else$mplexopt ${a}_${add} ${a}.snd ${directout}${a}_${add}.mpgif [ -f ${a}_${add}.mpg ]thenrm ${a}_${add}fifidonefi

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?