Archief - [Java] Opvangen ouput commandline

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Curahee Q

Legacy Member
Beste programmeurs

Ik ben bezig met een programma waarmee ik videos kan uploaden en die deze on the fly converteert met ffmpeg naar .flv bestanden. Deze worden dan online afgespeeld met een flashplayer.

Ik zet mijn files om via
Code:
Process child = Runtime.getRuntime().exec(command);
Ik heb voorbeelden gevonden waarmee ik dan de output van de command kan opvangen maar deze werken bij mij niet.

Deze 2 manieren hebk gevonden:
Code:
InputStream in = child.getInputStream();
	        int c;
	        
	        while ((c = in.read()) != -1) {
	           process((char)c);
	        }
	        in.close();
"c" is blijkbaar gewoon altijd -1

En dan de andere manier:
Code:
BufferedReader input =
        new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      while ((line = input.readLine()) != null) {
        System.out.println(line);
      }
      input.close();
Maar ook dit doet het niet. Hopelijk heeft iemand hier ervaring mee.

Alvast bedankt

Cycloon

Legacy Member
Die 2de manier zou normaal moeten werken (die p.getInputStream moet uiteraard wel child.getInputStream worden).

Kijk eens wat child.waitFor() geeft als output na de uitvoering?

Curahee Q

Legacy Member
Ja ik had dat 2de voorbeeld gewoon rechtstreeks van de site gekopieerd maar had het wel getest.

Blijkbaar gaat hij niet verder na de regel van:
Process child = Runtime.getRuntime().exec(command);

want hierna zet ik gewoon
System.out.println("test");
en deze word niet ge-output. Ik heb al met verschillende commando's geprobeerd zoals dir, cd, etc.

Cycloon

Legacy Member
Mja je kan daar niet zomaar commando's mee uitvoeren. Je kan daar enkel programma's mee uitvoeren. Als je bv dir wil gebruiken moet je exec("cmd dir") gebruiken oid.

Curahee Q

Legacy Member
Dan doet hij al iets meer maar toch nog steeds niet wat ik verwacht. De code tot nu toe is:
Code:
try {
		    String command = "cmd dir";
		    
		    Process child = Runtime.getRuntime().exec(command);
		    
		    System.out.println("test");
		    
		    BufferedReader input = new BufferedReader(new InputStreamReader(child.getInputStream()));
		    String line="";
		    
		    while ((line = input.readLine()) != null) {
		    	System.out.println(line);
		    	line += line;
		    }
		    
		    System.out.println("test");
		    
		    input.close();
		}

Output:
Code:
test
Microsoft Windows [versie 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Alle rechten voorbehouden.

En bij ffmpeg net hetzelfde. Hij komt ook niet meer aan de 2de test onder de while-loop. Heel vreemd eigenlijk.

Cycloon

Legacy Member
De reden dat je niet aan de 2de test komt is omdat het cmd venster eigenlijk nooit "afloopt". Probeer eens "cmd /c dir" als command.

Curahee Q

Legacy Member
Voor het probleem met dir werkt het. Maar wanneer ik nu ffmpeg run doet hij niks. Moet dit dan anders of kan het gewoon niet?

Code:
try {
		    String command = "cmd /c ffmpeg -i " + file + " -ar 22050 -s 480x360 -sameq video.flv";
		    
		    System.out.println(command);
		    Process child = Runtime.getRuntime().exec(command);
		    
		    
		    BufferedReader input = new BufferedReader(new InputStreamReader(child.getInputStream()));
		    String line=input.readLine();
		    
		    while (line != null) {
		    	System.out.println(line);
		    	
		    	line = input.readLine();
		    }
		    
		    System.out.println("test");
		    
		    input.close();
		}

Cycloon

Legacy Member
Mja ffmpeg is een gewone exe ergens verborgen in 1 of andere windows map ofzo. Zoek gewoon het directe pad naar die exe voer die direct uit. Het zal iets zijn in de vorm van:

String command = "C:/padnaam/ffmpeg.exe -i " + file + " -ar 22050 -s 480x360 -sameq video.flv";

Curahee Q

Legacy Member
Met niks doen bedoelde ik eigenlijk dat hij geen output gaf... Hij converteert het wel maar ik zie niks op mijn scherm. Mijn excuses.

Curahee Q

Legacy Member
Toch bedankt al voor je reacties, misschien eens posten op het forum van java zelf aangezien hier blijkbaar niemand anders op reageert.

aikrez

Legacy Member
als je converteert via cmd, wat doet krijg je als output in het cmd venster na de conversie?

Curahee Q

Legacy Member
Dit is alles van mijn console:
Code:
Microsoft Windows [versie 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Alle rechten voorbehouden.

C:\Users\Sam>ffmpeg -i C:\Users\Sam\Desktop\rubik.wmv -ar 22050 -s 480x360 -same
q video.flv
FFmpeg version SVN-r19159-Sherpya, Copyright (c) 2000-2009 Fabrice Bellard, et a
l.
  libavutil     50. 3. 0 / 50. 3. 0
  libavcodec    52.30. 2 / 52.30. 2
  libavformat   52.34. 0 / 52.34. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    0. 5. 0 /  0. 5. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jun 12 2009 04:25:02, gcc: 4.5.0 20090517 (experimental)
[wmv3 @ 0x320d360]Extra data: 8 bits left, value: 0

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000
/1) -> 12.50 (25/2)
Input #0, asf, from 'C:\Users\Sam\Desktop\rubik.wmv':
  Duration: 00:01:33.19, start: 3.065000, bitrate: 763 kb/s
    Stream #0.0(dut): Video: wmv3, yuv420p, 640x480, 1000 kb/s, 12.50 tbr, 1k tb
n, 1k tbc
    Stream #0.1(dut): Audio: wmav2, 44100 Hz, stereo, s16, 48 kb/s
[wmv3 @ 0x320d360]Extra data: 8 bits left, value: 0
Output #0, flv, to 'video.flv':
    Stream #0.0(dut): Video: flv, yuv420p, 480x360, q=2-31, 200 kb/s, 1k tbn, 12
.50 tbc
    Stream #0.1(dut): Audio: libmp3lame, 22050 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 1181 fps= 49 q=0.0 Lsize=   18081kB time=94.48 bitrate=1567.8kbits/s
video:17266kB audio:740kB global headers:0kB muxing overhead 0.418830%

C:\Users\Sam>

aikrez

Legacy Member
Code:
 String command = "cmd /c ffmpeg -i c:\\ball_this.avi -ar 22050 -sameq test.flv";
                    //ffmpeg -i c:\ball_this.avi -ar 22050 -sameq c:\test.flv

		    Process child = Runtime.getRuntime().exec(command);
                    Methods.errorStream(child);
		    System.out.println("begin");

		    BufferedReader input = new BufferedReader(new InputStreamReader(child.getInputStream()));
		    String line=null;

                     while ( (line = input.readLine()) != null)
                    {
                         System.out.println(line);

		    }              

		    System.out.println("einde");

		    input.close();

hiermee zie ik de output maar als test.flv al bestaat zie ik geen output

(fyi ball_this is van smokin aces ::)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan