管道输出到 bash 命令的中间
Posted
技术标签:
【中文标题】管道输出到 bash 命令的中间【英文标题】:piping output into middle of bash command 【发布时间】:2015-12-07 15:44:57 【问题描述】:与这个问题有点相关:Convert audio files to mp3 using ffmpeg
我想在 BASH 中使用管道在一行中执行一个命令。
我想要做的是:
echo "Hello" | somecommand | ffmpeg -i _____ -f mp2 output.mp3
_____
是somecommand
的输出。有什么方法可以实现吗?
【问题讨论】:
ffmpeg
支持libflite 可以从文本文件中制作音频。
【参考方案1】:
您可以在中间参数中使用command substitution:
ffmpeg -i "$(echo 'Hello' | somecommand)" -f mp2 output.mp3
【讨论】:
somecommand
实际上代表text2wave
函数,那么我如何从中获取输出 .wav 文件并将其传递给 ffmpeg?
是的,我已经展示了相同的行语法。它将是:ffmpeg -i "$(echo 'Hello' | text2wave)" -f mp2 output.mp3
当我在终端中运行时,我收到一条错误消息“文件名太长”。为了实际保存到 .wav 文件,必须这样做:text2wave -o file.wav
text2wave
是否将输出写入您要在ffmpeg
命令中使用的终端?
否,text2wave 创建一个我想在 ffmpeg 中使用的输出 wav 文件【参考方案2】:
尝试使用 xargs
echo "Hello" | somecommand | xargs ffmpeg -f mp2 output.mp3 -i
或
echo "Hello" | somecommand | xargs -i ffmpeg -i -f mp2 output.mp3
【讨论】:
xargs -i 是我最好的新朋友!以上是关于管道输出到 bash 命令的中间的主要内容,如果未能解决你的问题,请参考以下文章