草庐IT

线稿图视频制作补充(调整视频亮度、对比度;删除无用文件)

knighthood2001 2023-04-14 原文

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

目录

一、整合视频

二、删除无用文件(视频帧图片)

三、视频亮度调暗

四、对比度调整

五、全部代码展示

六、总结


之前内容(建议看一下) 

这年头还不来尝试线稿图视频??https://blog.csdn.net/knighthood2001/article/details/126175764?spm=1001.2014.3001.5502线稿图视频制作--从此短视频平台不缺上传视频了https://blog.csdn.net/knighthood2001/article/details/126912547?spm=1001.2014.3001.5502

一、整合视频

        目前文件夹比较清晰vedio文件夹中是经过线稿图转换前后的视频,data文件夹是代码运行过程中,线稿图制作过程中产生的相应的文件。

代码更改如下:

lj = 'vedio/'
file = 'bang.mp4'
filename = file.split(".")[0]
mp3_file = f'{filename}.mp3'

if not os.path.exists('vedio'):
    os.mkdir('vedio')

  lj表示路径(/别忘了),

cap = cv2.VideoCapture(lj + file)
# 音频提取
def extract_audio():
    my_clip = mp.VideoFileClip(lj + file)
    my_clip.audio.write_audiofile('data/' + mp3_file)
    video_merge.write_videofile(lj + 'final_' + b + '.mp4')

 读取视频、音频提取和最终视频合成的时候,需要多这个路径。

二、删除无用文件(视频帧图片)

import os
def deldir(dir):
    if not os.path.exists(dir):
        print('{}(路径)无内容'.format(dir))
        return
    if os.path.isfile(dir):
        os.remove(dir)
        return
    for i in os.listdir(dir):
        t = os.path.join(dir, i)
        if os.path.isdir(t):
            deldir(t)
        else:
            os.unlink(t)
    os.removedirs(dir)
    print('{}已删除'.format(dir))

构建一个这样的函数,从而把不需要的文件删除,后续只需要调用即可

deldir('data/gougou')
deldir('data/gougou_newpc')
deldir('data/silence_dindin.mp4')
deldir('data/dindin.mp3')
deldir('data/dindin')
# 删除不用的图片和视频
deldir(path)
# deldir(new_picture_path)
deldir(file_name)

三、视频亮度调暗

from moviepy.editor import *

clip = VideoFileClip(r"final_gougou1.mp4")
clipColorx = clip.fx(vfx.colorx, 0.5)
clipColorx.write_videofile(r"gougou2.mp4")

首先传入视频,如何更改上面的参数(0.5可以换成其他的,当它小于1,表示调暗,大于1表示调亮),最后将亮度变化的视频保存即可。

四、对比度调整

import moviepy.video.fx.lum_contrast
from moviepy.editor import *

# 对比度调整
clip = VideoFileClip(r"vedio/gougou.mp4")
a = moviepy.video.fx.lum_contrast.lum_contrast(clip, contrast=0.3, contrast_thr=127)
a.write_videofile(r"gougou13.mp4")

我们可以调整contrast参数

def lum_contrast(clip, lum = 0, contrast=0, contrast_thr=127):
    """ luminosity-contrast correction of a clip """
    """剪辑的亮度对比度校正"""
    
    def fl_image(im):
        im = 1.0*im # float conversion
        corrected = im + lum + contrast*(im-float(contrast_thr))
        corrected[corrected < 0] = 0
        corrected[corrected > 255] = 255
        return corrected.astype('uint8')
    
    return clip.fl_image(fl_image)

这是lum_consrast()函数代码。

五、全部代码展示

        注意:调整视频亮度、对比度不在代码里面

import os
import cv2
from PIL import Image
from PIL import ImageFilter
import moviepy.editor as mp

lj = 'vedio/'
# TODO 更改文件名称
file = '1.mp4'
filename = file.split(".")[0]
mp3_file = f'{filename}.mp3'

if not os.path.exists('vedio'):
    os.mkdir('vedio')
if not os.path.exists('data'):
    os.mkdir('data')
path = os.path.join('data', filename)
new_picture_path = os.path.join('data', filename + "_newpc")
if not os.path.exists(path):
    os.mkdir(path)
if not os.path.exists(new_picture_path):
    os.mkdir(new_picture_path)
# 无声视频
file_name = os.path.join('data', 'silence_' + file)

cap = cv2.VideoCapture(lj + file)
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print('fps:', fps, '\n', 'width:', width, '\n', 'height:', height, '\n', 'frames:', frames)

for i in range(0, frames):
    flag, frame = cap.read()
    filename = path + '/{}.jpg'.format(str(i))
    print(filename)
    cv2.imwrite(filename, frame)

# 音频提取
def extract_audio():
    my_clip = mp.VideoFileClip(lj + file)
    my_clip.audio.write_audiofile('data/' + mp3_file)

# 原图-线稿图转换
def convert():
    for i in range(0, frames):
        '''细节'''
        square = Image.open(path + "/{}.jpg".format(i))
        square1 = square.filter(ImageFilter.DETAIL)
        '''轮廓'''
        square2 = square1.filter(ImageFilter.CONTOUR)
        square2.save(new_picture_path + "/{}.jpg".format(i))
        print(new_picture_path + "/{}.jpg".format(i))

# 原图-线稿图转换(边缘增强)
def convert_edge():
    for i in range(0, frames):
        square = Image.open(path + "/{}.jpg".format(i))
        square1 = square.filter(ImageFilter.EDGE_ENHANCE)
        '''轮廓'''
        square2 = square1.filter(ImageFilter.CONTOUR)
        square2.save(new_picture_path + "/{}.jpg".format(i))
        print(new_picture_path + "/{}.jpg".format(i))

# 生成无声视频
def picture_merge():
    size = (width, height)
    videowrite = cv2.VideoWriter(file_name, -1, fps, size)
    for i in range(0, frames):
        img = cv2.imread(new_picture_path + "/{}.jpg".format(i))
        videowrite.write(img)
    videowrite.release()
    print('end!')

# 最终合成有声视频
def final_merge():
    video = mp.VideoFileClip(file_name)
    audio = mp.AudioFileClip('data/' + mp3_file)
    video_merge = video.set_audio(audio)
    # todo 最终生成的带音频的视频
    b = file.split(".")[0]
    video_merge.write_videofile(lj + 'final_' + b + '.mp4')

# 删除不要文件
def deldir(dir):
    if not os.path.exists(dir):
        print('{}(路径)无内容'.format(dir))
        return
    if os.path.isfile(dir):
        os.remove(dir)
        return
    for i in os.listdir(dir):
        t = os.path.join(dir, i)
        if os.path.isdir(t):
            deldir(t)
        else:
            os.unlink(t)
    os.removedirs(dir)
    print('{}已删除'.format(dir))

if __name__ == '__main__':
    extract_audio()
    convert()
    # convert_edge()
    picture_merge()
    final_merge()
    # 删除不用的图片和视频
    # deldir(path)
    # # deldir(new_picture_path)
    # deldir(file_name)

六、总结

        线稿图视频制作到目前应该就算完结了。感兴趣的可以去试试。

        笔者源代码也发了,希望能支持一下,给个关注!!

        👀赶紧来刷题学习,巩固基础吧👀

有关线稿图视频制作补充(调整视频亮度、对比度;删除无用文件)的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  3. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  4. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  5. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  6. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  7. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  8. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  9. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  10. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

随机推荐