Итак, я тут вычитал что DTS нужен только если в видео есть B-фреймы. В данном случае у меня видео без Б-фреймов, так что с ДТС пока вопрос решен. Осталось проставить ПТС.
Поигрался с ffprobe + ffmpeg, так вот:
Кодирую файл в чистый h264 без аудио и Б-фреймов:
ffmpeg -i input.ts -vcodec libx264 -an -bf 0 -y out.h264
Теперь смотрю на получившийся файл через ffprobe:
[FRAME]
media_type=video
key_frame=0
pkt_pts=N/A
pkt_pts_time=N/A
pkt_dts=N/A
pkt_dts_time=N/A
best_effort_timestamp=N/A
best_effort_timestamp_time=N/A
pkt_duration=48000
pkt_duration_time=0.040000
pkt_pos=929
pkt_size=29
width=640
height=360
pix_fmt=yuv420p
sample_aspect_ratio=1:1
pict_type=P
coded_picture_number=2
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
[/FRAME]
Видно то что PTS просто неизвестен
pkt_pts=N/A
pkt_pts_time=N/A
pkt_dts=N/A
pkt_dts_time=N/A
Но при команде:
ffmpeg -i out.h264 -vcodec copy -y out.ts
Получаю нормалный TS файл, при чем с проставленным PTS.
Откуда он (ffmpeg) его взял? Как его проставить?
На основании чего? Или есть какой-то стандарт типа "увеличивается на N через N пакетов"?
PTS: 126000 - первый пакет
PTS: 129600 - седьмой пакет
PTS: 133200 - восьмой пакет
....