截取视频 截取mp4 视频缩放

目录

视频缩放保存

ffmpeg按帧截取视频,画质会降低:

[截取视频 按帧截取mp4](#截取视频 按帧截取mp4)


视频缩放保存

python 复制代码
import glob
import os
import random

import cv2
import imageio
import numpy as np


def video_small(video_path, output_dir):

    video_name = os.path.basename(video_path)
    out_path =output_dir+'/'+video_name
    cap = cv2.VideoCapture(video_path)

    # 获取帧率和分辨率
    fps = cap.get(cv2.CAP_PROP_FPS)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 创建 imageio 的写入器
    writer = imageio.get_writer(out_path, fps=fps)

    frame_id = 0
    while True:
        ret, image = cap.read()
        if not ret:
            break

        if np.prod(image.shape[:2]) > 1000 * 1500:
            x_scale = np.sqrt(1000 * 1500 / np.prod(image.shape[:2]))
            image = cv2.resize(image, None, fx=x_scale, fy=x_scale, interpolation=cv2.INTER_AREA)

        # OpenCV 是 BGR,imageio 需要 RGB
        frame_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        writer.append_data(frame_rgb)

        frame_id += 1

    cap.release()
    writer.close()

if __name__ == '__main__':

    base_dir=r"C:\Users\Administrator\Videos\yundong"
    to_dir = r"C:\Users\Administrator\Videos\yundong_s"
    os.makedirs(to_dir, exist_ok=True)
    file_list=glob.glob(os.path.join(base_dir,"*.mp4"))

    for video_path in file_list:
        print('start',video_path)
        video_small(video_path, to_dir)

ffmpeg按帧截取视频,画质会降低:

ffmpeg -i 5s.mp4 -vf "select='gte(n,18)',setpts=N/FRAME_RATE/TB" -c:v libx264 -crf 18 -preset veryslow -c:a copy output.mp4

截取视频 按帧截取mp4

python 复制代码
import random

import cv2
import imageio

# 打开原始视频
video_path = r"E:\data\tiaosheng\0706\5s.mp4"

out_path=r"E:\data\tiaosheng\0706\output.mp4"
cap = cv2.VideoCapture(video_path)

# 获取帧率和分辨率
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

# 创建 imageio 的写入器
writer = imageio.get_writer(out_path, fps=fps)

frame_id = 0
while True:
    ret, frame = cap.read()
    if not ret:
        break

    if frame_id >= 18:
        # OpenCV 是 BGR,imageio 需要 RGB
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        writer.append_data(frame_rgb)

    frame_id += 1

cap.release()
writer.close()
相关推荐
小柯南敲键盘10 小时前
跨马翻译:跨境电商批量图片翻译与视频字幕一站式工具
人工智能·python·音视频
weixin_4462608512 小时前
AVA-Encoder:面向智能体原生视频表征学习框架
学习·音视频
cdprinter12 小时前
信刻——留置谈话音视频数据集中自动刻录归档解决方案
自动化·音视频
美狐美颜sdk14 小时前
直播APP开发技术架构解析:从音视频流到第三方美颜SDK接入的完整方案
大数据·人工智能·音视频·美颜sdk·美颜api
阿童木写作15 小时前
跨境电商图片翻译工具推荐:跨马翻译批量处理视频字幕与抠图
python·音视频
奈斯先生Vector16 小时前
AI 视频不是会动的图片:用 Shot Contract、时间码与音画质检构建可交付流水线
人工智能·重构·架构·prompt·aigc·音视频
ai产品老杨16 小时前
AI视频分析并发优化参数配置说明
人工智能·音视频
怪奇云呼军16 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
DogDaoDao17 小时前
MSU 2026 视频编解码大赛放榜深度解读
音视频·视频编解码·hevc·av1·h266·msu·avs
caimouse18 小时前
ReactOS 图形系统分析(2):视频端口驱动 videoprt.sys
音视频