LINUX.ORG.RU

Синхронизация сегментированных аудио и видео потоков mpegts в ffmpeg

 ,


0

1

Есть несколько разных видео в формате mpegts, разобранное на каналы и на сегменты виде набора файлов:

a01.ts, a02.ts, ..., a99.ts
v01.ts, v02.ts, ..., v98.ts

Задача: собрать в один файл mp4 или mkv.

Сложности: аудио сегментов чуть больше (99 vs 98) и они меньше по длительности, но суммарная длительность совпадает; 2-3 файла битые, пустые или отсутствуют. Я готов пережить кратковременное молчание или стоп кадр в таком случае.

Неправильное решение 1. Склеить отдельно аудио, отдельно видео, потом объединить

ffmpeg -f concat -safe 0 -i a_list.txt -c copy a.ts
ffmpeg -f concat -safe 0 -i v_list.txt -c copy v.ts
ffmpeg -i a.ts -i v.ts -c copy av.mp4

Склеенные аудио и видео потоки имеют разную длительность из-за пропущенных файлов, в итоговом видео с какого-то момента появляется существенный рассинхрон из-за пустого файла

Неправильное решение 2. Объединить попарно аудио, затем все склеить вместе

ffmpeg -i a01.ts -i v01.ts -c copy av01.ts
...
ffmpeg -i a98.ts -i v98.ts -c copy av98.ts
ffmpeg -f concat -safe 0 -i av_list.txt -c copy av.mp4

Тут рассинхрон медленно нарастает с самого начала, так как сегменты разной длительности

Вопрос: Формат mpegts содержит все данные для правильной синхронизации PCR+PTS, они корректные в исходных файлах, проверено. Но я не нашел способа как заставить tsduck или ffmpeg произвести требуемый результат, т.е. как синхронизовать потоки аудио и видео на основе PCR, а не на просто на битрейте. Посоветуйте, пож.