Python을 사용하여 비디오 파일에서 올바른 Exif 데이터를 가져올 수 없습니다.

루크

Python을 사용하여 비디오 파일에서 Exif 속성 " DateEncoded " 를 가져 오는 방법을 찾을 수 없습니다 .

여러 가지 exif 도구를 사용해 보았지만 이 특정 mp4 파일 (Android 앱 FilmicPro를 사용하여 녹음)은 특별한 경우 인 것 같습니다.

Windows 탐색기는 실제로 QuickTime exif 키 " Media_DateEncoded "인 "Create Date"속성 (이미지 참조) 아래에 올바른 날짜를 표시합니다 .

Windows 탐색기에서 정확한 날짜

Adobe Media Encoder도 올바른 날짜를 검색하는 것 같습니다.

MediaEncoder 메타 데이터 패널

그러나 내가 시도한 다섯 가지 방법 중 어느 것도 프로그래밍 방식으로 올바른 날짜 (2019 년 1 월 6 일)를 검색 할 수 없습니다. 항상 1 월 7 일을 반환합니다!

왜 / 어떻게 설명 할 수있는 사람이 있습니까?

다음은 코드입니다.

import os
import re
import struct
import subprocess as sub
from datetime import datetime
from hachoir.parser import createParser
from hachoir.metadata import extractMetadata
from win32com.propsys import propsys, pscon

# Download ExifTool from https://exiftool.org/
EXIF_TOOL = "exiftool.exe"

def method_1(fpath):
    # On Windows ctime means "Creation time", on Linux "Changed time"
    ctime = os.path.getctime(fpath)
    dtime = datetime.fromtimestamp(ctime)
    return dtime.strftime("%Y:%m:%d %H:%M:%S")

def method_2(fpath):
    '''
    This requires Hachoir installed. For Python3 run:
        >> pip3 install hachoir==3.1.1
        >> pip3 install hachoir-parser
    The property key 'Creation date' is a filesystem metadata, but
    it was the only one returned by Hachoir. What I really need is
    the Quicktime key 'Media_DateEncoded', which Windows Explorer
    calls "Media Created"
    '''
    parser = createParser(fpath)
    with parser:
        metadata = extractMetadata(parser)
    exif_dict = metadata.exportDictionary()['Metadata']
    return exif_dict['Creation date']

def method_3(fpath):
    '''
    This executes this shell comand:
        >> exiftool.exe -h VID_20190106_162804.mp4
    ...which returns an HTML like string from stdout.
    So using regular expression, we look for this section:
        "Media Create Date</td><td>2019:01:07 00:28:08</td></tr>"
    '''
    p = sub.Popen(
        [EXIF_TOOL, '-h',fpath],
        stdout=sub.PIPE,
        encoding='utf8')
    res, err = p.communicate()
    pattern = re.compile(
        r'Media Create Date\</td\>\<td\>(\d{4}:\d{2}:\d{2}\s\d{2}:\d{2}:\d{2})'
    )
    match = re.findall(pattern, res)
    if match:
        return match[0]

def method_4(fpath):
    '''
    Here we look for the Quicktime property key: Media_DateEncoded, which
    Windows Explorer calls "Media Created"
    '''
    fpath = fpath.replace('/', '\\') # Windows api does not work with posix paths
    properties = propsys.SHGetPropertyStoreFromParsingName(fpath)
    dtime = properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue()
    return dtime.strftime("%Y:%m:%d %H:%M:%S")

def method_5(fpath):
    ATOM_HEADER_SIZE = 8

    # Difference between Unix epoch and QuickTime epoch, in seconds
    EPOCH_ADJUSTER = 2082844800

    # open file and search for moov item
    f = open(fpath, "rb")
    while 1:
        atom_header = f.read(ATOM_HEADER_SIZE)
        if atom_header[4:8] == b'moov':
            break
        atom_size = struct.unpack(">I", atom_header[0:4])[0]
        f.seek(atom_size - 8, 1)

    # found 'moov', look for 'mvhd' and timestamps
    atom_header = f.read(ATOM_HEADER_SIZE)
    if atom_header[4:8] == b'cmov':
        raise Exception("moov atom is compressed")
    elif atom_header[4:8] != b'mvhd':
        raise Exception("expected to find 'mvhd' header")
    else:
        f.seek(4, 1)
        creation_date = struct.unpack(">I", f.read(4))[0]
        dtime = datetime.utcfromtimestamp(creation_date - EPOCH_ADJUSTER)
        return dtime.strftime("%Y:%m:%d %H:%M:%S")

