Разобрать CSV в переменные и выполнить команду ffmpeg в цикле - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь выполнить пакетную операцию, чтобы извлечь определенные кадры из нескольких видеофайлов и сохранить их в формате PNG, используя скрипт bash.Я надеюсь сделать это, используя ffmpeg в скрипте bash, дополненный файлом csv, который содержит имя входного видео, конкретный номер кадра, который будет извлечен из входного видео, и выходное имя файла PNG.

Все видеофайлы и файл csv будут размещены в одной папке.Сценарий также может быть помещен туда, если необходимо.

Мой CSV - называется "select.csv" - в настоящее время принимает следующий формат (вход, выход, кадр):

mad0.m4v,mad0_out1,9950
mad0.m4v,mad0_out2,4500
mad1.m4v,mad1_out1,3200

МойТекущий скрипт, называемый "frame.sh", принимает следующую форму:

#!/bin/bash
OLDIFS=$IFS
IFS=“,”
SDIR=/Users/myuser/Desktop/f-input/

cd $SDIR;
while read input output frame
do
   echo "$input"
   echo "$output"
   echo "$frame"
   input1=$input
   output1=$output
   frame1=$frame
   ffmpeg -i "$input1" -vf select='eq(n\,'"$frame1"')' -vsync 0 
"$output1".png
done < $1
IFS=$OLDIFS

Это должно позволить мне запустить ./frame.sh select.csv, чтобы затем обработать все соответствующие файлы в папке "f-input" на моем рабочем столе.и извлекать указанные кадры.

Я закончил выводом переменных, считанных из csv, чтобы они могли фактически использоваться как переменные и передавались в цикле в команде ffmpeg, потому что выполнение команды ffmpeg с использованием $ input, $ frame и$ output непосредственно после операции чтения только когда-либо завершал процесс в первой строке csv, не продвигаясь дальше.

По сути, я хотел бы, чтобы следующее фактически выполняло цикл по каждой записи csv, а не только в первой строке:

#!/bin/bash
OLDIFS=$IFS
IFS=“,”
SDIR=/Users/myuser/Desktop/f-input/

cd $SDIR;
while read input output frame
do
   ffmpeg -i "$input" -vf select='eq(n\,'"$frame"')' -vsync 0 "$output".png
done < $1
IFS=$OLDIFS

Любой и все советы приветствуются!

Большое спасибо

1 Ответ

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

Заменить IFS=“,” на IFS=",".

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