Как справиться с ошибкой FFmpeg, связанной с неизвестными метками времени?

Вопрос или проблема

Я использую FFmpeg concat для объединения нескольких файлов ts. Я использую следующую команду

ffmpeg -y -f concat -i filelist.txt -c copy output.mkv

Все пути к файлам ts указаны в filelist.txt, чаще всего это работает хорошо, но при обработке некоторых файлов ts FFmpeg выдает следующие ошибки

[matroska @ 044bf9c0] В метке отсутствуют временные метки для потока 0. Это устарело и в будущем перестанет работать. Исправьте свой код, чтобы правильно устанавливать временные метки
[matroska @ 044bf9c0] Невозможно записать пакет с неизвестной временной меткой
av_interleaved_write_frame(): Неверный аргумент

Я полагаю, что ошибка вызвана отсутствием временных меток в этих файлах ts? Но поскольку сообщение об ошибке говорит “устарело и в будущем перестанет работать в будущем.”

Итак, мой вопрос в настоящее время: есть ли способ или некоторые флаги команд FFmpeg, чтобы подавить эту ошибку и просто объединить эти файлы ts без повторного кодирования?

Добавьте -fflags +genpts к команде FFmpeg. Например:

ffmpeg -fflags +genpts -i foo.avi -c:v copy -c:a copy foo.mp4

Ответ или решение

Как справиться с ошибкой "FFmpeg: незнакомые временные метки"?

При работе с FFmpeg для объединения нескольких TS файлов с помощью команды concat, может возникнуть ошибка, связанная с временными метками. Это может выглядеть следующим образом:

[matroska @ 044bf9c0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[matroska @ 044bf9c0] Can't write packet with unknown timestamp
av_interleaved_write_frame(): Invalid argument

Эта ошибка указывает на то, что некоторые пакеты в TS файлах не имеют заданы временные метки. Хотя ошибка говорит о том, что это "устаревшая" функция, и в будущем это может перестать работать, важно понимать, как сейчас можно решить проблему. Рассмотрим возможные решения подробнее.

Причины ошибки

Ошибки, связанные с временными метками, чаще всего возникают из-за:

  • Неустановленных временных меток в исходных TS файлах.
  • Неправильного формата или коррумпированных данных в файлах.
  • Использования файлов, созданных с помощью другого видео-кодировщика, который может не указывать временные метки корректно.

Решение проблемы

Для решения проблемы, не прибегая к повторной кодировке видео, можно использовать флаг -fflags +genpts. Этот флаг заставляет FFmpeg генерировать временные метки для потоков, которые их не имеют. Пример команды выглядит следующим образом:

ffmpeg -y -fflags +genpts -f concat -i filelist.txt -c copy output.mkv

Здесь мы добавили -fflags +genpts в ваш исходный код. Это действие позволит игнорировать ошибки, связанные с отсутствием временных меток, и продолжить процесс объединения файлов.

Дополнительные рекомендации

  1. Проверка исходных файлов: Убедитесь, что все TS файлы корректны и не повреждены. Для этого можно использовать команду ffmpeg -i yourfile.ts, чтобы увидеть отчет об ошибках.

  2. Создание временных меток при помощи -itsoffset: Если проблема заключается в определенном файле, вы можете рассмотреть вариант использования опции -itsoffset, чтобы скорректировать временные метки при объединении.

  3. Заблаговременная обработка файлов: Если вы прогнозируете, что некоторые файлы могут не содержать временные метки, вы можете сначала использовать FFmpeg для их обработки с помощью -fflags +genpts, а затем объединить уже исправленные файлы.

Заключение

Несмотря на то, что ошибка связана с отсутствием временных меток, с помощью добавления флага -fflags +genpts вы можете без особых проблем объединить ваши TS файлы. Важно помнить, что это решение может временно обойти проблему, но не гарантирует ее устранение в будущих версиях FFmpeg. Чтобы избежать подобных ошибок в будущем, рекомендую регулярно проверять и обрабатывать медиафайлы.

Использование вышеуказанных методов не только упростит вашу работу с видеофайлами, но и повысит качество конечных результатов.

Оцените материал
Добавить комментарий

Капча загружается...