Я хочу объединить два файла, имеющих следующие выходные данные от ffmpeg:
файл1:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Duration: 00:00:02.01, start: 0.000000, bitrate: 172 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 158 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
Metadata:
handler_name : SoundHandler
файл2:
Input #0, matroska,webm, from 'file2.mkv':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:01:13.10, start: 0.000000, bitrate: 418 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 1k tbn, 60 tbc (default)
Metadata:
DURATION : 00:01:13.100000000
Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Metadata:
title : simple_aac_recording
DURATION : 00:01:13.002000000
Чтобы объединить их, я использую следующую команду:
ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4
Конкатенация выполнена, но процесс выводит много раз:
Non-monotonous DTS in output stream 0:1; previous: 99677, current: 76011; changing to 99678. This may result in incorrect timestamps in the output file.
При просмотре выходного файла видеовыход из первого файла в порядке, но рендеринг второй части (file2) значительно ускорен. Что касается звука, то во время видео, выходящего из file1, есть только небольшая часть file2.
Вывод ffmpeg из файла конкатенации:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:05.94, start: 0.000000, bitrate: 5210 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2787 kb/s, 377.45 fps, 50 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 6750 kb/s (default)
Metadata:
handler_name : SoundHandler
file1 не имеет аудио, поэтому мне не нужен его аудиовыход. Я могу закодировать file1 по-другому, но я бы предпочел оставить file2 таким, какой он есть.
решение1
Я не уверен, что у меня есть решение, но поскольку больше никто не ответил (мне следовало бы прокомментировать, а не ответить, но мой рейтинг недостаточно высок для этого)...
Я однажды столкнулся с похожей проблемой, и я смог решить ее, используя формат MKV вместо формата MP4 для входных файлов. Поэтому попробуйте преобразовать file1.mp4 в file1.mkv с помощью
ffmpeg -i file1.mp4 -c copy file1.mkv
, а затем объединить два файла MKV.
(Кстати, название неверное: проблема не в «разных битрейтах», а в «разных частотах кадров»)