gpt4 book ai didi

bash - 变量中的转义引号问题(我认为)

转载 作者:行者123 更新时间:2023-12-04 23:18:33 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Pass dynamically generated parameters to command inside script

(1 个回答)


4个月前关闭。




我正在尝试编写一个参数驱动的例程来使用 ffmpeg 提取部分音频文件。
因为例程是参数驱动的,所以我最终在变量中有许多选项(我之前在更简单的示例中成功使用过的一种技术)并且由于某种原因这次它不起作用。盯着它并尝试了几个小时的各种实验,我放弃了,希望有帮助的专家能帮我解决
这是一个简化版本,直接设置变量

...
#!/bin/bash

a="a b c.mp3"
b="out-$a"

trackstring="-metadata track=\"07/93\""
echo "trackstring=$trackstring"

titlestring="-metadata title=\"$a\""
echo "titlestring=$titlestring"

startpoint="-ss 0"
echo "startpoint=$startpoint"

endpoint="-to 300"
echo "endpoint=$endpoint"

coverstring="-c:v copy"
echo "coverstring=$coverstring"

audiostring="-c:a libmp3lame -ab 32k -ac 1"
echo "audiostring=$audiostring"

echo "ffmpeg $startpoint $endpoint -i \"$a\" -hide_banner -loglevel warning $coverstring $audiostring $titlestring $trackstring \"$b\""

ffmpeg $startpoint $endpoint -i "$a" -hide_banner -loglevel warning $coverstring $audiostring $titlestring $trackstring "$b"
...
我的脚本的结果输出如下所示:
trackstring=-元数据 track="07/93"
标题字符串=-元数据标题=“a b c.mp3”
起点=-ss 0
端点=-到 300
覆盖字符串=-c:v 复制
audiostring=-c:a libmp3lame -ab 32k -ac 1
ffmpeg -ss 0 -to 300 -i "a b c.mp3"-hide_banner -loglevel 警告 -c:v 复制 -c:a libmp3lame -ab 32k -ac 1 -metadata title="a b c.mp3"-metadata track= "07/93""out-a b c.mp3"
这正是我所期望的,我认为所有这些都是有效的,但是......
然后ffmpeg给我:

[mp3 @ 0x55ae679e4640] 从比特率估计持续时间,这可能不准确
[NULL @ 0x55ae679ea0c0] 无法为“b”找到合适的输出格式
b: 无效参数

最佳答案

一个坏的!
但有趣的是,将整个命令放入一个字符串中,并且使用显式子 shell 完全按预期工作:所以从原始帖子中的最后一个作业开始

...
audiostring="-c:a libmp3lame -ab 32k -ac 1"
echo "audiostring=$audiostring"

cmd="ffmpeg $startpoint $endpoint -i \"$1\" -hide_banner -loglevel warning $coverstring $audiostring $titlestring $trackstring \"$2\""
echo "$cmd"
bash -c "$cmd"
坦率地说,虽然我现在有了“工作代码”,但我想我比以前更困惑了。
输出没有改变(除了 ffmpeg 没有错误)并且文件完全按照预期生成

关于bash - 变量中的转义引号问题(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71500758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com