Shell 脚本将不同的 GPS 数据添加到一系列照片中

Shell 脚本将不同的 GPS 数据添加到一系列照片中

我有一架无人机,用来制作飞行电影,我将使用这段视频来构建我正在拍摄的地形的 DEM(数字高程模型)。我可以很容易地从电影中提取帧,但是该方法 (ffmpeg) 没有为这些帧提供可靠构建 DEM 所需的经纬度等信息。所有这些数据都可以在我下载的无人机飞行控制应用程序中存储的 .csv 文件中找到。

我想从此 .csv 文件中提取所有导航数据列。我可以使用 awk 来做到这一点。然后我想编写一个脚本,将飞行路径中某个时间戳的导航数据附加到从电影中提取的相应静止帧(在相同的时间戳)。我可以使用 exiftool 将 GPS 数据附加到图像,但由于对 shell 脚本相当陌生,我无法让当前的嵌套循环工作。

目前,我的脚本写的是全部.csv 文件中的行每一个文件夹中的图片。相反,我想将 line1(经纬度等)写入 photo1,将 line2 写入 photo2,依此类推。我觉得我应该能够解决这个问题,但无法破解它:非常欢迎任何帮助!

# Using awk, extract the relevant columns from the flightpath dataset
awk -F, '{print $1,$2,$3,$7,$15,$22,$23 }' test.csv > test2.csv

# Read through .csv file line-by-line
# Make variables that can be commanded
while IFS=" " read -r latitude longitude altitude time compHeading gimbHeading gimbPitch
do

# exiftool can now command these variables
# write longitude and latitude to some photograph
    for photo in *.png; do
    exiftool -GPSLongitude="$longitude"  -GPSLatitude="$latitude" *.png
    done

# Following line tells bash which textfile to draw data from
done < test2.csv

答案1

如果您的照片数量与 CSV 文件中的行数相同,则可以使用一个简单的for循环:

for photo in *.png; do
  IFS=" " read -r latitude longitude altitude time compHeading gimbHeading gimbPitch
  exiftool -GPSLongitude="$longitude"  -GPSLatitude="$latitude" "$photo"
done < test2.csv

相关内容