staging.inyokaproject.org

Schleife mit ffmpeg hat Problem

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 941

Quelle/ Dateiinhalt in Form:

Bsp:~/.cache/datei

/media/igendwas/egal/1.mp3
/media/igendwas/egal/2.mp3
/media/igendwas/egal/3.mp3
/media/igendwas/egal/4.mp3

bleibt beim Einlesen für ffmpeg:

/media/igendwas/egal/1.mp3
ia/igendwas/egal/2.mp3
edia/igendwas/egal/3.mp3
/media/igendwas/egal/4.mp3

übrig. Manche Pfade also tlw. abgeschnitten am Anfang. Einlesen per:

for line in "$(cat ~/.cache/datei)"
do
<ffmpeg>
done

oder

while read line 
do
<ffmpeg>
done < ~/.cache/datei

Scheint nur in Verbindung mit ffmpeg aufzutreten. Der 1. Dateipfad wird offb. immer korrekt gelesen. Dateinamen sind tlw. viel länger und mit mehreren Unterstrichen. Ansonsten sind die OK.

Was gäbe es für Möglichkeiten das Pfad Problem abzustellen?

Kreuzschnabel

Anmeldungsdatum:
12. Dezember 2011

Beiträge: 1768

Könntest du die <ffmpeg>-Zeile auch noch mitliefern? Auf die kommt’s ja an. Die Codec-Parameter sind wurscht, aber zumindest Eingabe (-i …) und Ausgabe.

--ks

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 941

YAD hängt davor und liefert mehrere Auswahl Möglichkeiten. Audio mp3,wav,aac /Video h264/h265, bei Allen scheint das irgendwie sporadisch aufzutreten. Warte ja auch auf Sowas wie Muster, bisher kann ich Keines sehen. Wird nur eine Datei genommen gibt es kein Problem.

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 941

Habe das Teil mal abgespeckt, reines Experimentierstadium. Komischerweise liest der jetzt bei Bspw. Auswahl von 3 Dateien auch 3 mit einmal ein. Faxen dicke.

Dateipfad Fehler!
/media/..
/media/..
/media/..
---
environment: Zeile 34: [: : Ganzzahliger Ausdruck erwartet.
---
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/bin/bash
direkt=1;fehler=0;umlauf=0;u=0
if [ -f ~/.cache/konvertieren_zu ]; then
	rm ~/.cache/konvertieren_zu
fi
if [ "$1" ]; then
	direkt=0
	notify-send "$1"
	echo "$1" > ~/.cache/konvertieren_zu
fi

konvertieren-f() {
if [ ! -f ~/.cache/konvertieren_zu ]; then
	input=$(yad --title="Multimedia Dateien wählen.." --filename="$DIR" --center --width=1000 --height=600 --file --multiple --separator="\n" --file-filter='Alle Dateien|*' --file-filter='*.mp4' --file-filter='*.ts' --file-filter='*.mkv' --file-filter='*.webm' --file-filter='*.mov')
	ret=$?
	if [ "$ret" -ne "0" ]; then exit;fi
	echo "$input" > ~/.cache/konvertieren_zu
fi

format=$(yad --width=500 --text="<span foreground='black'><b><big><big>Auswahl:</big></big></b></span>\n" --center --buttons-layout=spread --text-align=center --borders=40 --form --field=":CB" mp3-256\!H264-qualität-22 --separator="")
ret=$?;if [ "$ret" -ne "0" ]; then exit;fi

for line in "$(cat ~/.cache/konvertieren_zu)"
do
	dateiname=`echo "$line" | cut -d\. -f1` #ab 1.Pkt abschneiden
	inputordner=$(dirname "$(echo "${line}")")
	
	if [ -f "${line}" ]; then		
		if [ "$format" == "mp3-256" ]; then
			ffmpeg -i "$line" -codec:a libmp3lame -b:a 256k "${dateiname}_256.mp3" && let u++;
		fi
		if [ "$format" == "H264-qualität-22" ]; then
			ffmpeg -i "$line" -crf 22 -preset slow -c:v libx264 -c:a aac "${dateiname}_22.mp4" && let u++;
		fi
	else
		echo ""
		echo "Dateipfad Fehler!"
		echo "${line}"
		echo "---"
		fehler=$((fehler + 1))
	fi
		umlauf=$((umlauf + 1))
done < ~/.cache/konvertieren_zu

notify-send "_ $u _ Dateien geschrieben"
if [ "$direkt" -eq "1" ]; then
	(nemo "$inputordner")&
fi
}

export -f konvertieren-f
gnome-terminal -- bash -c "konvertieren-f;echo '---';read x"

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Marantkurz: In die for-Schleife über $(cat …) wird gleichzeitig der Inhalt der Datei per Umleitung eingeführt als wäre es eine while read-Schleife. Das sieht nicht richtig aus. Ich würde ja grundsätzlich eine while read -r line-Schleife hier bevorzugen.

Warum wird $inputordner so umständlich erzeugt? Was soll das echo da bewirken?

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 941

Warum wird $inputordner so umständlich erzeugt?

Spielt doch keine Rolle.

dirname "${line}"

while read -r line-

Hatte Das(kam vom Netz) probiert, selbes Ergebnis

while IFS= read -r ..; do

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 879

Die Problematik kann ich hier nachstellen

Was gäbe es für Möglichkeiten das Pfad Problem abzustellen?

Du kannst die Datei-Pfade in einem Array speichern und darüber iterieren, anstatt sie in eine Datei zu speichern

1
2
3
4
5
6
7
readarray -t -d $'\n' input < <(yad ... --separator="\n")
...
for i in ${!input[@]}; do
    ...
    ffmpeg -i "${input[i]}" ...
    ...
done

So sollte das funktionieren.

Gruß TNT

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 941

@TNTMaster, Wunderbar, geht. Ich danke Dir sehr!

Ebenso @all.

Antworten |