[Lazarus] Problems using RunCommandIndir with Lazarus 2.0.0
Bo Berglund
bo.berglund at gmail.com
Fri Mar 1 18:33:00 CET 2019
I am trying to extract information from a video file (mp4) using
ffmpeg in a Lazarus 2.0.0 program.
The command I want to use is:
ffmpeg -i testvideo.mp4 -hide_banner
(with a file name selected in Lazarus of course)
I created this test function:
uses Process;
function TForm1.GetVideoInfo(videofile: string): string;
(* ffmpeg -i testvideo.mp4 -hide_banner *)
var
i: integer;
arguments: array of string;
returnstr: string;
executable: string;
begin
Result := '';
lbxResult.Clear;
SetLength(arguments,3);
executable := 'c:\Programs\ffmpeg\bin\ffmpeg.exe';
arguments[0] := '-i';
arguments[1] := videofile;
arguments[2] := '-hide_banner';
if RunCommandIndir(ExtractFileDir(videofile),executable,arguments,
returnstr) then
Result := returnstr
else
Result := 'Failed to run command';
end;
I call this from a button event:
procedure TForm1.btnSelectVideoClick(Sender: TObject);
begin
dlgOpen.InitialDir := ReadIniString('Files', 'VideoDir', '');
if not dlgOpen.Execute then exit;
FVideoDir := ExtractFileDir(dlgOpen.FileName);
FVideoFile := dlgOpen.FileName;
edInputFile.Text := FVideoFile;
WriteIniString('Files', 'VideoDir', FVideoDir);
WriteIniString('Files', 'VideoFile', FVideoFile);
lbxResult.Items.Text := GetVideoInfo(FVideoFile);
end;
PROBLEM:
----------
It always returns the error message "Failed to run command".
If I use the ffmpeg command used in the GetVideoInfo function directly
in a command window in the directory containing the video file it
works just fine (long lines are wrapped by the news reader):
D:\VIDEO\USA\test>ffmpeg -i testvideo.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'D:\VIDEO\USA\test\testvideo.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2018-11-17T02:08:51.000000Z
Duration: 00:42:54.54, start: 0.000000, bitrate: 377 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 /
0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 302 kb/s, 30 fps, 30
tbr, 15360 tbn
, 60 tbc (default)
Metadata:
creation_time : 2018-11-17T02:08:51.000000Z
handler_name : ISO Media file produced by Google Inc. Created
on: 11/16/2018.
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz,
mono, fltp, 71 kb/s (default)
Metadata:
creation_time : 2018-11-17T02:08:51.000000Z
handler_name : ISO Media file produced by Google Inc. Created
on: 11/16/2018.
At least one output file must be specified
I want to parse this text to extract the video playing time and some
other data but I get a false result from the call to RunCommandIndir()
and the string variable supposed to hold the returned data is empty.
What have I done wrong here?
--
Bo Berglund
Developer in Sweden
More information about the lazarus
mailing list