복붙노트

[RUBY-ON-RAILS] 어떻게 비디오에서 방향 정보를 추출하는?

RUBY-ON-RAILS

어떻게 비디오에서 방향 정보를 추출하는?

웹 문서의 톤을 통해 서핑 후에는 아이폰이 항상되는 480x360 화면 비율로 영상을 촬영하고 비디오 트랙에 변형 행렬을 적용 것으로 보인다. (되는 480x360 변경할 수 있지만, 특정 장치는 항상 동일)

여기 http://www.seqoy.com/correct-orientation-for-iphone-recorded-movies-with-ffmpeg/ 아이폰 OS 프로젝트 내에는 FFmpeg 소스 수정 및 매트릭스를 액세스하는 방법은

여기서 아이폰 OS-4에 변환 행렬을 찾는 청소기의 방법은 비디오 파일이 세로 방향 또는 풍경을 촬영 한 경우 어떻게 (아이폰 SDK)를 감지합니다.

어떻게 비디오의 방향은 아래 옵션 중 하나를 추출 할 수 있습니다 - - 아이폰 OS 3.2 - FFmpeg은 (명령어 광고 서버 측을 통해) - 루비

어떤 도움을 이해할 수있을 것이다.

해결법

  1. ==============================

    1.대부분의 카메라는 EXIF ​​- 메타 이내에 회전 / 방향을 저장하기 때문에, 난 exifttool 적극적으로 유지된다 루비 래퍼 일품이라고 mini_exiftool를 사용하여 제시한다.

    대부분의 카메라는 EXIF ​​- 메타 이내에 회전 / 방향을 저장하기 때문에, 난 exifttool 적극적으로 유지된다 루비 래퍼 일품이라고 mini_exiftool를 사용하여 제시한다.

    exiftool 설치 :

    apt-get을 exiftool || exiftool || 설치 양조 포트는 exiftool 설치

    또는 관리자를 사용할 수 이제까지 패키지 무엇을 사용

    mini_exiftool를 설치합니다 :

    보석 mini_exiftool 설치

    시도 해봐:

    irb>
    require 'mini_exiftool'
    movie = MiniExiftool.new('test_movie.mov')
    movie.orientation #=> 90
    

    건배

  2. ==============================

    2.내가 지금까지 발견 한 바로는,는 FFmpeg은 아이폰의 방향을 감지 할 수있는 능력을 가지고 있지 않습니다. 그러나, 오픈 소스 라이브러리, Mediainfo를 할 수. 명령 줄 예 :

    내가 지금까지 발견 한 바로는,는 FFmpeg은 아이폰의 방향을 감지 할 수있는 능력을 가지고 있지 않습니다. 그러나, 오픈 소스 라이브러리, Mediainfo를 할 수. 명령 줄 예 :

    $ mediainfo test.mp4 | grep Rotation
    Rotation                         : 90°
    

    아이폰 동일한 비디오의 추가 출력 예 :

    Video
    ID                               : 1
    Format                           : AVC
    Format/Info                      : Advanced Video Codec
    Format profile                   : Baseline@L3.0
    Format settings, CABAC           : No
    Format settings, ReFrames        : 1 frame
    Codec ID                         : avc1
    Codec ID/Info                    : Advanced Video Coding
    Duration                         : 7s 941ms
    Bit rate mode                    : Variable
    Bit rate                         : 724 Kbps
    Width                            : 480 pixels
    Height                           : 360 pixels
    Display aspect ratio             : 4:3
    Rotation                         : 90°
    Frame rate mode                  : Variable
    Frame rate                       : 29.970 fps
    Minimum frame rate               : 28.571 fps
    Maximum frame rate               : 31.579 fps
    Color space                      : YUV
    Chroma subsampling               : 4:2:0
    Bit depth                        : 8 bits
    Scan type                        : Progressive
    Bits/(Pixel*Frame)               : 0.140
    Stream size                      : 702 KiB (91%)
    Title                            : Core Media Video
    Encoded date                     : UTC 2011-06-22 15:58:25
    Tagged date                      : UTC 2011-06-22 15:58:34
    Color primaries                  : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M
    Transfer characteristics         : BT.709-5, BT.1361
    Matrix coefficients              : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M
    
  3. ==============================

    3.당신은 ffprobe를 사용할 수 있습니다. 다른 답변에서와 같이 어떤 그렙에 대한 필요 또는 기타 추가 프로세스, 또는 정규식 작업 출력을 구문 분석 없습니다.

    당신은 ffprobe를 사용할 수 있습니다. 다른 답변에서와 같이 어떤 그렙에 대한 필요 또는 기타 추가 프로세스, 또는 정규식 작업 출력을 구문 분석 없습니다.

    명령:

    ffprobe -loglevel error -select_streams v:0 -show_entries stream_tags=rotate -of default=nw=1:nk=1 input.mp4
    

    출력 예 :

    90
    

    명령:

    ffprobe -loglevel error -select_streams v:0 -show_entries side_data=rotation -of default=nw=1:nk=1 input.mp4
    

    출력 예 :

    -90
    

    명령:

    ffprobe -loglevel error -select_streams v:0 -show_entries side_data=displaymatrix -of default=nw=1:nk=1 input.mp4
    

    출력 예 :

    00000000:            0       65536           0
    00000001:       -65536           0           0
    00000002:     15728640           0  1073741824
    

    ffprobe의 출력은 여러 가지 방법으로 포맷 할 수 있습니다. 예를 들어, JSON :

    ffprobe -loglevel error -show_entries stream_tags=rotate -of json input.mp4
    {
        "streams": [
            {
                "tags": {
                    "rotate": "90"
                },
                "side_data_list": [
                    {
    
                    }
                ]
            }
        ]
    
  4. ==============================

    4.는 FFmpeg은이 .mov 파일에 대한 회전 값과 메타 데이터를보고합니다 :

    는 FFmpeg은이 .mov 파일에 대한 회전 값과 메타 데이터를보고합니다 :

    ffmpeg -i myrotatedMOV.mov
    

    ....

    Duration: 00:00:14.31, start: 0.000000, bitrate: 778 kb/s
        Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 480x360, 702 kb/s, 29.98 fps, 30 tbr, 600 tbn, 1200 tbc
        Metadata:
          rotate          : 180
          creation_time   : 2013-01-09 12:47:36
          handler_name    : Core Media Data Handler
        Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, s16, 62 kb/s
        Metadata:
          creation_time   : 2013-01-09 12:47:36
          handler_name    : Core Media Data Handler
    

    내 응용 프로그램에서 나는 파이썬에서 즉, 정규식으로 잡아 당깁니다 :

    import subprocess, re    
    cmd = 'ffmpeg -i %s' % pathtofile
    
    p = subprocess.Popen(
        cmd.split(" "),
        stderr = subprocess.PIPE,
        close_fds=True
    )
    stdout, stderr = p.communicate()
    
    reo_rotation = re.compile('rotate\s+:\s(?P<rotation>.*)')
    match_rotation = reo_rotation.search(stderr)
    rotation = match_rotation.groups()[0]
    

    저는는 FFmpeg 버전 1.0을 사용, 비디오, 아이폰 5에서 기록에만 몇 .movs의 넓은 범위이 시도하지 않았습니다. 그러나 지금까지 너무 좋아.

  5. ==============================

    5.유사 HdN8의 대답 @,하지만 파이썬 정규식없이이 :

    유사 HdN8의 대답 @,하지만 파이썬 정규식없이이 :

    $ ffprobe   -show_streams any.MOV  2>/dev/null  | grep rotate
    TAG:rotate=180
    

    또는 JSON :

    $ ffprobe -of json  -show_streams IMG_8738.MOV  2>/dev/null  | grep rotate
    "rotate": "180",
    

    아니면 JSON (또는 다른 출력 형식)을 분석 할 수 있습니다.

  6. ==============================

    6.나는 AVAssetExportSession, AVMutableComposition 및 입력 AVAssetTrack의 preferredTransform를 사용하여 iOS에서 추출했다. I는 대상의 크기를 채우도록 변환하여 변환 바람직 널링.

    나는 AVAssetExportSession, AVMutableComposition 및 입력 AVAssetTrack의 preferredTransform를 사용하여 iOS에서 추출했다. I는 대상의 크기를 채우도록 변환하여 변환 바람직 널링.

    파일로 보낸 후, 나는 내 레일 서버에 ASIHTTPRequest를 사용하여 업로드 및 클립을 사용하여 아마존 S3에 데이터를 전송합니다.

  7. from https://stackoverflow.com/questions/5287603/how-to-extract-orientation-information-from-videos by cc-by-sa and MIT license