Linus писал(а):В том то и дело, выхлоп есть. Экспериментировал с тем же кодом: так же пусто и на mediaifo... а вот на evtest, ls, uname - в потоке уже есть данные.... что не так с нужными мне утилитами?
Проблему подтверждаю. Правда у меня не ffmpeg, а avconv, но там та же проблема присутствует.
Такая команда:
- Код: Выделить всё
avconv -i aaa.png
выхлоп в консоли даёт, а в мемо пусто.
На mediainfo у меня всё ок. Выдало в мемо всю информацию о файле как надо. Делал так:
- Код: Выделить всё
AProcess := TProcess.Create(nil);
AProcess.Executable := 'mediainfo';
AProcess.Parameters.Add('-f');
AProcess.Parameters.Add(fname);
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
memo1.Lines.LoadFromStream(AProcess.Output);
AProcess.Free;
Добавлено спустя 6 минут 24 секунды:Дошло. AProcess читает стандартный поток, а этот выхлоп, как я понял, в потоке ошибок, т.е., если ты выполнишь эту команду в терминале и сделаешь так:
- Код: Выделить всё
avconv -i aaa.png > t.txt
то файл t.txt будет пустой.
Только так или так можно получить инфу в файл:
avconv -i aaa.png 2> t.txt
avconv -i aaa.png &> t.txt
Вот так всё работает:
- Код: Выделить всё
AProcess := TProcess.Create(nil);
AProcess.Executable := 'avconv';
AProcess.Parameters.Add('-i');
AProcess.Parameters.Add(fname);
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
memo1.Lines.LoadFromStream(AProcess.Output);
memo2.Lines.LoadFromStream(AProcess.Stderr);
AProcess.Free;