シェルスクリプトは一連の写真にさまざまなGPSデータを追加します。

シェルスクリプトは一連の写真にさまざまなGPSデータを追加します。

私は飛行映画を作るのに使うドローンを持っており、この映像を使って撮影中の地形のDEM(Digital Elevation Model)を構築します。映画からフレームを簡単に抽出できますが、メソッド(ffmpeg)は、DEMを確実に構築するために必要な緯度と経度の情報をこれらのフレームに提供しません。これらすべてのデータは、私がダウンロードしたドローンフライトコントロールアプリに保存されている.csvファイルにあります。

この.csvファイルからすべてのナビゲーションデータ列を抽出したいと思います。これを行うには、awkを使用できます。次に、フライトパス内の特定のタイムスタンプのナビゲーションデータを、映画から抽出された対応する静止フレーム(同じタイムスタンプ)に追加するスクリプトを作成します。 Exiftoolを使用してGPSデータを画像に追加できますが、シェルスクリプトが初めてなので、現在ネストされたループを機能させることはできません。

現在私のスクリプトは次のように書かれています。みんな.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

関連情報