2016-06-06 3 views
2

Сони видеокамера записала видео в формате MP4. Я читаю файл поopencv не может читать файл MP4 от sony camcorder

import cv2 
vid = cv2.VideoCapture('sample.MP4') 

мой OpenCV версия 2.4.8, как модуль Python.

Код кодека «sample.MP4» - H.264, Linear PCM.

ffprobe sample.MP4 

возвращается:

> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C0004.mp4': Metadata: 
>  major_brand  : XAVC 
>  minor_version : 16785407 
>  compatible_brands: XAVCmp42iso2 
>  creation_time : 2016-06-06 13:41:51 Duration: 00:00:15.02, start: 0.000000, bitrate: 50439 kb/s 
>  Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p(tv, bt709/bt709/iec61966-2-4), 1920x1080 [SAR 1:1 DAR 16:9], 
> 48655 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default) 
>  Metadata: 
>  creation_time : 2016-06-06 13:41:51 
>  handler_name : Video Media Handler 
>  encoder   : AVC Coding 
>  Stream #0:1(und): Audio: pcm_s16be (twos/0x736F7774), 48000 Hz, 2 channels, s16, 1536 kb/s (default) 
>  Metadata: 
>  creation_time : 2016-06-06 13:41:51 
>  handler_name : Sound Media Handler 
>  Stream #0:2(und): Data: none (rtmd/0x646D7472), 245 kb/s (default) 
>  Metadata: 
>  creation_time : 2016-06-06 13:41:51 
>  handler_name : Timed Metadata Media Handler 
> Unsupported codec with id 0 for input stream 2 

кажется, что кодек для h.264 отсутствует. Версия моего FFmpeg - 3.0.

Я попробовал avconv -i sample.MP4 -c:a copy -c:v copy sample_converted.mp4, чтобы преобразовать sample.MP4 в sample_converted.mp4, эта командная строка не работала. Команда ffmpeg -i sample.mp4 sample_converted.mp4 сработало; однако он скомпрометировал качество видео. Я использовал онлайн-конвертер: http://www.online-convert.com/ (который выводит видео с хорошим качеством в формате mp4, но имеет ограничение по размеру для бесплатных пользователей) для преобразования MP4 в mp4, команда в терминале, как показано ниже :

ffprobe 'sample_converted.mp4' 

возвращает

> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C0001_converted.mp4': 
> Metadata: 
>  major_brand  : isom 
>  minor_version : 512 
>  compatible_brands: isomiso2avc1mp41 
>  encoder   : Lavf57.36.100 Duration: 00:00:02.02, start: 0.000000, bitrate: 16777 kb/s 
>  Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1/0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 16801 kb/s, 59.94 
> fps, 59.94 tbr, 60k tbn, 119.88 tbc (default) 
>  Metadata: 
>  handler_name : VideoHandler 
>  Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default) 
>  Metadata: 
>  handler_name : SoundHandler 

Очевидно, что кодеры, handler_names и т.д. из sample.MP4 и sample_converted.mp4 различны. Любая идея с использованием FFmpeg или OpenCV для преобразования этого необработанного видео с видеокамеры в читаемый формат без ущерба для качества видео?

+1

Вы попробовали 'ffmpeg -i образец.MP4 -c: v copy sample_converted.mp4'? – incBrain

+0

Большое спасибо, @inc – Jundong

+0

похоже, что opencv имеет некоторую проблему с маркой xavc MP4. – incBrain

ответ

1

Команды:

avconv -i sample.MP4 -c:v copy sample_converted.mp4 

и

ffmpeg -i sample.MP4 -c:v copy sample_converted.mp4 

оба работают, путем преобразования MP4 видео файл из Sony видеокамеры, в MP4 файл читаемом для OpenCV для дальнейшего анализа. Качество видео не скомпрометировано.