[script] unire video da file di elenco

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

@doc_pluto "a 2 a 2" ora ho capito anch'io Big Grin
per rinominare si possono usare anche i pattern, esempio

a='Titolo.del.video.1°Tempo.est'
b='Titolo.del.video.2°Tempo.est'
a_b="${a/.[0-9]°Tempo/}"
mencoder <opzioni> "$a" "$b" -o "$a_b"

@Gollum Wave

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

Gollum ha scritto:

Riscrivo lo script

#! /bin/bash
 
1 for file in "$@"
2         do
3                
4                 # Modificare il nome del file in output
5                 # dal comando sed 
6                 out=$(echo $file | sed -e 's/Parte//;s/a//;s/[0-9]//g;s/_n_//')
7                 echo mencoder -oac copy -ovc copy $1 $2 -o $out
8                 
9                  shift 2
10                 if  [[ -z $1 && -z $2 ]]
11                 then
12                         exit
13                 fi      
14 done            
 
 

ho modificato un po' la stringa di sed
sed -e 's/°Tempo.//;s/[0-9]//g;s/_n_//'

ora resta da vedere come fargli leggere i nomi dei file da unire passandogli un file che ontiene l'elenco

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di Gollum
Gollum
(Collaboratore)
Offline
Collaboratore
Iscritto: 03/03/2005
Messaggi: 802

Lo script ti funziona?

Citazione:

per rinominare si possono usare anche i pattern


Ottima soluzione, Aksaf quella dei pattern. Applause

Desktop DELL XPS8100 => openSUSE_12.2 => KDE 4.10 => Core i7 => 3.4.28-2.20 => Nvidia GT220
Notebook Sony Vaio VPPCA =>openSUSE_12.2 => KDE 4.10 => Core i5 => 3.4.28-2.20 => AMD HD 6470M

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

Gollum ha scritto:

Lo script ti funziona?

si passandogli i due video da riga di comando si: viene visualizzato il comando mencoder con i parametri corretti.

se volessi fargli leggere da file?
è sufficiente cambiare for file in "$@" con for file in /percorso/al/file ?

ot: esiste un modo standard per visualizzare in bash la descrizione messa all'inizio di uno script?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

andate troppo veloci... comunque caute!

$ echo 'venerdì13parte17.1°Tempo.ext' | sed 's/°Tempo.//;s/[0-9]//g;s/_n_//'
venerdìparte.ext

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

aksaf ha scritto:

andate troppo veloci... comunque caute!

$ echo 'venerdì13parte17.1°Tempo.ext' | sed 's/°Tempo.//;s/[0-9]//g;s/_n_//'
venerdìparte.ext

con i miei video funzionava bene Tongue non avevano numeri nel titolo..

c'hai ragione, va modificata per funzionare correttamente in senso assoluto..
forse così

echo 'venerdì13parte17.1°Tempo.ext' | sed 's/[0-9]°Tempo.//;s/_n_//'
venerdì13parte17.ext

aksaf ha scritto:

@doc_pluto "a 2 a 2" ora ho capito anch'io Big Grin
per rinominare si possono usare anche i pattern, esempio

a='Titolo.del.video.1°Tempo.est'
b='Titolo.del.video.2°Tempo.est'
a_b="${a/.[0-9]°Tempo/}"
mencoder <opzioni> "$a" "$b" -o "$a_b"

figherrima questa cosa..

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

dunque..

ho modificato lo script per cercare di fargli leggere da un file di testo i vari titoli da usare

#!/bin/bash
# acquisisco l'elenco scritto su file di testo
echo "Inserisci il nome del file elenco:"
echo
read lista
read elenco < "$lista"
for file in "$elenco"
	do
	# Modificare il nome del file in output
	# dal comando sed
	out=$(echo $file | sed -e 's/.[0-9]°Tempo//;s/_n_//')
	echo mencoder -oac copy -ovc copy $1 $2 -o $out
	shift 2
	if  [[ -z $1 && -z $2 ]]
		then
			exit
	fi
done

quello che ottengo è:

: unire_video.sh
Inserisci il nome del file elenco:
 
elenco
mencoder -oac copy -ovc copy -o Motel.Woodstock.DVDRip.avi

l'errore sarà nella gestione del file di testo, ma non capisco come fargli inserire al posto giusto dentro mencoder le prime due righe in elenco.

edit:
allora..