win32의 Python 3.7.3 (v3.7.3 : ef4ec6ed12) [MSC v.1916 64 비트 (AMD64)]

운영체제 : Windows 10 버전 10.0.18362 Build 18362

StarGeek

고려하지 않은 점은 Quicktime 메타 데이터 타임 스탬프가 현지 시간이 아닌 UTC로 저장된다는 사실입니다. 시간대별로 저장 시간을 조정해야합니다. 모든 프로그램이 그렇지는 않지만 Windows는이를 이해하고 그에 따라 수정 된 시간을 표시합니다.

exiftool을 사용하여 타임 스탬프를 추출 할 때 -api QuickTimeUTC옵션을 추가하면 exiftool이 컴퓨터의 현재 시간대를 자동으로 조정합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Pandas를 사용하여 tsv 파일에서 올바른 출력을 가져올 수 없습니다.

분류에서Dev

Python을 사용하여 테이블에서 모든 데이터를 가져 오는 동안 json 값을 가져올 수 없습니다.

분류에서Dev

python : BeautifulSoup을 사용하여 html에서 특정 데이터를 가져올 수 없습니다.

분류에서Dev

요청을 사용하여 웹 페이지에서 부품 번호를 가져 오는 올바른 방법을 찾을 수 없습니다.

분류에서Dev

g ++를 사용하여 여러 파일에서 올바른 출력을받을 수 없습니다.

분류에서Dev

multer와 노드를 사용하여 올바른 파일 업로드를 가져올 수 없습니다

분류에서Dev

CSS 선택기를 사용하여 Python에서 데이터를 가져올 수 없습니다.

분류에서Dev

기능을 사용하여 테이블에서 데이터를 가져올 수 없습니다 belongsToMany

분류에서Dev

조인을 사용하여 두 테이블에서 데이터를 가져올 수 없습니다.

분류에서Dev

esp32를 사용하여 firebase에서 올바른 데이터를 가져올 수 없습니다. get 기능을 사용할 때마다 직렬 모니터에서 출력이 0입니다. 도와주세요

분류에서Dev

R을 사용하여 Excel에서 전체 데이터를 가져올 수 없습니다.

분류에서Dev

JSON을 사용하여 JQuery Ajax 게시물에서 PHP의 데이터를 가져올 수 없습니다.

분류에서Dev

Codeigniter의 Excel에서 가져올 때 where 절을 사용하여 데이터를 선택할 수 없습니다.

분류에서Dev

angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

분류에서Dev

Ruby를 사용하여 셀레늄 웹 드라이버에서 HAR 파일을 가져올 수 없습니다.

분류에서Dev

R에서 strptime을 사용하여 올바른 날짜를 가져 오는 데 오류가 있습니다.

분류에서Dev

$ .get 함수 (응답)를 사용하여 다른 HTML에서 데이터를 가져올 수 없습니다.

분류에서Dev

beautifulsoup을 사용하여 특정 데이터를 가져올 수 없습니다.

분류에서Dev

nodejs를 사용하여 데이터 본문을 가져올 수 없습니다.

분류에서Dev

immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

분류에서Dev

build.phonegap.com을 사용하여 IOS에서 작동하는 파일 API를 가져올 수 없습니다.

분류에서Dev

googlesheet에서 가져올 올바른 xpath를 찾을 수 없습니다.

분류에서Dev

googlesheet에서 가져올 올바른 xpath를 찾을 수 없습니다.

분류에서Dev

