bash - 在 bash 中循环读取文件会跳过第三行的前 2 个字符
问题描述
#bin/bash
INPUT_DIR="$1"
INPUT_VIDEO="$2"
OUTPUT_PATH="$3"
SOURCE="$4"
DATE="$5"
INPUT="$INPUT_DIR/sorted_result.txt"
COUNT=1
initial=00:00:00
while IFS= read -r line; do
OUT_DIR=$OUTPUT_PATH/$COUNT
mkdir "$OUT_DIR"
ffmpeg -nostdin -i $INPUT_VIDEO -vcodec h264 -vf fps=25 -ss $initial -to $line $OUT_DIR/$COUNT.avi
ffmpeg -i $OUT_DIR/$COUNT.avi -acodec pcm_s16le -ar 16000 -ac 1 $OUT_DIR/$COUNT.wav
python3.6 /home/Video_Audio_Chunks_1.py $OUT_DIR/$COUNT.wav
python /home/transcribe.py --decoder beam --cuda --source $SOURCE --date $DATE --video $OUT_DIR/$COUNT.avi --out_dir "$OUT_DIR"
COUNT=$((COUNT + 1))
echo "--------------------------------------------------"
echo $initial
echo $line
echo "--------------------------------------------------"
initial=$line
done < "$INPUT"
这是我正在处理的代码。文件 sorted_results.txt 的内容如下:
00:6:59
00:7:55
00:8:39
00:19:17
00:27:48
00:43:27
在读取文件时,它会跳过第三行的前两个字符,即它会:8:39
导致 ffmpeg 错误并且脚本停止。
然而,当我只打印变量 $INITIAL 和 $LINE 时,注释ffmpeg
命令的值被正确打印,即与文件内容相同。
我认为 ffmpeg 命令以某种方式影响文件读取过程或变量值。但我不明白怎么做?
请帮忙。
解决方案
您的 bash read内置命令和第二个 ffmpeg 命令(用于音频)都从 STDIN 读取,这就是它们相互干扰的原因。您也可以在此处指定-nostdin或使用另一个文件描述符(此处使用数字 3)进行读取:
while IFS= read -r -u 3 line; do
...
done 3< "$INPUT"
推荐阅读
- python - python pip优先顺序与index-url和extra-index-url
- javascript - 导入的 JavaScript 问题,奇怪的错误
- javascript - CSS Paint API 不适用于链接元素
- node.js - 禁用 check_yarn_integrity 的后果?
- python - TCP 服务器不向客户端返回消息
- asp.net-core - 在 Nginx 上托管时,NetCore API 给出错误代码 500
- flutter - 如何强制 ListView 不连续扩展超过其他小部件(Flutter)
- html - 如何使 iframe 容器 div 拉伸取决于 iframe 高度并考虑响应?
- angular - 如何在 Angular 下拉列表中添加自动完成功能?
- python - 如何在matplotlib中设置轴和标签之间的空间