【问题标题】:opencv cannot read MP4 file from sony camcorderopencv 无法从索尼摄像机读取 MP4 文件
【发布时间】:2016-10-06 16:05:07
【问题描述】:

索尼摄像机以 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_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

很明显,sample.MP4 和 sample_converted.mp4 的编码器、handler_names 等是不同的。 任何想法使用 FFmpeg 或 OpenCV 将此原始视频从摄像机转换为可读格式而不影响视频质量?

【问题讨论】:

  • 你试过ffmpeg -i sample.MP4 -c:v copy sample_converted.mp4吗?
  • 好像opencv对MP4品牌xavc有些问题。
  • 再次感谢@incBrain!它可以正常工作,并且视频质量根本不会受到影响。成功的关键是通过-c:v copy指定编解码器,它告诉ffmpeg不要重新编码输出视频。输出视频文件与输入视频文件的大小几乎相同。我也试过avconv -i sample.MP4 -c:v copy sample_converted.mp4,它也可以。视频质量也相当不错。我不能像以前尝试过的那样做'avconv -i sample.MP4 -c:a copy -c:v copy sample_converted.mp4。 **有没有办法同时保持质量和减小文件大小? ** 再次感谢!
  • 如果这解决了您的问题,您实际上可以发布您的评论作为答案。您可以尝试通过重新编码内容(可能使用 HEVC 或 VP9)来进一步减小文件大小,考虑到重新编码不如编码原始内容那么有效。因此,如果您可以访问原始视频,效果会更好。

标签: python opencv video ffmpeg mp4


【解决方案1】:

命令:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多