首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BASH删除行中的第一个字母(ffmpeg)

BASH删除行中的第一个字母(ffmpeg)
EN

Stack Overflow用户
提问于 2020-03-19 22:43:29
回答 1查看 158关注 0票数 1

输入:

代码语言:javascript
复制
# cat list
video1.mp4
video2.mp4
video3.mp4
video4.mp4

我的剧本:

代码语言:javascript
复制
#!/bin/bash

while IFS= read -r line || [[ -n "$line" ]]; do
  echo $line
  ffmpeg -i $line -c copy -bsf:v h264_mp4toannexb -f mpegts $line.ts
  echo $line

done < "./list";

rm *.ts

每隔一次迭代,bash就会读取"ideo2.mp4“而不是”instead 2.mp4“或"ideo4.mp4”而不是“instead 4.mp4”。

全输出

代码语言:javascript
复制
+ IFS=
+ read -r line
+ echo video1.mp4
video1.mp4
+ ffmpeg -i video1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts video1.mp4.ts
...
+ echo video1.mp4
video1.mp4
+ IFS=
+ read -r line
+ echo ideo2.mp4
ideo2.mp4
+ ffmpeg -i ideo2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts ideo2.mp4.ts
...
ideo2.mp4: No such file or directory
+ echo ideo2.mp4
ideo2.mp4
+ IFS=
+ read -r line
+ echo video3.mp4
video3.mp4
+ ffmpeg -i video3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts video3.mp4.ts
...
+ echo video3.mp4
video3.mp4
+ IFS=
+ read -r line
+ echo ideo4.mp4
ideo4.mp4
+ ffmpeg -i ideo4.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts ideo4.mp4.ts
...
ideo4.mp4: No such file or directory
+ echo ideo4.mp4
ideo4.mp4

当我评论“ffmpg.”一切都很好。

本地Ubuntu (bash 4.20(1)-release)和VPS (debian) (bash 4.12(1))的测试

怎么一回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-19 23:10:23

当我评论“ffmpg.”一切都很好。

您将./list的内容作为整个循环的标准输入传递,这意味着循环中的所有命令都可以从该标准输入中读取。

我从未使用过ffmpeg,但可能出于某种原因,它正在从标准输入中读取一个字节。如果将< /dev/null添加到ffmpeg命令(这样它就有自己的空标准输入而不是从ffmpeg继承),那么它将无法处理循环其余部分使用的标准输入。

顺便提一句,你的报价是错误的。没有必要引用./list (因为它没有特殊的字符或展开),相反,您应该在任何地方引用$line (因为添加引号更容易,并且在有展开时总是添加引号的习惯,而不是每次都证明在给定的情况下不需要引号)。所以:

代码语言:javascript
复制
ffmpeg -i "$line" -c copy -bsf:v h264_mp4toannexb -f mpegts "$line.ts" < /dev/null
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60766097

复制
相关文章

相似问题

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