首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环执行"ffmpeg“命令

循环执行"ffmpeg“命令
EN

Stack Overflow用户
提问于 2014-02-08 01:28:04
回答 3查看 23.5K关注 0票数 23

我的文件夹中有三个.wav文件,我想用ffmpeg将它们转换成.mp3

我写了这个bash脚本,但是当我执行它时,只有第一个脚本被转换为mp3。

我应该怎么做才能让脚本继续浏览我的文件?

脚本是这样的:

代码语言:javascript
复制
#!/bin/bash
find . -name '*.wav' | while read f; do
    ffmpeg -i "$f" -ab 320k -ac 2 "${f%.*}.mp3"
done
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-08 01:36:25

没有理由使用find,只需使用bash通配符全局搜索

代码语言:javascript
复制
#!/bin/bash
for name in *.wav; do
  ffmpeg -i "$name" -ab 320k -ac 2 "${name%.*}.mp3" 
done 
票数 4
EN

Stack Overflow用户

发布于 2017-05-30 04:34:56

使用-nostdin标志禁用交互模式,

代码语言:javascript
复制
ffmpeg -nostdin -i "$f" -ab 320k -ac 2 "${f%.*}.mp3"

或者让ffmpeg从控制终端而不是stdin读取其输入。

代码语言:javascript
复制
ffmpeg -i "$f" -ab 320k -ac 2 "${f%.*}.mp3" </dev/tty

请参阅ffmpeg documentation中的-stdin/-nostdin标志

票数 60
EN

Stack Overflow用户

发布于 2014-02-08 02:02:48

如果您确实需要find (用于查找子目录或执行更高级的过滤),请尝试执行以下操作:

代码语言:javascript
复制
find ./ -name "*.wav" -exec sh -c 'ffmpeg -i "$1" -ab 320k -ac 2 "$(basename "$1" wav).mp3"' _ {} \;

通过管道将find的输出传输到while循环有两个缺点:

在匹配的文件名包含换行符character.

  • ffmpeg,的情况下(可能很少见),它会失败,因为我不知道什么原因,它将从标准输入读取,这会干扰
  1. read命令。这很容易修复,只需重定向来自find ... | while read f; do ffmpeg ... < /dev/null; done.

/dev/null标准输入即可

在任何情况下,都不要将命令存储在变量名中并使用eval计算它们。养成这样的习惯既危险又不好。如果您确实需要确定实际的命令行,请使用shell函数。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21634088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档