0

私は時々バイナリデータの読み取りに取り組んできました。しかし、バイト配列を使用するときにオフセットを推定する方法について、システムを実際にダウンさせたことはありません。

この場合、私は dpx ファイルで作業しており、オリエンテーション ヘッダーにある縦横比を変更しようとしています。ここにある関連ファイル情報: http://www.fileformat.info/format/dpx/egff.htm

Scott Griffiths がこの件に関してすばらしい記事を書いていることは知っています。画像ファイルをデコードして画像ヘッダー情報を抽出し、それを変更します(pythonを使用) ただし、その知識をGENERICFILEHEADER以外のヘッダーの下にあるものを変更することに変換するのに十分な理解はありませんでした

では、アスペクト比を変更するにはどうすればよいでしょうか。この問題に関するヘルプは大歓迎です。

乾杯

4

1 に答える 1

1

「デジタル動画像交換のファイル形式」という非常に優れたドキュメントがあり、参考になると思います。公式バージョンがどこにあるかはわかりませんが、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

于 2012-11-04T03:22:13.423 に答える