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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.