【发布时间】:2017-02-22 21:31:58
【问题描述】:
我有一个 .wmv 文件,我想将它转换为 .wav 文件,我正在使用 ffmpeg,命令如下:
ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav pipe:1
pipe:1 在 STDOUT 中输出输出波形文件。我想从 STDOUT 捕获该波形文件并将其作为命令行参数传递给我的名为 foo 的可执行文件。我想即时进行从 wmv 到 wav 的转换,而不是保存 .wav 文件。 我尝试过的事情如下,但它们似乎都不起作用:
./foo $(ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav pipe:1)
./foo $(<(ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav pipe:1))
ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav pipe:1 | xargs ./foo
ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav - | ./foo -
【问题讨论】:
-
为什么不直接通过管道从标准输入读取程序?
-
可执行文件的设计不在我的控制范围内
-
如何使用 bash 进程重定向?你的第二个例子,但只有
<(ffmpeg ...),而不是$(和)?结果类似于./foo /dev/fd/63,其中 fd 由命令的输出填充。 -
哦,我太慢了,chepner 已经知道了。
-
ffmpeg -i file.wmv -ar 8000 -sample_fmt s16 -f wav - | ./foo /dev/stdin是另一种选择,受制于与进程替换相关的大多数警告(FIFO、不可搜索等)