将csv解析为变量并循环执行ffmpeg命令

时间:2018-09-26 23:25:27

标签: bash loops csv

我正在尝试执行批处理操作,以使用bash脚本从多个视频文件中提取特定帧并将其另存为PNG。我希望通过在bash脚本中使用ffmpeg来做到这一点,并辅以一个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命令中循环,因为仅在读取操作之后才直接使用$ input,$ frame和$ output来执行ffmpeg命令在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 :(得分:1)

IFS=“,”替换为IFS=","