requirejs를 사용하여 js 파일을 가져올 수 없습니다.

분류에서Dev

javascript 및 asp.net을 사용하여 AjaxFileUpload에서 파일 이름을 가져올 수 없습니다.

분류에서Dev

Pandas를 사용하여 Python에서 데이터를 가져올 수 없음

분류에서Dev

API를 사용하여 s3에서 파일을 가져올 수 없습니다.

분류에서Dev

require ()를 사용하여 Reactjs에서 사진을 가져올 수 없습니다.

분류에서Dev

Python에서 원하는 데이터를 가져올 수 없습니다.

Related 관련 기사

  1. 1

    Pandas를 사용하여 tsv 파일에서 올바른 출력을 가져올 수 없습니다.

  2. 2

    Python을 사용하여 테이블에서 모든 데이터를 가져 오는 동안 json 값을 가져올 수 없습니다.

  3. 3

    python : BeautifulSoup을 사용하여 html에서 특정 데이터를 가져올 수 없습니다.

  4. 4

    요청을 사용하여 웹 페이지에서 부품 번호를 가져 오는 올바른 방법을 찾을 수 없습니다.

  5. 5

    g ++를 사용하여 여러 파일에서 올바른 출력을받을 수 없습니다.

  6. 6

    multer와 노드를 사용하여 올바른 파일 업로드를 가져올 수 없습니다

  7. 7

    CSS 선택기를 사용하여 Python에서 데이터를 가져올 수 없습니다.

  8. 8

    기능을 사용하여 테이블에서 데이터를 가져올 수 없습니다 belongsToMany

  9. 9

    조인을 사용하여 두 테이블에서 데이터를 가져올 수 없습니다.

  10. 10

    esp32를 사용하여 firebase에서 올바른 데이터를 가져올 수 없습니다. get 기능을 사용할 때마다 직렬 모니터에서 출력이 0입니다. 도와주세요

  11. 11

    R을 사용하여 Excel에서 전체 데이터를 가져올 수 없습니다.

  12. 12

    JSON을 사용하여 JQuery Ajax 게시물에서 PHP의 데이터를 가져올 수 없습니다.

  13. 13

    Codeigniter의 Excel에서 가져올 때 where 절을 사용하여 데이터를 선택할 수 없습니다.

  14. 14

    angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

  15. 15

    Ruby를 사용하여 셀레늄 웹 드라이버에서 HAR 파일을 가져올 수 없습니다.

  16. 16

    R에서 strptime을 사용하여 올바른 날짜를 가져 오는 데 오류가 있습니다.

  17. 17

    $ .get 함수 (응답)를 사용하여 다른 HTML에서 데이터를 가져올 수 없습니다.

  18. 18

    beautifulsoup을 사용하여 특정 데이터를 가져올 수 없습니다.

  19. 19

    nodejs를 사용하여 데이터 본문을 가져올 수 없습니다.

  20. 20

    immutable.js가있는 React, Redux : 목록에서 하나의 항목을 삭제할 때 올바른 상태 데이터를 가져올 수 없습니다.

  21. 21

    build.phonegap.com을 사용하여 IOS에서 작동하는 파일 API를 가져올 수 없습니다.

  22. 22

    googlesheet에서 가져올 올바른 xpath를 찾을 수 없습니다.

  23. 23

    googlesheet에서 가져올 올바른 xpath를 찾을 수 없습니다.

  24. 24

    requirejs를 사용하여 js 파일을 가져올 수 없습니다.

  25. 25

    javascript 및 asp.net을 사용하여 AjaxFileUpload에서 파일 이름을 가져올 수 없습니다.

  26. 26

    Pandas를 사용하여 Python에서 데이터를 가져올 수 없음

  27. 27

    API를 사용하여 s3에서 파일을 가져올 수 없습니다.

  28. 28

    require ()를 사용하여 Reactjs에서 사진을 가져올 수 없습니다.

  29. 29

    Python에서 원하는 데이터를 가져올 수 없습니다.

뜨겁다태그

보관