переменные bash изменяются в цикле с помощью ffmpeg - PullRequest
0 голосов
/ 17 сентября 2018

Я написал сценарий для быстрого создания коротких превью-роликов из видеороликов, которые я записал на отметках времени, которые я нашел нужными позже для вырезки.Мой файл с отметками времени написан так:

FILE_NAME1#MM:SS MM:SS
FILE_NAME2#MM:SS MM:SS MM:SS MM:SS

пример:

MAH01728#02:47 03:34 03:44 05:00 06:08 06:55

Сценарий выглядит так:

#!/bin/bash
while read f
 do

 file=$(echo $f | cut -d"#" -f1)
 filename=${file}".MP4"
 timestamps=$(echo $f | cut -d"#" -f2)

for time in $timestamps 
 do 
  ffmpeg -ss 00:${time}.0 -i "orig/${filename}" -c copy -t 10 "preview/${file}_${time}.MP4"
 done
done < $1

Сценарий получает половинупредварительные просмотры, которые я хочу, и с другой стороны, имя файла испорчено, и ffmpeg жалуется, что файл не найден:

orig/714.MP4: No such file or directory
orig/00:58 01:25.MP4: No such file or directory

Поэтому я изменил скрипт для устранения неполадок и просто поместил эхо перед ffmpegкоманда - теперь все имена файлов верны.Чего мне не хватает?

ffmpeg -ss 00:01:47.0 -i orig/MAH01714.MP4 -c copy -t 10 preview/MAH01714_01:47.MP4
ffmpeg -ss 00:02:00.0 -i orig/MAH01713.MP4 -c copy -t 10 preview/MAH01713_02:00.MP4
ffmpeg -ss 00:00:58.0 -i orig/MAH01712.MP4 -c copy -t 10 preview/MAH01712_00:58.MP4
ffmpeg -ss 00:01:25.0 -i orig/MAH01712.MP4 -c copy -t 10 preview/MAH01712_01:25.MP4

1 Ответ

0 голосов
/ 17 сентября 2018

ffmpeg считывает из стандартного ввода, используя данные из $1, которые были предназначены для команды read в верхней части цикла. Перенаправить его стандартный ввод с /dev/null:

while IFS="#" read file timestamps; do
  filename="$file.MP4"
  for time in $timestamps; do
    ffmpeg -ss 00:${time}.0 -i "orig/${filename}" \
           -c copy -t 10 "preview/${file}_${time}.MP4" < /dev/null
  done
done < "$1"

echo не не считывает со стандартного ввода, поэтому ваша модификация заставила его работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...