Python opencv无法从索尼摄像机读取MP4文件

Python opencv无法从索尼摄像机读取MP4文件,python,opencv,video,ffmpeg,mp4,Python,Opencv,Video,Ffmpeg,Mp4,索尼摄像机以MP4格式录制视频。我正在读文件 import cv2 vid = cv2.VideoCapture('sample.MP4') 我的OpenCV版本是2.4.8,作为Python模块 sample.MP4的编解码器是H.264,线性PCM。 ffprobe sample.MP4 返回: > Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C0004.mp4': Metadata: > major_brand :

索尼摄像机以MP4格式录制视频。我正在读文件

import cv2
vid = cv2.VideoCapture('sample.MP4')
我的OpenCV版本是2.4.8,作为Python模块

sample.MP4的编解码器是H.264,线性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\u converted.MP4
要将sample.MP4转换为sample\u converted.MP4,此命令行不起作用。
命令
ffmpeg-I sample.MP4 sample\u converted.MP4
起作用;但是,它严重影响了视频质量。我使用了一个在线视频转换器:(它以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
显然,sample.MP4和sample.MP4的编码器、处理程序名称等是不同的有没有想过使用FFmpeg或OpenCV将此原始视频从摄像机转换为可读格式,而不影响视频质量?

命令:

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


通过将索尼摄像机的MP4视频文件转换为OpenCV可读的MP4文件进行进一步分析,这两种方法都可以实现。视频质量没有受到影响。

您是否尝试过
ffmpeg-i sample.MP4-c:v copy sample\u converted.MP4
?非常感谢,@inccv似乎与MP4品牌xavc有一些问题。再次感谢,@incBrain!它工作正常,视频质量丝毫不受影响。成功的关键是通过
-c:v copy
指定编解码器,这告诉ffmpeg不要对输出视频重新编码。输出视频文件的大小几乎与输入视频文件的大小相同。我还尝试了
avconv-I sample.MP4-c:v copy sample\u converted.MP4
,它也可以工作。视频质量也很好。我不能像以前那样执行“
avconv-I sample.MP4-c:a copy-c:v copy sample\u converted.MP4
”**有没有办法在保持质量的同时减少文件大小?**再次感谢!如果这解决了您的问题,您可以将您的评论作为答案发布。您可以尝试通过重新编码内容(可能使用HEVC或VP9)来减少文件化,认为重新编码不如原始内容的编码效率高。因此,如果你能访问原始视频,它会工作得更好。
ffmpeg -i sample.MP4 -c:v copy sample_converted.mp4