Объедините аудио и видео / изображения для создания файла фильма - PullRequest
1 голос
/ 06 мая 2011

Я хочу объединить файл Audion CAF и видео / изображение UIImage для создания файла фильма (в формате .mov).

Скажите, что мой звук длится 30 секунд, и у меня есть UIImage; Я хочу создать файл .mov таким образом, чтобы UIImage отображалось все время воспроизведения звука.

Я нашел эту ссылку: Как добавить аудио в видеофайл на iphone SDK

Может кто-нибудь сказать мне, полезно ли это в моем случае, так как длина моего аудио и изображения / видео отличается?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 14 мая 2011

Да, вы должны использовать AVMutableComposition. Для создания видеодорожки из вашего UIImage используйте AVAssetWriter.

0 голосов
/ 22 августа 2012

используйте это, я нашел это где-то в сети, я не помню, ....

NSString  *fileNamePath = @"audio.caf";
    NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString  *documentsDirectory = [paths  objectAtIndex:0];
    NSString  *oldappSettingsPath = [documentsDirectory stringByAppendingPathComponent:fileNamePath];
    NSURL *audioUrl = [NSURL fileURLWithPath:oldappSettingsPath];   
    NSString  *fileNamePath1 = @"output.mp4";
    NSArray   *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString  *documentsDirectory1 = [paths1  objectAtIndex:0];
    NSString  *oldappSettingsPath1 = [documentsDirectory1 stringByAppendingPathComponent:fileNamePath1];
    NSLog(@"oldpath=%@",oldappSettingsPath);
    NSURL *videoUrl = [NSURL fileURLWithPath:oldappSettingsPath1];
    if (avPlayer.duration >0.00000)
    {
        NSLog(@"SOMEDATA     IS THERE ");
        AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil];
        AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoUrl options:nil];

        AVMutableComposition* mixComposition = [AVMutableComposition composition];

        NSLog(@"audio =%@",audioAsset);
        AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
        [compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];

        AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
        [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];


        AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetPassthrough];   

        NSString* videoName = @"export.mov";

        NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
        NSURL    *exportUrl = [NSURL fileURLWithPath:exportPath];

        if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) 
        {
            [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
        }

        _assetExport.outputFileType = @"com.apple.quicktime-movie";
        NSLog(@"file type %@",_assetExport.outputFileType);
        _assetExport.outputURL = exportUrl;
        _assetExport.shouldOptimizeForNetworkUse = YES;



        [_assetExport exportAsynchronouslyWithCompletionHandler:
         ^(void ) 
        {      

            NSString  *fileNamePath = @"sound_record.mov";
            NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
            NSString  *documentsDirectory = [paths  objectAtIndex:0];
            NSString  *oldappSettingsPath = [documentsDirectory stringByAppendingPathComponent:fileNamePath];


            //             if ([[NSFileManager defaultManager] fileExistsAtPath:oldappSettingsPath]) {
//                 
//                 NSFileManager *fileManager = [NSFileManager defaultManager];  
//                 [fileManager removeItemAtPath: oldappSettingsPath error:NULL];
//                 
//             }
             NSURL *documentDirectoryURL = [NSURL fileURLWithPath:oldappSettingsPath];
             [[NSFileManager defaultManager] copyItemAtURL:exportUrl toURL:documentDirectoryURL error:nil];
             [audioAsset release];
             [videoAsset release];
             [_assetExport release];
         }       
         ];

0 голосов
/ 06 мая 2011

Quicktime Pro может сделать это. Сделано это для моего собственного приложения. Вы создаете фильм из изображений. Quicktime предлагает прочитать последовательность изображений и создать из нее фильм. Он запрашивает FPS и во время импорта.

Затем звуковую дорожку можно просто объединить, вставить куда-либо или масштабировать до выбранного диапазона фильма.

...