LL
Вот это работает (чтение из файла, вывод в stdout):
Port.open({:spawn, ~s[ffmpeg -i 1.jpg -vf "scale='min(400,iw)':min'(200,ih)':force_original_aspect_ratio=decrease" -loglevel quiet -f image2 pipe:1]}, [:use_stdio, :stream, :exit_status, :binary])
flush()
Это тоже работает (вывод в файл, чтение из stdin, но приходится слать :close, без этого не работает, висит-ждёт):
pid = Port.open({:spawn, ~s[ffmpeg -i pipe:0 -vf "scale='min(400,iw)':min'(200,ih)':force_original_aspect_ratio=decrease" -loglevel quiet -f image2 4.jpg]}, [:use_stdio, :stream, :exit_status, :binary])
{:ok, data} = File.read("1.jpg")
Port.command(pid, data, [])
send(pid, {self(), :close})
flush()
А вот попытка использовать stdin и stdout не работает (шлю :close, как в предыдущем примере, при этом идёт flush по stdin и stdout, но к этому моменту на stdout пусто, и data messages не идут, порт закрывается, ffmpeg пишет в stderr дебаг-инфо о входном и выходном потоках):
pid = Port.open({:spawn, ~s[ffmpeg -i pipe:0 -vf "scale='min(400,iw)':min'(200,ih)':force_original_aspect_ratio=decrease" -loglevel verbose -f image2 pipe:1]}, [:use_stdio, :stream, :exit_status, :binary])
{:ok, data} = File.read("1.jpg")
Port.command(pid, data, [])
send(pid, {self(), :close})
flush()
Три таких с одной стороны, три с другой
И он будет моноширинным