我在 Arch Linux 上尝试录制计算机上播放的音频ffmpeg
并将其存储为.flac
文件。我调用以下命令:
ffmpeg -f pulse -i default -c:a flac -compression_level 8 "~/path/to/target/directory/myRecording.flac"
此时我得到一个Error opening output
。然后它列出上述目标文件名,后跟No such file or directory
。我已验证目标目录存在。我尝试使用通过 标识的不同源pactl
,但没有任何改变错误,即使我想要写入的目录确实存在。
Linux/Unix 中常用的 Shell 会将波浪号 (
~
) 替换为 Shell 变量的值HOME
,但前提是波浪号不带引号且未转义。整个机制更加复杂,支持类似这样的语法
~username
,或者要求~
必须位于单词开头(可能有例外)。详细信息可能取决于 shell;对于 Bash,请参阅Bash 参考手册的相关部分。在 Linux/Unix 中,很少有程序会扩展
~
或解释引号;这些是 shell 的工作。由于 shell 没有扩展带引号的波浪号(请注意,它确实删除了引号),因此您的命令变成"~/path/…/myRecording.flac"
了。got 作为参数之一。该工具不会自行扩展。如果当前工作目录中有一个字面上命名的目录,并且该目录中有目录,则该命令将起作用。~/path/…/myRecording.flac
ffmpeg
~/path/to/target/directory/myRecording.flac
~
~
path/to/target/directory/
~
如果您希望
~
由 shell 扩展,则不能引用它。例如,像这样引用将使 shell 扩展波浪线: