关于 bash 中使用 ffmpeg 的一个神奇的现象

2023-03-28 15:41:29 +08:00
 sshnuke
比如我用这样的
ls *.jpg |while read id;do echo ffmpeg -i "$id" ../new/${id}_new.jpg;done
输出成一串命令 然后在 bash 中执行这船命令 是不会出问题的

但是如果我换成这样的
ls *.jpg |while read id;do ffmpeg -i "$id" ../new/${id}_new.jpg;done
那么就一定会一个隔一个文件报文件名不存在而执行失败
这是为什么呢
1042 次点击
所在节点    Linux
6 条回复
AoEiuV020CN
2023-03-28 16:18:12 +08:00
上个图看看,
意思是一个 jpg 执行了两次 ffmpeg 其中一次报错,还是说有一半的 jpg 执行 ffmpeg 报错了?
sshnuke
2023-03-28 17:04:17 +08:00
有一半的 jpg 报错,错误原因是文件名错误

比如我的文件夹是 11.jpg 12.jpg 13.jpg 14.jpg 15.jpg 16.jpg 17.jpg 18.jpg 19.jpg 20.jpg 21.jpg 22.jpg

那么报错的是 12 14 16 18 这样的偶数文件名的

报错信息是 2.jpg: No such file or directory 这样的 也即文件名被吃掉了开头的 1

而奇数文件名的文件无影响
julyclyde
2023-03-28 21:37:22 +08:00
@sshnuke 说实话,我不信
sshnuke
2023-03-29 14:08:32 +08:00
@julyclyde 你自己试一试不就知道了
在 centos 和 ubuntu 上都复现了
aloxaf
2023-03-29 16:20:11 +08:00
和 bash 无关,你需要加上 -nostdin ,

https://man.archlinux.org/man/ffmpeg.1#stdin
sshnuke
2023-03-29 17:12:00 +08:00
@aloxaf 解决了
非常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/927879

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX