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.