2017-01-21 11 views
0

я попытался объединить 2 MKV видео с FFmpeg, используя следующие команды:Проблема при конкатенации mkvs с помощью ffmpeg: Как правильно установить временные метки?

ffmpeg -i file-01.mkv -f mpegts -c copy -bsf:v h264_mp4toannexb file-01.mpeg.ts 
ffmpeg -i file-02.mkv -f mpegts -c copy -bsf:v h264_mp4toannexb file-02.mpeg.ts 
ffmpeg -isync -i "concat:file-01.mpeg.ts|file-02.mpeg.ts" -f matroska 
-c copy output.mkv 

Однако, я получаю следующее сообщение об ошибке:

[matroska @ 0x7fc72a000600] 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 @ 0x7fc72a000600] Can't write packet with unknown timestamp av_interleaved_write_frame(): Invalid argument

Как я могу идти о создании метки времени?

+0

'-isync' был отключен несколько лет назад. Удалите его, если ваш ffmpeg не старый. Добавьте '-fflags + genpts' перед' -i' – Mulvya

+0

Спасибо, @Mulvya. Я пробовал это с помощью '-fflags + genpts', но получил ту же ошибку об отключенных временных меток. –

+0

Отличный результат? – Mulvya

ответ

0

Не обязательно решение, само по себе, но mkvmerge работал для меня в конце. Было намного проще:

mkvmerge -o "merged.mkv" "file1.mkv" +"file2.mkv" 
0

Хорошо, попробуйте выполнить следующие действия:

ffmpeg -i file-01.mkv -c copy -map v 01.mp4 
ffmpeg -i file-02.mkv -c copy -map v 02.mp4 
ffmpeg -i 01.mp4 -i file-01.mkv -map 0:v -map 1:a -c copy -bsf:v h264_mp4toannexb file-01.mpeg.ts 
ffmpeg -i 02.mp4 -i file-02.mkv -map 0:v -map 1:a -c copy -bsf:v h264_mp4toannexb file-02.mpeg.ts 
ffmpeg -i "concat:file-01.mpeg.ts|file-02.mpeg.ts" -f matroska 
-c copy output.mkv 

Некоторые потоки H.264 имеют пакеты без каких-либо значений СТВ. FFmpeg имеет беспорядочную поддержку для мультиплексирования этих потоков.

+0

Все еще не работает, @ Mulvya. То же самое происходит в результате неудачного преобразования: '[matroska @ 0x7f869c000000] Временные метки не установлены в пакете для потока 0. Это устарело и перестанет работать в будущем. Исправьте свой код, чтобы правильно установить отметки времени. [matroska @ 0x7f869c000000] Невозможно записать пакет с неизвестной меткой времени. av_interleaved_write_frame(): Неверный аргумент frame = 1143 fps = 0.0 q = -1.0 Lsize = 8381kB time = 00: 00: 45.60 bitrate = 1505.7kbits/s speed = 667x video: 7857kB audio: 528kB субтитры: 0kB другие потоки: 0kB глобальные заголовки: 0kB muxing служебные: неизвестно Не удалось преобразовать! ' –

+0

Загрузите файлы. – Mulvya

+0

Вместо этого я использовал mkvmerge. Не было проблем. Гораздо проще. –