FFMpeg Live Conversion?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • zerm schrieb:

    MPEG etc. sind streaming-formate, also klappt es eventuell schon, wenn Du das Output-File schon beim Schreiben abspielst?

    Das Problem ist, dass die Datei erst erzeugt wird, wenn die Konvertierung abgeschlossen ist. Gibts da ne Funktion, damit in die Datei laufend reingeschrieben wird?

    P.S.: Ich finde die Dokumentation von FFMpeg eine Zumutung...nirgends wird genau beschrieben was die einzelnen Parameter jetzt eigentlich machen...
    -Carpe Diem-
  • zerm schrieb:

    MPEG etc. sind streaming-formate, also klappt es eventuell schon, wenn Du das Output-File schon beim Schreiben abspielst?

    Ansonsten nix kommandozeile sondern libavformat und freunde :)


    Das stimmt so aber nicht. Es gibt sowohl Streaming als auch Container Formate. Leider.... (Damit ärger ich mich nämlich schon lange rum)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Das stimmt so aber nicht. Es gibt sowohl Streaming als auch Container Formate. Leider.... (Damit ärger ich mich nämlich schon lange rum)

    Ich bin neugierig, kannst Du ein paar Details nennen?
    Ich hab bisher nur libavcode/libavformat benutzt, um Videos zu decodieren und die waren natürlich alle korrekt. Mein Behauptung kommt eher daher, dass ich noch nie Probleme hatte, fehlerhafte oder unvollständige Videos etwa mit dem VLC abzuspielen (der ja ffmpeg nutzt).
    C++
  • Ich konvertiere mit diesem NSArray ein Video. Leider wird kein Temp-File erstellt, das ich während der Konvertierung abspielen kann.

    Quellcode

    1. NSMutableArray *args = [NSMutableArray arrayWithCapacity:0];
    2. [args addObject:@"-i"];
    3. [args addObject:originalFile];
    4. [args addObject:@"-vcodec"];
    5. [args addObject:@"mpeg4"];
    6. [args addObject:@"-b"];
    7. [args addObject:@"1200kb"];
    8. [args addObject:@"-mbd"];
    9. [args addObject:@"2"];
    10. [args addObject:@"-cmp"];
    11. [args addObject:@"2"];
    12. [args addObject:@"-subcmp"];
    13. [args addObject:@"2"];
    14. [args addObject:@"-r"];
    15. [args addObject:@"20"];
    16. [args addObject:@"-acodec"];
    17. [args addObject:@"aac"];
    18. [args addObject:@"-ab"];
    19. [args addObject:@"160000"];
    20. [args addObject:@"-s"];
    21. [args addObject:@"960x640"];
    22. [args addObject:convertedFile];
    Alles anzeigen
    -Carpe Diem-
  • FFmpeg sollte, wenn Du als output filename "-" angibts, wahrscheinlich auf stdout ungepuffert ausgeben. Vielleicht greifst Du das ab, pufferst es Dir selbst ein wenig, und schreibst es selbst in eine Datei?

    Ansonsten sollte FFMpeg doch sofort ins outfile schreiben, evtl. in etwas grösseren Blöcken. Musst Du halt mal durch die Doku schauen, ob man das ändern kann/soll..
    C++
  • zerm schrieb:

    Dann hast Du ja nicht viel gekonnt. Ich dachte, dass Du per (Cocoa-)Pipe selber bufferst und schreibst.. Mh..

    Achso ja stimmt :)

    Quellcode

    1. NSString *path = [[NSBundle mainBundle]pathForResource:@"ffmpeg" ofType:@""];
    2. NSPipe *pipe = [NSPipe pipe];
    3. fileHandle = [pipe fileHandleForReading];
    4. [fileHandle readInBackgroundAndNotify];
    5. task = [[NSTask alloc] init];
    6. [task setLaunchPath:path];
    7. [task setStandardOutput:pipe];
    8. [task setStandardError:pipe];
    9. [task setArguments:convertArray];
    10. [task launch];
    Alles anzeigen
    -Carpe Diem-