IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python ffmpeg 使用 pyav 转换 一组图像 到 视频 -> 正文阅读

[人工智能]python ffmpeg 使用 pyav 转换 一组图像 到 视频

FFMPEG 命令行转换 一组JPG图像 到视频时,是将这组图像视为 MJPG 流。
我需要转换一组 PNG 图像到视频,FFMPEG 就不认了。

pyav内置了ffmpeg库,不需要系统带有ffmpeg工具

因此我使用 ffmpeg 的python包装 pyav写一个命令行工具,可以转换一组任意格式图像到视频,来解决这个问题。
视频尺寸为第一张图像的大小
编码方式为 crf 18
编码时间参考:i7-8750H 5分钟1080P 30FPS 视频,编码时间约为 30 分钟

requirement.txt

opencv-python
tqdm
av
click

使用方法
将以下代码,复制粘贴到一个文件内,命名为 convert_image_to_video.py
使用命令

python convert_image_to_video.py im_dir --out_file out.mkv

可以看到进度条,可以看到输出文件默认名字为 out.mkv
即使没有完成,也可以立刻使用播放器播放 out.mkv 文件观看成品质量。

import av
import cv2
from glob import glob
from tqdm import tqdm
import click


support_im_exts = ('.png', '.bmp', '.webp', '.jpg', '.jp2', '.jpeg')


@click.command()
@click.argument('in_dir',   type=str)
@click.option('--out_file', type=str,               default='out.mkv',  show_default=True, help='The out file name.')
@click.option('--fps',      type=click.IntRange(1), default=30,         show_default=True, help='Video FPS.')
def main(in_dir, out_file, fps=30):
    vcodec = 'libx264'

    if '*' not in in_dir:
        in_dir = f'{in_dir}/*.*'

    in_files = glob(in_dir, recursive=True)

    in_files = [f for f in in_files if f.endswith(support_im_exts)]
    in_files = sorted(in_files)

    container = av.open(out_file, mode="w")

    stream = container.add_stream(vcodec, rate=fps)

    stream.pix_fmt = "yuv420p"
    # stream.bit_rate = 10000*1000
    stream.options["crf"] = "18"
    stream.options["profile"] = "high"
    stream.options["tune"] = "ssim"
    stream.options["preset"] = "7"
    stream.options["high-tier"] = "1"
    stream.options["level"] = "5"
    stream.options["tier"] = "high"

    for f_i, file in enumerate(tqdm(in_files)):

        im = cv2.imread(file, 1)
        assert im is not None

        im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)

        if f_i == 0:
            stream.width = im.shape[1]
            stream.height = im.shape[0]

        frame = av.VideoFrame.from_ndarray(im, format="rgb24")
        for packet in stream.encode(frame):
            container.mux(packet)

    # Flush stream
    for packet in stream.encode():
        container.mux(packet)

    # Close the file
    container.close()


if __name__ == '__main__':
    main()

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:19:11  更:2022-05-05 11:20:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:31:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码