ffmpeg 不接受脚本中的输入

ffmpeg doesn't accept input in script

这是一个初学者的问题,我研究了好几天都没有找到答案:

我希望 ffmpeg 提取视频的音频部分并将其保存在 .ogg 容器中。如果我 运行 在终端中执行以下命令,它将按预期工作:

ffmpeg -i example.webm -vn -acodec copy example.ogg

为方便起见,我想在脚本中执行此操作。但是,如果我将变量传递给 ffmpeg,它显然只考虑第一个词并产生错误“没有这样的文件或目录”。

我注意到我的终端通过 \ 转义空格,所以我将其包含在我的脚本中。但这并不能解决问题。

有人可以向我解释一下,为什么在终端中传递相同内容时 ffmpeg 没有考虑在脚本中传递给它的整个变量而正常工作吗?

这是我的脚本,它将带有由 \ 转义的空格的文件名传递给 ffmpeg:

#!/bin/bash

titelschr=$(echo $@ | sed "s/ /\\ /g")
titelohne=$(echo $titelschr | cut -d. -f 1)
titelogg=$(echo -e ${titelohne}.ogg)  

ffmpeg -i $titelschr -vn -acodec copy $titelogg

非常感谢您!

你需要引用变量扩展,试试这个:

#!/usr/bin/env bash

titelschr=
titelogg="${titelschr%.*}.ogg"

ffmpeg -i "$titelschr" -vn -acodec copy "$titelogg"

致电:

bash test.sh "Some video file.mp4"

这样就不需要转义空格了。