Ich habe ein paar ts-Segmente, die durch eine einzige index.m3u8-Datei beschrieben werden:
index.m3u8
segment1_0_av.ts
segment2_0_av.ts
segment3_0_av.ts
segment4_0_av.ts
segment5_0_av.ts
Ich weiß, dass sie alle auf die gleiche Weise codiert sind. ffprobe gibt mir Folgendes:
Input #0, mpegts, from 'segment1_0_av.ts':
Duration: 00:00:10.00, start: 0.100511, bitrate: 1251 kb/s
Program 1
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 25 tbc
Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 105 kb/s
Stream #0:2[0x102]: Unknown: none ([21][0][0][0] / 0x0015)
Ich möchte sie in einem einzigen mp4-Container kombinieren. Aber wenn ich Befehle ausprobiere wie:
ffmpeg -f concat -i filelist.txt -c copy output.mp4
Wenn die Datei filelist.txt aus der Datei index.m3u8 generiert wird, wird beanstandet, dass verschiedene Dateien nicht gelesen werden können. Aber das Konvertieren der ts-Dateien selbst scheint gut zu funktionieren. Ich glaube, ich benutze ffmpeg nicht richtig.
Wie verwende ich ffmpeg, um die von index.m3u8 beschriebenen ts-Dateien mit dem Kopiercodec in einem einzigen mp4-Container zu kombinieren?
-bsf:a aac_adtstoasc
.ffmpeg copy ...
, es istcopy ...
(unter Windows)Durch die Verwendung von copy oder cat zum Kombinieren der Dateien, wie z. B. der aktuellen Top-Antwort von szatmary, erhalten Sie möglicherweise eine Datei, die weit über das Limit hinaus abgespielt wird und bei Wiedergabeproblemen nicht mitgesucht werden kann.
Verwenden Sie stattdessen ffmpeg, um diese Dateien ordnungsgemäß zu kombinieren, wie in https://trac.ffmpeg.org/wiki/Concatenate beschrieben . (Installieren Sie ffmpeg hier, falls Sie es noch nicht haben: https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg .)
Wenn Sie zu faul sind, um meinen ersten Link zu lesen, müssen Sie im Grunde genommen eine TXT-Datei erstellen, in der alle zu kombinierenden Dateien in dem Ordner aufgeführt sind, in dem Sie sich befinden. Wiederholen Sie die Verkettung:
Hier ist ein Kopieren und Einfügen von meinem ersten Link, um eine Textdatei zu erstellen, wenn Sie zum Beispiel Windows in der Befehlszeile haben, aber natürlich können Sie die Datei manuell erstellen oder wie Sie möchten:
Stellen Sie sicher, dass Ihre TXT-Datei gut aussieht und korrekt formatiert ist!
Danach auf der Kommandozeile ausführen:
Dabei steht 'mylist.txt' für die soeben erstellte TXT-Datei.
Überprüfen Sie, ob die resultierende Datei das Video korrekt wiedergibt. Von hier aus können Sie wie gewohnt auf mp4 umsteigen, wenn Sie möchten:
quelle
for %i in (*.ts) do
sortiert nicht korrekt für i> = 10. Abgesehen davon , dass alles funktioniert, danke. In der Tat gab es Probleme mit der verketteten Datei, ganz zu schweigen davon, dass sich herausgestellt hat, dass die mit Ihrer Methode erstellte Datei 16% kleiner ist (ich hatte 1400 Teile auf 400 KB).for i in {1..10}; do echo file \'$i.ts\' >> list.txt ; done
2017 antworten
Beim Ausführen
ffmpeg -i some.ts -c copy some.mp4
eines bestimmten Videos erhalte ich folgende Fehlermeldung:Es ist nicht überraschend, dass die Ausführung dies
ffmpeg -i some.ts -c copy -bsf:a aac_adtstoasc some.mp4
behebt.quelle
ffmpeg
und es wird dies jetzt automatisch tun.Alles zusammen
Ausgehend von der Antwort von Juan Aquino (und der Korrektur des ersten Befehls, der mit Bash kompatibel ist, und der natürlichen Reihenfolge der Dateien) sowie der Antwort von 7vujy0f0hy lautet ein einfaches Arbeitsskript für eine Linux-Bash-Shell:
quelle
Die richtige Möglichkeit, mehrere Videodateien aus der m3u8-Wiedergabeliste zu verknüpfen, ist
ffmpeg -i "index.m3u8" -codec copy output.mp4
-codec copy
Codierung zu vermeiden*.mp4
ist in Ordnung, aber es scheint etwas langsam zu muxen, wenn die Wiedergabeliste aus dem Web abgerufen wird*.mkv
oder am*.ts
besten für mich gearbeitetquelle
Du kannst das Verketten einfach so machen (mit bash):
Ersetzen Sie
<number>
mit der höchsten Zahl (offensichtlich). Die Varianten mit ffmpeg haben nicht richtig funktioniert. Die ausgegebene Videodatei würde merkwürdig ruckeln.Ich benutze die for-Schleife, um die richtige Reihenfolge der Dateien sicherzustellen. Vielleicht brauchst du es nicht. Vielleicht ist es sogar möglich, die Ausgabe direkt in ffmpeg zu leiten und in mp4 umzuwandeln.
quelle
Sie können diese ts-Dateien per Pipe in ffmpeg einfügen und die mp4-Datei ausgeben.
cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
oder Wenn Sie den Dateinamen nicht bestellt haben,
grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
quelle
Alle gängigen Antworten auf diese Frage, die Leser dazu verleiten, die TS-Dateien zu verketten, bevor ffmpeg ausgeführt wird, sind falsch. Um sicherzustellen, dass Audio und Video während der Zusammenstellung des mp4-Streams nicht aus dem Takt geraten, sollte die schlecht dokumentierte, aber wichtige Funktion "-f concat" von ffmpeg verwendet werden.
Die beiden vorbereitenden Codezeilen erstellen lediglich eine Datei mit einer Liste von TS-Dateien in diesem Zeilenformat:
quelle