Faire passer un QTMovie sur une autre application cocoa

Bonjour

 

J'ai une appli sous 64 bits et j'ai besoin de faire une conversion de format video. Pour cela, je souhaite utiliser ConvertMovieToFile mais je me suis rendu compte que cette méthode fonctionne sous 32 bits (comme quickTime du reste) et mon appli est, comme je vous l'ai dit, sous 64 bits. J'ai donc créé une appli spécifique en 32 bit pour utiliser ConvertMovieToFile. J'ai mis ensuite cette appli dans les ressources de mon appli principale (celle en 64 bits), donc dans son bundle. Cependant, je ne voudrais pas passer un url pour ouvrir le fichier mais un QTmovie. 

En fait, dans mon appli principale, j'ai importé une video et j'ai un QTMovie qui utilise cette video. ensuite, j'élague ce QTMovie pour obtenir une séquence précise. C'est cette séquence que je voudrais exporter sous un format de mon choix. Cependant, sous 64 bits, je rencontre pas mal de problèmes. Par exemple, les formats DV sont sous format NTSC par défaut (et je n'ai pas trouvé le moyen de passer en PAL), impossible d'exporter des mpeg2 ... 

C'est la raison pour laquelle je souhaite utiliser  ConvertMovieToFile  qui me donne toutes ces possibilités à  l'instar de quickTime.

 

J'ai essayé la méthode suivante mais en vain. Je suis bien conscient que [task setArguments:array1]; ne peut pas marcher  puisque la doc signale qu'il s'agit d'un array de NSString, mais je ne sais pas quoi faire d'autre !

 



NSString *s = [[NSBundle mainBundle] pathForResource:@ConvertVideo ofType:@app];
NSArray *array1 = [[NSArray alloc]initWithObjects:movie, nil];

NSTask *task = [NSTask new];
[task setLaunchPath:s];
[task setArguments:array1];
[task launch];




Quelle piste est à  suivre ?

 

Merci d'avance

Réponses


  • Hello,


     


    Je pense que ce n'est pas possible.


     


    Par contre, tu peux créer un mov par référence, comme avec QTPro.


  • Je ne comprends pas pourquoi cela ne serait pas possible, puisqu'on envoie un array, donc la possibilité d'envoyer plusieurs  choses  ?


     


    Sinon, j'ai regardé la doc et je ne vois pas QTPro. C'est quoi ?


     


    Merci d'avance



  •  


    Je ne comprends pas pourquoi cela ne serait pas possible,



     


     


    Une piste: Distributed Object 


     


    Plus sérieusement, tu va créer un movie par référence (apparemment il suffit de ne pas spécifier QTMovieFlatten dans les options de sauvegarde)


    Ce fichier ne contiendra pas de données, seulement des références/liens vers le movie original.


    Tu peux créer ce fichier dans un dossier temporaire (NSTemporaryDirectory) ou dans le dossier support de ton application.


    Dans les arguments de NSTask, tu spécifiera le chemin de ce fichier.


    Dans ton prog de conversion, tu charges ce fichier, effectues la conversion et crées un nouveau fichier.


    Et voilà  !

  • Merci mpergand pour ta patience


     


    Je comprends ta démarche mais je ne vois pas où intervient QTMovieFlatten. Voici ce que j'ai fais avant pour sauvegarder une video : 



    NSInteger selectedItem;
    NSMutableDictionary *settings = nil;
    static NSArray *exportTypes = nil;

    // init
    if (exportTypes == nil) {
    exportTypes = [NSArray arrayWithObjects:
    [NSNumber numberWithLong:'H264'], [NSNumber numberWithLong:'3gpp'], [NSNumber numberWithLong:'dvc!'],
    [NSNumber numberWithLong:'FLC '], [NSNumber numberWithLong:'mpg4'], [NSNumber numberWithLong:'MooV'],
    [NSNumber numberWithLong:'embd'], [NSNumber numberWithLong:'M4VP'], [NSNumber numberWithLong:'M4VH'], nil];
    }
    // export

    // init
    selectedItem = [mExportTypePopUpButton indexOfSelectedItem];
    settings = [NSMutableDictionary dictionaryWithCapacity:7];
    [settings setObject:[NSNumber numberWithBool:YES] forKey:QTMovieExport];


    if ((selectedItem >= 0) && (selectedItem < [exportTypes count]))
    [settings setObject:[exportTypes objectAtIndex:selectedItem] forKey:QTMovieExportType];

    // export
    NSFileManager *fileManager1 = [[NSFileManager alloc]init];

    BOOL isDir;
    BOOL ok = [fileManager1 fileExistsAtPath:[[sheet URL]path]
    isDirectory:&isDir];
    if (ok == YES) {
    ok = [fileManager1 removeItemAtPath:[[sheet URL]path]
    error:NULL];
    }

    //changer taille du track : x 2 (pas valable pour dv)
    NSArray* videoTracks=[movie tracksOfMediaType:QTMediaTypeVideo];
    QTTrack* track=[videoTracks objectAtIndex:0];

    NSSize size=[[track attributeForKey:QTTrackDimensionsAttribute] sizeValue];
    NSValue* sizeValue=[NSValue valueWithSize:NSMakeSize(720,540)];
    [track setAttribute:sizeValue forKey:QTTrackDimensionsAttribute];

    //recherche du codec du track : donne le codec mais pas le format (H.264 et pas m4v par exemple - mais ok pour confirmer DV
    id format = [track attributeForKey:QTTrackFormatSummaryAttribute];
    NSArray *listInfo = [format componentsSeparatedByString:@,];
    NSString *formatInfo = [listInfo objectAtIndex:0];


    // et enregistrer
    NSString *pathNouveau = [[sheet URL]path];
    NSArray *arrayPathNouveau = [pathNouveau componentsSeparatedByString:@.];
    NSString *suffixeNouveau = [arrayPathNouveau objectAtIndex:[arrayPathNouveau count]-1]; //suffixe du pathNouveau

    NSError *error;
    if (![movie writeToFile:pathNouveau withAttributes:settings error:&error])
    {
    NSRunAlertPanel(@Error exporting movie., @ no '/' characters, nil, nil, nil);
    }else {
    NSRunAlertPanel(@Enregistrement de la video,@Opération OK,@OK,nil,nil);
    NSURL *monURL = [NSURL fileURLWithPath:pathNouveau];
    nomURLVideo = [monURL absoluteString];
    [self importVideoBis];
    }


    Merci d'avance



  • J'y connais pas grand chose en QT ...


     



     


    Saving the Changes


    Although the QTMovie object contains an updateMovieFile method, this only work on specific file types so it is safer to use the writeToFile:withAttributes:error: method:


    NSString * saveFilePath = [@~/Desktop/text_new.mov stringByExpandingTildeInPath];


    NSDictionary * saveAttributes = [NSDictionary dictionaryWithObjectsAndKeys:


                                     [NSNumber numberWithBool:YES], QTMovieFlatten,


                                     nil];


    if (![movie writeToFile:saveFilePath withAttributes:saveAttributes error:&error]) {


     


    Note the use of the QTMovieFlatten attribute. If this is not used QuickTime will try to create what is called a reference movie which means that the newly exported movie will not actually contain any of media that is in the original file but rather it will create a reference to it. This results in a very small file but is useless unless you have the original file to hand too.



     


    http://www.ottersoftwareblog.com/blog/2009/7/19/rename-quicktime-tracks.html


  • Ok merci 


     


    Je vais suivre cette voie

Connectez-vous ou Inscrivez-vous pour répondre.