Start timestamp des pts_time in einen MPEG-TS stream nicht null ist
Bin ich mit ffmpeg zu erzeugen, einen MPEG-TS-stream mit dem folgenden Befehl.
ffmpeg -i file1.mp4 -c:v libx265 -x265-params crf=25 -c:a copy output1.ts
Wenn man die output1.ts mit,
ffplay -i output1.ts -vf showinfo
zeigt, dass start-Zeitstempel unter pts_time nicht gleich null ist. es zeigt 1.48.
Ein Remuxen mit
ffmpeg -i output1.ts -c:v copy -c:a copy -mpegts_copyts 1 output2.ts
verursacht die ausgang2.ts haben ein start-Zeitstempel von 0,08.
Ich wäre wirklich dankbar, wenn jemand erklären könnte, mir den Grund für dieses Verhalten und wie kann ich die start-timestamp auf null.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es sehr üblich, fügen Sie eine beliebige Menge von Zeit, die zu Beginn eines transport-stream. Der Grund dafür ist zweifach.
Erste, transport-Ströme wurden ursprünglich für sehr lange Sendungen (Tage oder Wochen. Denke, Fernsehsender). TS verwendet 33 bits zu speichern 90kHz Zecken. Dies macht timesamp Rollover sehr Häufig (etwa einmal pro Tag). Da der timestamp rollt sich nicht mehr so Häufig, Es ist generell keine gute Idee sich auf die Zeitstempel als etwas anderes als eine beliebige Zecke auf einem sich ständig bewegenden Uhr mit einem start-Zeit an einem unbekannten Zeitpunkt in der Vergangenheit. Denken Sie an eine analoge Uhr, und entfernen Sie alle Markierungen. Ohne die Orientierung, die Sie nicht verwenden können, es zu erzählen Zeit. Aber man kann immer noch verwenden Sie es, um die Zeit zu Messen. In anderen Worten, die Zeitstempel haben nur Bedeutung im Verhältnis zu anderen timestamps im stream. Sie existieren nicht für menschliche Bequemlichkeit. Sie existieren, damit der decoder seine Aufgabe erfüllen kann.
Aber warum nicht bei 0 beginnen trotzdem. TS speichert pts und dts als separate Werte, wo andere Container dts+cts zu bestimmen, Pkt. Also, Wenn Sie einen Strom mit out-of-order - (B) frames, begegnen Sie Bildern, die ausgewertet werden muss, bevor die Zeit 0, und anschließend dargestellt. In anderen Worten, Sie haben negative (Roll-over) dts-Werte am Anfang des Streams. Zur Vereinfachung der Decoder job, einen Wert größer als der größte mögliche cts (pts-dts) ist Hinzugefügt, um die pts - /dts aus, um Sie in den positiven Bereich an den start. Dies ist gängige Praxis, und Links bis zu dem decoder/player zur Anwendung der Logik, was Zeit ist, dem Benutzer angezeigt.
Den Einsatz von Puffern, die es unmöglich machen, eine Anzeige Strom zum Zeitpunkt 0!