WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Videoqualität ist mies!

 

subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 16:44     Titel: Videoqualität ist mies!
  Antworten mit Zitat      
Hallo,

ich möchte ein hochaufgelöstes Video für eine Präsentation (Power Point) aus einer sich verändernden Matlab Figure machen.

Bisher benutze ich:
Code:
 
aviobj=avifile('vid.avi','compression','none');
aviobj=addframe(aviobj,fhandle);
 

... unter Windows 7.

Anm.:
1) Kompression mit Cinepak liefert mir das gleiche Ergebnis?
2) Wenn ich Quality benutze wird die Qualität noch schlechter

Jetzt habe ich wie gesagt ein Video dass aber halt von der Qualität wenn ich es größer mache nichts mehr taugt. Was kann ich tun? Ideen?

Mfg
subkaz


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2010, 18:34     Titel: Re: Videoqualität ist mies!
  Antworten mit Zitat      
Hallo subkaz,

Ein AVI mit 'Compression'='none' hat eine schlechte Qualität?! Das ist ja krass. Eigentlich sollten die unkomprimierten Videos riesig sein (hunderte Mega-Bytes), aber ein eins-zu-eins-Abbild des orginalen Inhalts der Figure.

AVIs sind für Animationen meiner Ansicht nach ungeeignet. Es gibt zwar tolle Kompressoren, aber wenn man das dann in einem PowerPoint-Vortrag auf einem fremden Rechner abspielen will, klappt in 50% der Fälle gar nichts.

Deshalb speicher ich alle Animationen für Präsentationen als animated GIF ab. Zuerst erzeuge ich einen Haufen von PNG-Files (GETFRAME, IMWRITE), und lasse dann ImageMagick (free download aus dem Netz) ein optimiertes animated GIF erzeugen:
Code:
!convert image*.png -layers optimize movie.gif

Mit Color-Reduction bekomme ich dann Filme, die statt 250MB nur noch 173kB haben und auf jedem Rechner darstellbar sind, auch Apples von 1998.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 18:43     Titel:
  Antworten mit Zitat      
Hi,

thx dass ist mal eine gute Idee.
Jetzt versuche ich mich gerade an getframe() nur leider fehlen meine laufend erneuerten Positionen (mit 'Marker', '+') die ich in die Figure eintrage im Video. Woran liegt das denn?

Ich übergebe getframe() ja das figure handle.

Kannst Du mir da auch weiterhelfen?

Wie sieht denn Deine Kombi mit imwrite aus?
Kannst Du mir da den kompletten Befehl für angeben den Du verwendest?

Mfg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2010, 19:08     Titel:
  Antworten mit Zitat      
Hallo subkaz,

Zitat:
Jetzt versuche ich mich gerade an getframe() nur leider fehlen meine laufend erneuerten Positionen (mit 'Marker', '+') die ich in die Figure eintrage im Video. Woran liegt das denn?

Ich habe keine Ahnung, woran das liegen könnte. DRAWNOW vor GETFRAME einfügen vielleicht?

Code:

for i = 1:nFrame
  ... plotten
  drawnow;
  Frame = getframe(FigHandle);
  imwrite(Frame.cdata, fullfile(Folder, sprintf('image%03d.png', i)));
end
 

Ich habe dann noch ein paar Kleinigkeiten eingebaut:
1. Anti-Aliasing mit einer beschleunigten Version von:
http://www.mathworks.com/matlabcentral/fileexchange/20979
2. Farb-Reduktion auf 256 Farben ohne Dithering mit RGB2IND, wobei die ColorMap aus dem ersten Frame benutzt wird (reduziert die File-Größe noch weiter).
3. Progressbar, da das Speichern dann doch recht lange dauern kann.
Leider ist das zu umfangreich, um es in die FEX zu setzen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 20:03     Titel:
  Antworten mit Zitat      
Hi Jan S,

jetzt habe ich ein animated.gif das powerpoint nicht darstellen kann.
Kann ich irgentwie überprüfen ob das animated gif nen Fehler hat?
Kann mann das irgentwie abspielen?
Kenn animated Gif gar nicht, ist mir völlig unklar wie daqs laufen soll?

Mfg
vllt. kannst Du nochmal helfen?
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 20:28     Titel:
  Antworten mit Zitat      
@ Jan S

du meinst doch (ohne Ausrufezeichen, oder?)
Code:
convert image*.png -layers optimize movie.gif


genau das mach ich und dennoch kann ich das movie.gif nicht importieren:
Code:
PowerPoint konnte keinen Film aus der ausgewählten Datei importieren


Ich raff das einfach nicht, bei mir klappt das einfach nicht!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2010, 23:43     Titel:
  Antworten mit Zitat      
Hallo subkaz,

Nein, das Ausrufe-Zeichen ist wichtig! Damit wird der Befehl ans Betriebssystem weitergegeben, das dann wiederum ImageMagick aufruft. Hast Du ImageMagick installiert?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 09:51     Titel:
  Antworten mit Zitat      
Hi,

ja ich habe es installiert.
Du führst das in der Eingabeaufforderung aus? (unter Windows 7)
Da kennt er bei mir nur "convert" bei "!convert" sagt er dass er den Befehl nicht kennt.

Mfg
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 12:56     Titel:
  Antworten mit Zitat      
Hallo Jan S,

sach mal ich glaube das liegt daran, dass ich mit surf() plotte.
Kann ich da dann auch animated gifs draus machen, oder geht das grundsätzlich nicht?
... mit plot bekomme ich in meiner Anwendung auch welche hin.

