Я почти сошел с ума по этому вопросу, я уверен, что упускаю что-то простое.
У меня есть два * .mkv файла, сгенерированных OBS. Более того, я только что скопировал один файл дважды, так что я уверен, что у меня одинаковый битрейт, fps, tbn, что угодно.
тогда я делаю:
ffmepg -i "concat:file1.mkv|file1_copy.mkv" -c copy test.mkv
Он запускается, и мой экран заполняется желтыми сообщениями:
ffmpeg -i "concat:file1.mkv|file1_copy.mkv" -c copy test.mkv
ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, matroska,webm, from 'concat:file1.mkv|file1_copy.mkv':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:00:09.15, start: 0.000000, bitrate: 2006 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
Metadata:
DURATION : 00:00:09.150000000
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
Metadata:
title : simple_aac_recording
DURATION : 00:00:09.102000000
Output #0, matroska, to 'test.mkv':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 60 fps, 60 tbr, 1k tbn, 1k tbc (default)
Metadata:
DURATION : 00:00:09.150000000
Stream #0:1: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 44100 Hz, stereo, fltp (default)
Metadata:
title : simple_aac_recording
DURATION : 00:00:09.102000000
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[matroska,webm @ 00000156ce7f14c0] File extends beyond end of segment.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 0; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 67; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 33; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:1; previous: 9102, current: 0; changing to 9102. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 17; changing to 9100. This may result in incorrect timestamps in the output file.
############## thousands of the above lines here #####################
frame= 1098 fps=0.0 q=-1.0 Lsize= 2241kB time=00:00:09.11 bitrate=2013.0kbits/s speed=24.9x
video:2068kB audio:159kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.607770%
При открытии только отметки времени go до конца первого сегмента, хотя видео продолжается после. Обычно это было бы хорошо, но я записываю обучающие видео, и было бы неплохо, чтобы пользователи могли пропустить их. Это происходит, даже если я перекодирую видео (которое мне не нужно, поскольку они идентичны) или перекодирую вывод.
Все, что я прочитал онлайн, говорит:
перекодировать * в .mkv, чтобы это исправить, поскольку .mkv имеет фиксированный tbn - это уже .mkv
проблема в разных битрейтах / tbs / fps / что бы то ни было - на данный момент это одно и то же видео дважды
использование -fflags +genpts
, -use_wallclock_as_timestamps 1
, vsync 0 -enc_time_base -1
- ни один из них не делает ничего настолько далеко как я могу сказать, до -i
или после -c copy
У меня кончились идеи. Что я делаю не так.