python ffmpeg 使用 pyav 转换 一组图像 到 视频

这篇具有很好参考价值的文章主要介绍了python ffmpeg 使用 pyav 转换 一组图像 到 视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2022/8/4 更新
支持加入水印
水印必须包含透明图像,并且水印图像大小要等于原图像的大小

python convert_image_to_video.py -f 30 -m watermark.png im_dir out.mkv

2022/6/21 更新
让命令行参数更加易用
新的命令行使用方法

python convert_image_to_video.py -f 30 im_dir out.mkv

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

python convert_image_to_video.py -f 30 im_dir out.mkv

可以看到进度条,可以看到输出文件默认名字为 out.mkv
即使没有完成,也可以立刻使用播放器播放 out.mkv 文件观看成品质量。文章来源地址https://www.toymoban.com/news/detail-433579.html

import av
import numpy as np
import cv2
from glob import glob
from tqdm import tqdm
import click


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


def blend(im, wm_color, wm_alpha):
    im = im * (1-wm_alpha) + wm_color * wm_alpha
    im = np.uint8(np.clip(np.round(im), 0, 255))
    return im


@click.command()
@click.argument('in-dir',   type=str)
@click.argument('out-file', type=str)
@click.option('-f', '--fps', type=click.IntRange(1), default=30, show_default=True, help='Video FPS.')
@click.option('-m', '--watermark', type=str, default=None, show_default=True, help='watermark file.')
def main(in_dir, out_file, fps=30, watermark=None):
    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)

    if watermark is not None:
        buf = open(watermark, 'rb').read()
        buf = np.frombuffer(buf, dtype=np.uint8)
        wm = cv2.imdecode(buf, -1)
        assert wm is not None
        assert wm.ndim == 3 and wm.shape[-1] == 4
        wm = cv2.cvtColor(wm, cv2.COLOR_BGRA2RGBA)
    else:
        wm = None

    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"

    wm_color = None
    wm_alpha = None

    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]
            if wm is not None:
                wm = cv2.resize(wm, tuple(im.shape[:2][::-1]), interpolation=cv2.INTER_LINEAR)
                wm_color = wm[..., :3]
                wm_alpha = np.float32(wm[..., 3:4]) / 255.


        if wm is not None:
            im = blend(im, wm_color, wm_alpha)

        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()

到了这里,关于python ffmpeg 使用 pyav 转换 一组图像 到 视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python的pyAV读取H265(HEVC)编码的视频文件

            利用海康威视相机拍出来的视频是H265格式的,相比于常规的H264编码,压缩率更高,但因此如果直接用之前的方法读取,会出现无法读取的情况,如下。         可以看到,对于帧间没有改变的部分,H265编码就只保存一份,因此直接解析出来就都是空白的,只

    2024年02月22日
    浏览(52)
  • Java工程使用ffmpeg进行音视频格式转换(ws.schild)

    JAVE (Java Audio Video Encoder)是一个纯Java的音视频编码器和解码器库,它是基于FFmpeg。JAVE库提供了一些简单易用的API,用于音频和视频格式的转换、编码、解码等操作。它对于一些基本的音视频处理任务来说是一个不错的选择。 这些库都是基于FFmpeg的,并允许在Java中处理音频和

    2024年02月14日
    浏览(98)
  • 【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )

    音视频 文件 从 采样 - 处理 - 得到原始数据帧队列 - 音视频编码 - 音视频包队列 - 格式封装 的过程如下 : 封装格式 参考 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装

    2024年04月17日
    浏览(85)
  • python使用ffmpeg来制作音频格式转换工具(优化版)

    简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3.12.0 模块:

    2024年02月06日
    浏览(45)
  • FFMPEG视频压缩与Python使用方法

    FFMPEG  是一个完整的,跨平台的解决方案,记录,转换和流音频和视频。 官网:https://ffmpeg.org/ 1、Linux: 2、Mac: 3、Windows:  下载文件:  解压缩:  配置环境变量:   出现上图所示response即可说明成功安装。 1、指定视频压缩大小: -fs 10 : 表示文件大小最大值为 100MB 2、设置

    2024年02月07日
    浏览(48)
  • python使用ffmpeg合并多张图片成视频

    注意: 需要在本地有ffmpeg,并且配置环境变量 下载链接如下:https://download.csdn.net/download/qq_30273575/87898080 # FFmpeg 将多张图片合成视频 # 可以使用 FFmpeg 库来将多张图片合成视频,下面是一个简单的示例: # 在代码中,需要提供存储图片的文件夹路径 images_path 和最终生成的视频

    2024年02月11日
    浏览(50)
  • 【FFmpeg】视频与图片互相转换 ( 视频与 JPG 静态图片互相转换 | 视频与 GIF 动态图片互相转换 )

    执行 命令 , 将 输入文件 input.mp4 中的 第 2 秒 开始的 1 帧数据 转为一张 848x480 像素的图片 , 输出到 output.jpg 文件中 ; 上述命令解析 : -i input.mp4 : 指定输入文件为 input.mp4 , -i 参数用于设置输入文件 ; -y : 设置 如果输出文件已存在 , 直接覆盖 , 如果不设置该选项 , 会中断执行

    2024年04月23日
    浏览(48)
  • ffmpeg 将视频帧转换成jpg、png等图片

    有时播放实时流的时候有截图的需求,需要将解码出来的图片保存本地或上传服务器,这时就需要将avframe中的数据编码成png、jpg等格式的图片,我们使用ffmpeg的相关编码器就可以实现功能。 首先需要查找图片编码器,比如jpg为AV_CODEC_ID_MJPEG,png为AV_CODEC_ID_PNG 示例代码: 有了

    2024年02月02日
    浏览(43)
  • 使用 ffmpeg-python+命名管道进行图片转视频或推流

    命名管道(Named Pipe),也被称为FIFO,是一种在UNIX、Linux和类Unix系统中用于实现进程间通信(IPC)的机制。在Python中,我们可以使用 os 模块来创建和操作命名管道。 命名管道实际上是个特殊的文件,需要先创建 读写前后需要打开关闭 ffmpeg从命名管道输入源的方法与普通文件

    2024年04月16日
    浏览(39)
  • Python视频编辑神器:全面分析ffmpeg-python库的安装与使用方法

    Python视频编辑神器:全面分析ffmpeg-python库的安装与使用方法 在Python中进行视频编辑是一件令人兴奋的事情,它能够让你深入了解和控制你想要的任何一帧视频。而在Python视频编辑工具中,ffmpeg-python库可以说是至关重要的一员。它能够让你轻松地处理视频、音频等多媒体数据

    2024年02月10日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包