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"
这样就不需要转义空格了。
这是一个初学者的问题,我研究了好几天都没有找到答案:
我希望 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"
这样就不需要转义空格了。