Цикл while в bash для чтения файла пропускает первые 2 символа третьей строки - PullRequest
0 голосов
/ 03 июля 2018
#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 как-то влияет на процесс чтения файла или значение переменной. Но я не могу понять, как?

ПОЖАЛУЙСТА, ПОМОГИТЕ.

1 Ответ

0 голосов
/ 09 июля 2018

Ваш bash read встроенная команда и вторая команда ffmpeg (для аудио) оба читают из STDIN, поэтому они мешают друг другу. Вы также можете указать -nostdin или использовать другой файловый дескриптор (здесь используется номер 3) для чтения:

  while IFS= read -r -u 3 line; do
    ...
  done 3< "$INPUT"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...