「デジタル動画像交換のファイル形式」という非常に優れたドキュメントがあり、参考になると思います。公式バージョンがどこにあるかはわかりませんが、1 つのバージョンはここにあります。
とにかく、ピクセルの縦横比を変更するために使用できるコード スニペットを次に示します。
import struct
fp = open('file.dpx', 'r+b')
fp.seek(1628) #Set the offset to the pixel aspect ratio field
#Prints out the current pixel aspect ratio.
#Assumes big-endian -- Check the magic number for your use case
print struct.unpack_from('>I', fp.read(4))[0] #horizontal pixel aspect ratio
print struct.unpack_from('>I', fp.read(4))[0] #vertical pixel aspect ratio
#Change the aspect ratios to new values. Again assumes big-endian
fp.seek(1628) #Return to the proper offset for aspect ratio
new_horizontal = struct.pack('>I', 4L)
new_vertical = struct.pack('>I', 3L)
fp.write(new_horizontal) #set the new horizontal pixel aspect ratio to 4
fp.write(new_vertical) #set the new vertical aspect ratio to 3
fp.close()
このコードは、ファイル ヘッダーと画像ヘッダーをまだ読んでいないことを前提としています。ファイル ヘッダーは 768 バイト、イメージ ヘッダーは 640 バイトです。Orientation ヘッダーには、AspectRatio の前に、XOffset、YOffset、XCenter、YCenter、XOriginalSize、YOriginalSize、FileName、TimeDate、InputName、InputSN、および Border といういくつかのフィールドがあります。これらのフィールドのバイト長は、それぞれ 4、4、4、4、4、4、100、24、32、32、および 8 です。合計 220 です。AspectRatio のオフセットは、これらのフィールドの合計です: 768+640+220=1628。
これは、適切なオフセットを把握するのが難しい方法です。上記の .pdf を見るだけなら、はるかに簡単です。テーブル内のすべてのフィールドオフセットをリストします:p