【问题标题】:ffmpeg doesn't accept input in scriptffmpeg 不接受脚本中的输入
【发布时间】:2022-10-21 23:44:29
【问题描述】:

这是一个初学者的问题,但在研究了几天后我无法找出答案:

我希望 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

非常感谢您!

【问题讨论】:

    标签: linux bash ffmpeg


    【解决方案1】:

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

    #!/usr/bin/env bash
    
    titelschr=$1
    titelogg="${titelschr%.*}.ogg"
    
    ffmpeg -i "$titelschr" -vn -acodec copy "$titelogg"
    

    调用:

    bash test.sh "Some video file.mp4"
    

    这样,您无需转义空格。

    【讨论】:

    • 在将变量传递给 ffmpeg 时引用变量解决了我的问题。非常感谢!我在谷歌搜索的任何指南中都没有看到这一点,也许是因为它太基础了,对每个人来说都是显而易见的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2012-12-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多