Я занимаюсь разработкой приложения, которому необходимо клонировать видеофайл MP4 со всеми потоками с использованием FFmpeg C ++ API, и успешно оно работает на основе Пример FFmpeg remuxing.
Это прекрасно работает для видео и аудио потоков, но когда видео включает в себя поток данных (на самом деле это временной код QuickTime согласно MediaInfo), я получаю эту ошибку.
Output #0, mp4, to 'C:\Users\user\Desktop\shortOut.mp4':
Stream #0:0: Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv,progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 1208 kb/s
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 32s
Stream #0:2: Data: none (tmcd / 0x64636D74), 0 kb/s
[mp4 @ 0000000071edf600] Could not find tag for codec none in stream #2, codec not currently supported in container
Я обнаружил, что это происходит в звонке avformat_write_header()
,
Имеет смысл, что если FFmpeg не знает кодек, он не может записать в заголовок об этом, но я обнаружил, что с помощью командной строки ffmpeg я могу заставить его работать идеально, используя команду copy для потока, что-то вроде :
ffmpeg -i input.mp4 -c:v copy -c:a copy -c:a copy output.mp4
Я анализировал реализацию ffmpeg.c, чтобы понять, как они выполняют потоковое копирование, но было очень больно следить за огромным конвейером.
Что было бы правильным способом для смешивания потока данных этого типа с FFmpeg C ++ API? Любой совет или указатели?
Задача ещё не решена.
Других решений пока нет …