#!/bin/bash
#
# comando singolo da eseguire nella cartella contenente i due file video
# mencoder -ovc copy -oac copy PRIMO-INPUT SECONDO-INPUT -o OUTPUTFILE
#
# acquisisco file elenco
echo
echo "Inserisci il nome del file elenco:"
echo
read lista
elenco=`cat $lista`
echo "----------------"
echo $elenco
echo "----------------"
for file in $elenco
	do
	echo $file
	# Modificare il nome del file in output
	# dal comando sed
	out=$(echo $file | sed -e 's/.[0-9]°Tempo//;s/_n_//')
	file2=$(echo $file | sed -e 's/.[1]°Tempo/.[2]°Tempo/;s/_n_//')
	echo mencoder -oac copy -ovc copy $file $file2 -o $out
done

come faccio a dire al ciclo for di prendere da $elenco un passo pari due (se può servire, mi servono solo gli elementi sulle righe dispari)?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

Gollum ha scritto:

Scusa la domanda, ma perchè non usi la variabile posizionale "$@" ? Basta passargli la posizione dei file, quelli che vuoi processare e fa tutto da se.

ho risolto:

#!/bin/bash
#
# comando singolo da eseguire nella cartella contenente i due file video
# mencoder -ovc copy -oac copy PRIMO-INPUT SECONDO-INPUT -o OUTPUTFILE
 
# acquisisco file elenco
echo
echo "Inserisci il nome del file elenco:"
echo
read lista
elenco=`cat $lista`
echo "----------------"
set `echo $elenco`
for file in "$@"
	do
	# Modificare il nome del file in output
	# dal comando sed
	out=$(echo $1 | sed -e 's/.[0-9]°Tempo//;s/_n_//')
	echo mencoder -oac copy -ovc copy $1 $2 -o $out
	echo "----------------"
	# Passaggio ad elementi successivi
	shift 2
	# Controllo fine elenco
	if  [[ -z $1 && -z $2 ]]
		then
			exit
	fi
done

ora se tolgo echo davanti a mencoder, dovrebbe eseguirlo con quei parametri, corretto?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di Gollum
Gollum
(Collaboratore)
Offline
Collaboratore
Iscritto: 03/03/2005
Messaggi: 802

Scusa posso chiederti perchè la lista è così importante? Comunque la riga read lista non credo che ti serva hai già il comando cat che legge dalla lista

Ricordati che non è necessario avviare lo script da dentro la directory che contiene i file, puoi anche passargli il path completo.
Ottimo lavoro. Applause Ciao

Desktop DELL XPS8100 => openSUSE_12.2 => KDE 4.10 => Core i7 => 3.4.28-2.20 => Nvidia GT220
Notebook Sony Vaio VPPCA =>openSUSE_12.2 => KDE 4.10 => Core i5 => 3.4.28-2.20 => AMD HD 6470M

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

Gollum ha scritto:

Scusa posso chiederti perchè la lista è così importante? Comunque la riga read lista non credo che ti serva hai già il comando cat che legge dalla lista
Ricordati che non è necessario avviare lo script da dentro la directory che contiene i file, puoi anche passargli il path completo.

vedrò di trovare il modo per passargli anche il percorso.
intanto ecco l'ultima versione testata e funzionante:

#!/bin/bash
# -----------------------------------------------------------------------------
# Lo script legge da un file di testo un elenco di file video divisi in primo e
# secondo tempo, li unisce salvandoli in una nuova cartella.
# Va eseguito nella cartella contenente i file video da unire.
#
# Il formato del nome dei file video deve essere:
# 	Titolo.del.film.1°Tempo.ext
# 	Titolo.del.film.2°Tempo.ext
#
# Il formato del nome dei file videoin uscita sarà:
#	Titolo.del.film.ext
#
# Il comando singolo da eseguire nella cartella contenente i due file video è:
# mencoder -ovc copy -oac copy PRIMO-INPUT SECONDO-INPUT -o OUTPUTFILE
# -----------------------------------------------------------------------------
# Acquisisco file elenco
echo
echo "Inserisci il nome del file elenco:"
echo "----------------------------------"
read lista
elenco=`cat $lista`
echo "----------------------------------"
set `echo $elenco`
mkdir NEW
for file in "$@"
	do
	# Modificare il nome del file in output
	# dal comando sed
	out=$(echo $1 | sed -e 's/.[0-9]°Tempo//;s/_n_//')
	mencoder -oac copy -ovc copy $1 $2 -o ./NEW/$out
	echo "----------------"
	# Passaggio ad elementi successivi
	shift 2
	# Controllo fine elenco
	if  [[ -z $1 && -z $2 ]]
		then
			exit
	fi
done

Gollum ha scritto:

Ottimo lavoro. Applause Ciao


grazie a te e ad aksaf per l'aiuto

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia