私は飛行映画を作るのに使うドローンを持っており、この映像を使って撮影中の地形の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