000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
currock
Beiträge: 60
Registriert: 12.06.2013 23:51:58

000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von currock » 24.03.2018 14:42:13

Lösungen zu ähnlichen Aufgaben habe ich schon gefunden, aber nichts passendes zu meinem Ding hier:
Ich habe ettliche Verzeichnisse, die mein SAT-PVR aufgenommen hat. Die Aufnahmen werden in mehrere *.ts - Dateien aufgeteilt, die maximal 3.9GB groß sind. Je nach Auflösung und Länge der Aufnahme befinden sich verschieden viele Dateien im Ordner.
Was ich bis jetzt per script hinbekomme, ist daß jedes Aufnahmeverzeichnis durchsucht wird und jede *.ts Datei in eine gleichnamige *.mp4 codiert wird. Kann ffmpeg das auch in einer do ... done Schleife gleich beim Codieren in eine einzige Datei schreiben?
Hier mein bisheriges Script, ist nicht optimiert und noch "entschärft", weil ich noch am Basteln bin (mit NoPaste hat es nicht funktioniert, und so lang ist es auch nicht):

#!/bin/sh

for titel in 201?-* # Die Verzeichnisse fangen mit der Jahreszahl an, nur diese sollen bearbeitet werden
do
echo $titel
echo "--"
for tsvideo in $titel/*.ts
do
mpvideo=$titel/`basename -s .ts $tsvideo`.mp4
echo $titel $tsvideo $mpvideo
# ffmpeg -i $tsvideo $mpvideo
done
echo "-----------------------------"
done

MaGe
Beiträge: 1708
Registriert: 01.06.2014 17:12:16

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von MaGe » 24.03.2018 17:48:39

ich weiss nicht welcher codec in den .ts - Dateien vorhanden ist.

keine .ts Dateien zum testen
sowas kann ffmpeg ob es das ist was du willst?
2016-tvp-480p.mkv
2017-tvp-480p.mkv
2018-tvp-480p.mkv

ins Verzeichnis mit den Videos

Code: Alles auswählen

 ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" 201?-*) -c copy output.mp4 


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

currock
Beiträge: 60
Registriert: 12.06.2013 23:51:58

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von currock » 24.03.2018 21:40:05

Das hier sind die Infos, die z.B. in einem der *.ts Dateien stecken:

NoPaste-Eintrag40205

Die Konvertierung mit ffmpeg funktioniert so weit schon mal, Feineinstellungen kann man immer noch machen. Nur kommen halt einzelne Dateien dabei heraus, ich hätte sie gerne gleich in einer Datei, sonst muss ich nochmal durch alle Verzeichnisse einzeln gehen oder alle in KDEnlive oder AviDemux zusammenkleben.
Im Idealfall habe ich nach dem Durchlauf des Scriptes eine *.mp4 Datei, bei der ich nur noch Anfang und Ende trimmen muss, und ggf. noch Werbung herausschneide, ohne alles noch einmal neu zu kodieren.

MaGe
Beiträge: 1708
Registriert: 01.06.2014 17:12:16

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von MaGe » 25.03.2018 16:06:36

currock hat geschrieben: Nur kommen halt einzelne Dateien dabei heraus, ich hätte sie gerne gleich in einer Datei
201?

zuallererst ich habe überhaupt keine ahnung von skripten,
ich matsche mir aus dem internet allerlei zusammen.
Ich teste das so weit wie möglich auf meinem PC
immer Sicherung von den Dateien anlegen!!

Ändern der 201? in *.ts

konsole
wechseln in den ordner 201? mit den .ts dateien

Code: Alles auswählen

 ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.ts) -c copy output.mp4 
output.mp4 umbenennen


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

currock
Beiträge: 60
Registriert: 12.06.2013 23:51:58

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von currock » 26.03.2018 19:23:29

MaGe hat geschrieben: ↑ zum Beitrag ↑
25.03.2018 16:06:36
Ändern der 201? in *.ts

konsole
wechseln in den ordner 201? mit den .ts dateien

Code: Alles auswählen

 ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.ts) -c copy output.mp4 
output.mp4 umbenennen
Gerade darum geht es mir ja. Das Script soll durch alle Aufnahmeverzeichnisse, die mit der Jahreszahl anfangen (deswegen 201?*), durchgehen, die *.ts-Dateien umcodieren, und zwar in eine einzige *.mp4 Datei, die dann idealerweise den Namen des Verzeichnisses trägt, ohne daß ich von Hand noch mal hinterhergehen muss.

Zur Verdeutlichung:
home/guido/Multimedia/Videorecorder/2018-03-11.01.25.03-ONE_HD-783_Doctor_Who/ mit den Dateien
-rw------- 1 guido guido 32K Mär 11 02:25 info3.dvr
-rw------- 1 guido guido 3,9G Mär 11 02:25 000.ts
-rw------- 1 guido guido 64K Mär 11 02:25 000.dvr
-rw------- 1 guido guido 3,9G Mär 11 03:04 001.ts
-rw------- 1 guido guido 64K Mär 11 03:04 001.dvr
-rw------- 1 guido guido 3,9G Mär 11 03:44 002.ts
-rw------- 1 guido guido 64K Mär 11 03:44 002.dvr
-rw------- 1 guido guido 3,9G Mär 11 04:25 003.ts
-rw------- 1 guido guido 64K Mär 11 04:25 003.dvr
-rw------- 1 guido guido 363M Mär 11 05:06 004.ts
-rw------- 1 guido guido 64K Mär 11 05:06 004.dvr

Und herauskommen soll dann idealerweise eine Datei mit dem Namen

2018-03-11.01.25.03-ONE_HD-783_Doctor_Who.mp4

Die Verzeichnisse, die mit der Jahreszahl anfangen, werden so von meinem SAT-Receiver angelegt und von mir noch mit einer Kurzbeschreibung versehen. (Easy-One, hat ca. 35€ gekostet, läuft aber tadellos).

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von NAB » 27.03.2018 06:26:40

Ja, nun probiere doch die Zeile von MaGe mal aus (mir ist seine <()-Konstruktion etwas suspekt, die lässt sich schwer debuggen):

Code: Alles auswählen

cd /home/guido/Multimedia/Videorecorder/2018-03-11.01.25.03-ONE_HD-783_Doctor_Who/
ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.ts) -c copy output.mp4 
Wenn das klappt, musst du nur noch ein cd in jedes Verzeichnis machen und das output.mp4 nach deinen Wünschen setzen.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

currock
Beiträge: 60
Registriert: 12.06.2013 23:51:58

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von currock » 01.04.2018 02:08:48

Dank an MaGe und NAB erstmal, das hilft jedenfalls schon mal weiter.
NAB hat geschrieben: ↑ zum Beitrag ↑
27.03.2018 06:26:40

Code: Alles auswählen

ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.ts) -c copy output.mp4 
Wenn das klappt, musst du nur noch ein cd in jedes Verzeichnis machen und das output.mp4 nach deinen Wünschen setzen.
Ich habe es noch so abgeändert:

Code: Alles auswählen

ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.ts) Doctor_Who.mp4
Dann werden alle *.ts in dem Verzeichnis neu codiert und aus (in diesem Fall) 12 GB werden 1,9 GB.
Nur wenn ich das so in ein Script einbauen will (um alle Verzeichnisse durchzugehen) gibt es eine Fehlermeldung:

Code: Alles auswählen

Syntax error: "(" unexpected
Ich bin mich auch eher am durchwursteln. Wozu das %s beim (printf "file '$PWD/%s'\n" *.ts) ist, habe ich auch noch nicht herausgefunden.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von NAB » 01.04.2018 02:48:35

currock hat geschrieben: ↑ zum Beitrag ↑
01.04.2018 02:08:48
Dann werden alle *.ts in dem Verzeichnis neu codiert und aus (in diesem Fall) 12 GB werden 1,9 GB.
Ist das so erwünscht?
currock hat geschrieben: ↑ zum Beitrag ↑
01.04.2018 02:08:48
Nur wenn ich das so in ein Script einbauen will (um alle Verzeichnisse durchzugehen) gibt es eine Fehlermeldung:
Das könnte an dem Script liegen, welches du uns vorenthältst. Insbesondere sollte es mit:
#!/bin/bash
anfangen.
currock hat geschrieben: ↑ zum Beitrag ↑
01.04.2018 02:08:48
Wozu das %s beim (printf "file '$PWD/%s'\n" *.ts) ist, habe ich auch noch nicht herausgefunden.
Das steht auch nirgendwo so richtig, nicht mal in "man 3 printf". Dazu bräuchtest du ein C Handbuch, welches "printf()" gründlich durchkaut. Das %s ist der Platzhalter, der durch sämtliche *.ts ersetzt wird. So extravagant hätte ich mir das auch nicht zurechtgebastelt. Die ganze Konstruktion stammt von hier:
https://trac.ffmpeg.org/wiki/Concatenate
Die Alternativen erzeugen alle eine extra .txt Datei pro Verzeichnis (pro Film) auf der Platte. Das ist zwar umständlicher und mehr Code, aber meiner Meinung nach leichter verständlich und leichter zu debuggen. Ich sehe aber keinen Grund, warum du es nicht genau so lassen solltest wie es ist.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

MaGe
Beiträge: 1708
Registriert: 01.06.2014 17:12:16

Re: 000.ts 001.ts 002.ts .... zu einer mp4 codieren?

Beitrag von MaGe » 01.04.2018 12:42:56

currock hat geschrieben: Ich bin mich auch eher am durchwursteln. Wozu das %s beim (printf "file '$PWD/%s'\n" *.ts) ist, habe ich auch noch nicht herausgefunden.
einmal mit %s und ohne %s

printf "file '%s'\n" ./*.mkv > mit-s.txt

file './tvs-agents-of-shield-ded-dl-ithd-x264-301.mkv'
file './tvs-agents-of-shield-ded-dl-ithd-x264-302.mkv'
file './tvs-agents-of-shield-ded-dl-ithd-x264-303.mkv'

und ohne %s
printf "file \n" ./*.mkv > ohne-s.txt

file '


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Antworten