Я использую следующую библиотеку для преобразования mkv в mp4: https://github.com/SterlingOnLoop/FFmpegWrapper.FFmpeg iOS -> выходной файл недействителен
- (void)convertUsingFFmpegWrapper {
NSString *mp4Extension = @"mp4";
NSString *mkvExtension = @"mkv";
NSString *videoName = @"file1";
// NSString *videoName = @"file2";
NSString *mkvVideoFilePath = [[NSBundle mainBundle] pathForResource:videoName ofType:mkvExtension];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *mp4VideoFilePath = [NSString stringWithFormat:@"%@/%@.%@", documentsDirectory, videoName, mp4Extension];
FFmpegWrapper *ffmpegWrapper = [[FFmpegWrapper alloc] init];
NSDictionary *options = @{kFFmpegInputFormatKey: mkvExtension, kFFmpegOutputFormatKey: mp4Extension};
[ffmpegWrapper convertInputPath:mkvVideoFilePath outputPath:mp4VideoFilePath options:options progressBlock:nil completionBlock:^(BOOL success, NSError *error) {
if (success && !error) {
// delete mp4 file
} else if (error) {
NSLog(@"Error during .MKV -> .MP4 conversion occured: %@", error.localizedDescription);
} else {
NSLog(@"Unknown error during .MKV -> .MP4 conversion occured.");
}
}];
}
Ниже приведены значения из LLDB о автоматически обнаруженных типов кодеков:
(lldb) po inputStream.codecName
aac
(lldb) po outputStream.codecName
aac
я должен упомянуть, что изначально файл генерируется на Linux со следующими кодеками: vaapiencode_h264
для видео и faac
для звук.
Проблема в том, что файл просто не работает. Я получаю огромное количество журналов в консоли, где наиболее важным является:
[aac @ 0x7f7f65019200] Format aac detected only with low score of 1, misdetection possible!
Внутри библиотеки, используется следующая функция:
int streamInfoValue = avformat_find_stream_info(inputFormatContext, NULL);
И именно эта линия делает весь беспорядок с бревнами , Очевидно, без этой строки я получаю сообщение об ошибке с недопустимым аргументом.
Когда эта строка включена, генерируется файл .mp4. Он длится> 5 минут, а входной файл - 11 секунд. Он не может быть воспроизведен с использованием VLC на моем mac (кажется, что он был сломан). Я получаю следующие ошибки (я вставив несколько из них, полный трек можно найти here, это слишком долго, чтобы процитировать его здесь):
[aac @ 0x7ff07c00b000] More than one AAC RDB per ADTS frame is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[aac @ 0x7ff07c00b000] channel element 0.0 is not allocated
[aac @ 0x7ff07c00b000] Sample rate index in program config element does not match the sample rate index configured by the container.
[aac @ 0x7ff07c00b000] Inconsistent channel configuration.
[aac @ 0x7ff07c00b000] get_buffer() failed
[aac @ 0x7ff07c00b000] channel element 3.10 is not allocated
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] invalid band type
[aac @ 0x7ff07c00b000] Number of scalefactor bands in group (50) exceeds limit (41).
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] Number of bands (7) exceeds limit (4).
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] Dependent coupling is not supported together with LTP
Любая идея, как просто конвертировать MKV в MP4? Я не знаю, почему возникают ошибки. Я бы сказал, что файл не aac, но linux использует эту кодировку, поэтому он должен быть действительным.
Все ваши ошибки исходят из одной вещи, так называемого аудио AAC. Можно ли установить временную ссылку на файл MKV для анализа? –
@ VC.One Конечно, спасибо! :) Вот ссылка на маленький (4MB) файл mkv: http://s000.tinyupload.com/?file_id = 05753933961175453657 – Vive
@Vive Я просто хотел узнать, как вы интегрировали эту библиотеку, так как мне также нужно ее интегрировать. Я не смог интегрировать эту библиотеку. Не могли бы вы мне помочь? Заранее спасибо –