Published on

prprojファイルを昔のバージョンにする(pythonでgzip)

Authors
  • avatar
    Name
    Kikusan
    Twitter

adobe premiere pro の最新バージョンのプロジェクトファイルが旧バージョンからひらけない時の、ダウングレードスクリプトを書きました。
mac上で拡張子をいじって圧縮解凍したりして直せますが、何度もやるのはめんどうだということで。

pythonが動く環境で、prproj.pyを実行すれば動きます。

python prproj.py [prprojファイルがあるフォルダ] 01

↑をターミナルから実行すれば動作しますが、
pythonがターミナルから実行できること、実行前にcd [prproj.pyのあるフォルダ]としてカレントディレクトリを移動しておいてください。

ソース

以下がソースです。
調べるとprprojファイルはgzipファイルだそうで、gzipの中身を書き換えています。

import argparse
import glob
import gzip
import pathlib
import xml.etree.ElementTree as ET


def get_args():
    """コマンドライン引数"""

    parser = argparse.ArgumentParser()

    parser.add_argument('folder', help='prprojファイルが格納された絶対パスを入力してください')
    parser.add_argument('toVersion', help='変更後のVersionを入力してください')

    args = parser.parse_args()
    return args


def main():
    """prproj version変更実行"""
    args = get_args()
    
    # フォルダ直下ファイル取得
    files = glob.glob(args.folder + '/*')
    # prprojのみ取り出し
    prproj_files = [f for f in files if pathlib.PurePath(f).suffix == '.prproj']

    for file in prproj_files:
        # 読み取り
        with gzip.open(file, mode='tr') as gz:
            lines = gz.read()

        # xml編集
        root = ET.fromstring(lines)

        for project in root.iter('Project'):
            if 'Version' in project.attrib:
                project.set('Version', args.toVersion)

        xmlstr = ET.tostring(root, encoding='utf-8').decode('utf-8')

        # 書き込み
        with gzip.open(file, 'wt') as gz:
            gz.write(xmlstr)


if __name__ == '__main__':
    main()