使用imageio packag将mp4视频转换为avi视频

2024-03-29 14:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python imageio包将.mp4视频转换为.avi视频,保持fps和大小不变。以下是我的代码:

import imageio

src_dir = "my/source/video.mp4"
dst_dir = "my/dst/video.avi"

reader = imageio.get_reader(src_dir)
fps = reader.get_meta_data()['fps']
writer = imageio.get_writer(dst_dir, fps=fps)

for im in reader:
    writer.append_data(im[:, :, :])
writer.close()

我成功地做到了。 但是,我发现video.mp4是27.1MB,而{}只有3.70MB。 然后我用cv2来做同样的事情:

^{pr2}$

这次我得到了一个video_1.avi,它是65.6MB。
我的问题:

  1. 这两种方法有什么不同,为什么video.avi(使用imageio方法)这么小
  2. 使用video.avi(使用imageio方法)而不是使用video_1.avi(使用cv2方法)训练3D-CNN有什么问题吗?在

补充
以下是我的视频文件的信息:

lichenyang@lichenyang-All-Series:~/chalearn2014/script$ file video.mp4
video.mp4: ISO Media, MPEG v4 system, version 2
lichenyang@lichenyang-All-Series:~/chalearn2014/script$ file video.avi
video.avi: RIFF (little-endian) data, AVI, 640 x 480, 20.00 fps, video: H.264 X.264 or H.264
lichenyang@lichenyang-All-Series:~/chalearn2014/script$ file video_1.avi
video_1.avi: RIFF (little-endian) data, AVI, 640 x 480, 20.00 fps, video: Motion JPEG

Tags: 方法datagetvideodirmballreader
1条回答
网友
1楼 · 发布于 2024-03-29 14:26:35

我测试了两种方法,发现两种方法都缺少所有的声音。在

  1. 我通过file命令找到区别:

    在山姆@山姆:~/code/python$文件视频.avi在

    在视频.avi:RIFF(little-endian)数据,AVI,480 x 368,25.00 fps,视频:H.264 x.264或H.264

    在山姆@山姆:~/code/python$file video_1.avi

    video_1.avi:RIFF(little endian)数据,avi,480 x 360,25.00 fps,视频:Motion JPEG

    在山姆@山姆:~/code/python$

  2. 我觉得所有的avi视频都足够好了。我没发现任何问题。你可以试试看,和我们分享更多的信息。

顺便说一下,由于Opencv3.2,我需要更改第二个代码:

#!/usr/bin/env python
# encoding: utf-8

import cv2

src_dir = "1.mp4"
dst_dir = "2.avi"

video_cap = cv2.VideoCapture(src_dir)
#fps = video_cap.get(cv2.cv.CV_CAP_PROP_FPS)
#cv2.cv會出現錯誤:AttributeError: 'module' object has no attribute 'cv'
#在Opencv3.2中cv2.CV_CAP_PROP_FPS需要改為cv2.CAP_PROP_FPS
#也就是都要去掉CV_字眼
fps = video_cap.get(cv2.CAP_PROP_FPS)
size = (int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH)),   
        int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))  
#video_writer = cv2.VideoWriter_fourcc(dst_dir, cv2.FOURCC('M', 'J', 'P', 'G'), fps, size) 
video_writer = cv2.VideoWriter(dst_dir, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size) 

success, frame = video_cap.read()
while success:
    video_writer.write(frame)
    success, frame = video_cap.read()

相关问题 更多 >