2015-12-15 2 views
1

У меня есть 2 файла: fileSequence0.ts и fileSequence1.ts, я использую FFmpeg для осмотрены количество кадров каждого файла, результат:Отсутствует один кадр между двумя .ts файлами

  • fileSequence0.ts , 29 кадров
  • fileSequence1.ts, 28 кадров

Тогда я Concat 2 файла в один:

ffmpeg -i 'concat:fileSequence0.ts|fileSequence1.ts' -codec copy merge.mp4 

Теперь merge.mp4 имеет кадров, а не 57 = 29 + 28, что это такое, может ли кто-нибудь указать, какие знания у меня отсутствуют?

Файлы, упомянутые здесь, можно скачать по адресу: https://github.com/ideawu/missing-frame-between-ts

ответ

1

Второй файл fileSequence1.ts также имеет кадров не .

Благодаря тому, как это было первоначально сегментирован, если вы играть в одиночку вы не один кадр, как это недостающее необходимые данные SPS/PPS:

[h264 @ 0x4111460] non-existing PPS 0 referenced 
    Last message repeated 1 times 
[h264 @ 0x4111460] decode_slice_header error 
[h264 @ 0x4111460] non-existing PPS 0 referenced 
[h264 @ 0x4111460] decode_slice_header error 
[h264 @ 0x4111460] no frame! 

Поскольку SPS/PPS присутствует в первом файле, и когда вы закончите читать, он будет читать fileSequence0.ts сначала он сможет декодировать потерянный кадр, следовательно, результат будет правильным значением .

Вы можете увидеть это легко изменить порядок в CONCAT:

ffmpeg -i 'concat:fileSequence1.ts|fileSequence0.ts' -codec copy merge.mp4 

Эта команда приводит к кадров, как он не может декодировать первый.

+0

Большое спасибо! Я делаю видео-декодирование с помощью AVAssetReader на iOS, он также сообщает, что 'fileSequence1.ts' имеет 28 кадров не 29. Теперь мне нужно изучить вещи PPS. – ideawu

+0

@ideawu У этого есть 29, но не может его декодировать. См. Wikipedia [entry] (https://en.wikipedia.org/wiki/Network_Abstraction_Layer#Parameter_Sets) и этот [ответ] (http://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture -parameter-sets-for-h-264-stream) на SO – aergistal

+0

Еще раз спасибо! Ты такой хороший человек! – ideawu