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


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

    🥰 博客首页: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文件夹是代码运行过程中,线稿图制作过程中产生的相应的文件。

    代码更改如下:

    1. lj = 'vedio/'
    2. file = 'bang.mp4'
    3. filename = file.split(".")[0]
    4. mp3_file = f'{filename}.mp3'
    5. if not os.path.exists('vedio'):
    6. os.mkdir('vedio')

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

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

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

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

    1. import os
    2. def deldir(dir):
    3. if not os.path.exists(dir):
    4. print('{}(路径)无内容'.format(dir))
    5. return
    6. if os.path.isfile(dir):
    7. os.remove(dir)
    8. return
    9. for i in os.listdir(dir):
    10. t = os.path.join(dir, i)
    11. if os.path.isdir(t):
    12. deldir(t)
    13. else:
    14. os.unlink(t)
    15. os.removedirs(dir)
    16. print('{}已删除'.format(dir))

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

    1. deldir('data/gougou')
    2. deldir('data/gougou_newpc')
    3. deldir('data/silence_dindin.mp4')
    4. deldir('data/dindin.mp3')
    5. deldir('data/dindin')
    6. # 删除不用的图片和视频
    7. deldir(path)
    8. # deldir(new_picture_path)
    9. deldir(file_name)

    三、视频亮度调暗

    1. from moviepy.editor import *
    2. clip = VideoFileClip(r"final_gougou1.mp4")
    3. clipColorx = clip.fx(vfx.colorx, 0.5)
    4. clipColorx.write_videofile(r"gougou2.mp4")

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

    四、对比度调整

    1. import moviepy.video.fx.lum_contrast
    2. from moviepy.editor import *
    3. # 对比度调整
    4. clip = VideoFileClip(r"vedio/gougou.mp4")
    5. a = moviepy.video.fx.lum_contrast.lum_contrast(clip, contrast=0.3, contrast_thr=127)
    6. a.write_videofile(r"gougou13.mp4")

    我们可以调整contrast参数

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

    这是lum_consrast()函数代码。

    五、全部代码展示

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

    1. import os
    2. import cv2
    3. from PIL import Image
    4. from PIL import ImageFilter
    5. import moviepy.editor as mp
    6. lj = 'vedio/'
    7. # TODO 更改文件名称
    8. file = '1.mp4'
    9. filename = file.split(".")[0]
    10. mp3_file = f'{filename}.mp3'
    11. if not os.path.exists('vedio'):
    12. os.mkdir('vedio')
    13. if not os.path.exists('data'):
    14. os.mkdir('data')
    15. path = os.path.join('data', filename)
    16. new_picture_path = os.path.join('data', filename + "_newpc")
    17. if not os.path.exists(path):
    18. os.mkdir(path)
    19. if not os.path.exists(new_picture_path):
    20. os.mkdir(new_picture_path)
    21. # 无声视频
    22. file_name = os.path.join('data', 'silence_' + file)
    23. cap = cv2.VideoCapture(lj + file)
    24. fps = int(cap.get(cv2.CAP_PROP_FPS))
    25. width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    26. height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    27. frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    28. print('fps:', fps, '\n', 'width:', width, '\n', 'height:', height, '\n', 'frames:', frames)
    29. for i in range(0, frames):
    30. flag, frame = cap.read()
    31. filename = path + '/{}.jpg'.format(str(i))
    32. print(filename)
    33. cv2.imwrite(filename, frame)
    34. # 音频提取
    35. def extract_audio():
    36. my_clip = mp.VideoFileClip(lj + file)
    37. my_clip.audio.write_audiofile('data/' + mp3_file)
    38. # 原图-线稿图转换
    39. def convert():
    40. for i in range(0, frames):
    41. '''细节'''
    42. square = Image.open(path + "/{}.jpg".format(i))
    43. square1 = square.filter(ImageFilter.DETAIL)
    44. '''轮廓'''
    45. square2 = square1.filter(ImageFilter.CONTOUR)
    46. square2.save(new_picture_path + "/{}.jpg".format(i))
    47. print(new_picture_path + "/{}.jpg".format(i))
    48. # 原图-线稿图转换(边缘增强)
    49. def convert_edge():
    50. for i in range(0, frames):
    51. square = Image.open(path + "/{}.jpg".format(i))
    52. square1 = square.filter(ImageFilter.EDGE_ENHANCE)
    53. '''轮廓'''
    54. square2 = square1.filter(ImageFilter.CONTOUR)
    55. square2.save(new_picture_path + "/{}.jpg".format(i))
    56. print(new_picture_path + "/{}.jpg".format(i))
    57. # 生成无声视频
    58. def picture_merge():
    59. size = (width, height)
    60. videowrite = cv2.VideoWriter(file_name, -1, fps, size)
    61. for i in range(0, frames):
    62. img = cv2.imread(new_picture_path + "/{}.jpg".format(i))
    63. videowrite.write(img)
    64. videowrite.release()
    65. print('end!')
    66. # 最终合成有声视频
    67. def final_merge():
    68. video = mp.VideoFileClip(file_name)
    69. audio = mp.AudioFileClip('data/' + mp3_file)
    70. video_merge = video.set_audio(audio)
    71. # todo 最终生成的带音频的视频
    72. b = file.split(".")[0]
    73. video_merge.write_videofile(lj + 'final_' + b + '.mp4')
    74. # 删除不要文件
    75. def deldir(dir):
    76. if not os.path.exists(dir):
    77. print('{}(路径)无内容'.format(dir))
    78. return
    79. if os.path.isfile(dir):
    80. os.remove(dir)
    81. return
    82. for i in os.listdir(dir):
    83. t = os.path.join(dir, i)
    84. if os.path.isdir(t):
    85. deldir(t)
    86. else:
    87. os.unlink(t)
    88. os.removedirs(dir)
    89. print('{}已删除'.format(dir))
    90. if __name__ == '__main__':
    91. extract_audio()
    92. convert()
    93. # convert_edge()
    94. picture_merge()
    95. final_merge()
    96. # 删除不用的图片和视频
    97. # deldir(path)
    98. # # deldir(new_picture_path)
    99. # deldir(file_name)

    六、总结

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

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

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

  • 相关阅读:
    Kotlin 开篇之基础语法篇
    工厂设计模式
    Lec08 Page faults笔记总结
    虚拟键盘MindFusion.Virtual Keyboard for WinForms 5.0.2
    基于Web的盾构机盾尾变形远程监测系统
    观成科技:证券行业加密业务安全风险监测与防御技术研究
    Mathorcup数学建模竞赛第四届-【妈妈杯】C题:家庭暑假旅游套餐的设计(附MATLAB代码)
    leetcode20. 有效的括号 [简单题]
    原型模式(prototype pattern)
    Electron桌面应用开发:从入门到发布全流程解析
  • 原文地址:https://blog.csdn.net/knighthood2001/article/details/126957085