Wie kann ich eine .ts-Datei mit ffmpeg in eine einzelne .m3u8-Datei konvertieren?

0

Ich habe eine .ts-Datei, aber ich habe keine Quelldatei (Videodatei). Ich muss eine m3u8-Datei aus der .ts-Datei selbst erstellen, ohne andere .ts-Dateien zu erstellen. Ich habe den folgenden Befehl verwendet.

ffmpeg -i mytsfile.ts -hls_list_size 0 mym3u8.m3u8 -hide_banner

Wenn ich den obigen Befehl verwendet habe, wurden fast 590 TS-Dateien mit dem Namen mym3u8N.ts erstellt (wobei N die Zahl 1 bis 590 ist). Ich möchte keine TS-Dateien. Ich brauche nur m3u8 datei.

emb-pro
quelle
2
Was meinen Sie mit "Sie haben nicht die Quelldatei". Die .ts-Datei ist eine Videodatei, oder? Bitte erläutern Sie, was Sie zu tun versuchen.
slhck
Tatsächlich wird die .ts-Datei von einer mp4-Datei erstellt. Deshalb habe ich so gesagt.
emb-pro
Ich habe nicht die Original-MP4-Datei, wie ich Ihnen schon gesagt habe. @slhck
emb-pro

Antworten:

1

Wenn Sie nur eine M3U8-Datei aus einem vorhandenen Segment generieren möchten:

ffmpeg -i input.ts \
-map 0 -c copy \
-f segment -segment_list out.m3u8 \
-segment_time 60 \
out%03d.ts

Hier ist es wichtig, dass Sie ein angeben -segment_time gleich oder größer als die tatsächliche Eingabedauer, andernfalls teilt ffmpeg die Eingabedatei erneut auf.

Die Ausgabe M3U8 enthält eine Referenz auf die neu ausgegebene TS-Datei:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:61
#EXTINF:60.033333,
out000.ts
#EXT-X-ENDLIST

Sie können das verwenden oder das löschen out000.ts Datei (da sie im Wesentlichen der Eingabedatei entspricht), und ändern Sie den Dateinamen in der M3U8-Datei, da der Inhalt der Mediendatei derselbe ist.

Sie können einen solchen Ersatz durchführen, z. mit perl:

perl -pi -e 's/out000.ts/input.ts'

Ich sollte hinzufügen, dass Sie für den einfachen Fall einer Segmentdatei, deren Dauer Sie kennen, die M3U8-Datei einfach manuell generieren können. Sie müssen dann das angeben EXT-X-TARGETDURATION und EXTINF: Dauerwerte auch manuell.

slhck
quelle
Ich habe die m3u8-Datei abgespielt, die mit dem von Ihnen erwähnten Befehl erstellt wurde. Sie spielte gut. Wenn ich jedoch die ts-Dateien lösche (durch den Befehl erstellt), wird die m3u8-Datei überhaupt nicht abgespielt. Gibt es einen Grund dafür?
emb-pro
Natürlich wird es dann nicht funktionieren. Wie gesagt, können Sie es "löschen und den Dateinamen in der M3U8-Datei ändern". Das generierte M3U8 referenziert die Datei out000.ts, aber Sie müssen es manuell ändern input.ts. Andernfalls sucht der Player nach der gelöschten Datei. Wenn Sie die M3U8-Datei mit einem Texteditor öffnen, werden Sie feststellen, dass hier nicht viel los ist. Sie können sie einfach selbst erstellen.
slhck
Ich habe verstanden, könntest du es bitte für mich schaffen?
emb-pro
Wie meinst du das, mach es für dich? ffmpeg hat die M3U8-Datei bereits für Sie erstellt. Ich sage nur, wenn Sie ffmpeg nicht verwenden möchten, können Sie ein kleines Skript schreiben oder einen Texteditor verwenden, um die M3U8-Datei einzugeben, die der von ffmpeg automatisch generierten ähnelt. Sie müssen nur die Werte für die Dauer und den Dateinamen ersetzen.
slhck
Hallo, ich habe eine m3u8-Datei als Antwort erstellt, aber das Navigieren durch die Videodatei (m3u8) nimmt mehr Zeit in Anspruch (fast 10 Sekunden). Das ist sehr ungewöhnlich. Gibt es dafür eine Alternative?
emb-pro