Wie ziehe ich mir also ein Video wenn ich mit surf() und plot3() arbeite?


Mfg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.12.2010, 16:17     Titel:
  Antworten mit Zitat      
Hallo subkaz,

Das Ausrufezeichen ist nötig, wenn man das Programm direkt aus Matlab startet. Ich führe lasse das halt gleich automatisch am Ende des Exports erledigen. Also entweder "!convert" in Matlab oder "convert" in der Kommando-Zeile von Windows.

Es ist vollkommen egal, ob man die Grafik mit PLOTs, SURFs oder irgendwelchen anderen Funktionen erstellt! Mit GETFRAME wird der Inhalt des Fensters in ein [Width x Height x 3] Array umgewandelt, das die Farbe jedes einzelnen Punktes enthält. Ob diese Punkt nun mit SURF oder PLOT erstellt wurden, ist nicht zu unterscheiden.

Du kennst animated GIFs z.B. von den lustigen Smilies, die links neben dieser Eingabe-Maske vor sich hin blinzeln, lachen und mit den Augen rollen. Jeder Browser kann sie anzeigen, eingeschlossen Netscape 1.1 für Mac und die WAP-Browser der Handies.

Wenn es nicht funktioniert, kannst Du Dir ja mal die einzelnen PNGs anschauen. Wenn die in Ordnung sind, hat Convert wohl Probleme. Gibt es eine Fehlermeldung?

Gruß, Jan[/i]
Private Nachricht senden Benutzer-Profile anzeigen
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 10:10     Titel:
  Antworten mit Zitat      
Hallo Jan,

ok ich hatte convert nicht aus matlab direkt gestartet und habe deshalb convert verwendet.

Das Problem ist, dass die png-Dateien immer das gleich Bild enthalten.
Somit wird auch das mit der animated gif nichts.

Ich habe jetzt halt einmal mit plot() ne Grafik erstellt und da funktioniert das Erzeugen einer animated gif einwandfrei.
... und das andere Mal habe ich ne Grafik mit surf() und da klappt das nicht da getframe() immer das gleiche Bild nimmt und nie die aktuelle Version.

Woran kan das liegen, wenn nicht an sruf()?

Mfg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2010, 01:51     Titel:
  Antworten mit Zitat      
Hallo subkaz,
Zitat:
Woran kan das liegen, wenn nicht an surf()?

Bitte entschuldige die banale Antwort: An etwas anderem.

Das hat mit SURF nichts zu tun, sondern irgendein anderes Detail muss sich auch noch unterscheiden. Poste doch einfach mal den entsprechenden Code-Abschnitt mit allen relevanten Zeilen. Vielleicht zeichnest Du in einem Fenster und benutzt GETFRAME für ein anderes? Oder das DRAWNOW fehlt?

Ich habe SURF, PATCH, LINE und UICONTROLs in meinen Animated-GIFs, mit OpenGL, Painters und ZBuffer Renderer - und es funktioniert, siehe z.B.:


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 19:44     Titel:
  Antworten mit Zitat      
@Jan S

hmm, ich starte noch einen letzten Versuch.

Ist die Scrollbar im Powerpoint dann auch da?
Wenn ja wie geht das?

Grüße
 
subkaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 20:13     Titel:
  Antworten mit Zitat      
Code:

clear all;
close all;
clc;

folder = 'C:\GIF\';

x = [-5.12:0.2:5.12];
y = [-5.12:0.2:5.12];

for i = 1:length(x)
  for j = 1:length(y)  
    z(i,j) = x(i)^2 + y(j)^2;
  end
end
hold on;
fig_handle = figure(1);
surf(z);
colormap copper;
hdle = plot3(1,1,x(1)^2+y(1)^2);
set(hdle, 'Color', 'green', 'LineWidth', 2, 'Marker', 'o', 'Markersize', 20);
hold off;
drawnow;

fr = getframe(gca);
imwrite(fr.cdata, fullfile(folder, sprintf('image%03d.png', 0)));

for i = 1
  for j = 2:length(y)
    hold on;
    figure(1);
    delete(hdle);
    hdle = plot3(i,j,x(i)^2+y(j)^2);
    set(hdle, 'Color', 'green', 'LineWidth', 2, 'Marker', 'o', 'Markersize', 20);
    hold off;
    drawnow;
    fr = getframe(gca);
    imwrite(fr.cdata, fullfile(folder, sprintf('image%03d.png', j)));
  end
end
 


Das mal etwa mein Code!

Also irgendwas stimmt da nicht mit dem figure-Zugriff
-> Kannst Du mir da weiterhelfen?
... und mir da so eine Scrollbar einbauen für Powerpoint (so dass ich das ggf. im Vortrag anhalten kann?)

Grüße
... und mal vielen Dank für die Hilfe!!!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.12.2010, 05:18     Titel:
  Antworten mit Zitat      
Hallo subkaz,

Zitat:
Also irgendwas stimmt da nicht mit dem figure-Zugriff
-> Kannst Du mir da weiterhelfen?

Kannst Du beschreiben, was nicht stimmt?

Zitat:
... und mir da so eine Scrollbar einbauen für Powerpoint (so dass ich das ggf. im Vortrag anhalten kann?

Die Scrollbar ist Teil des Films. Stoppen kannst Du den Film direkt in PowerPoint. In modernen Versionen (also nach Office97 ...) sollte man eigentlich auch irgendwie im Film navigieren können. Ich weiß aber nicht wie, da ich versuche um das Microsoft-Office herum zu kommen, wann immer es möglich ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.