我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3多线程批量去除电视剧的片头

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3多线程批量去除电视剧的片头

简介

  • 下载的电视剧经常遇到片头和片尾,有的片头还有广告,比较厌烦,所以笔者就写了个脚本,使用python3,ffmpeg批量多线程去除了片头和片尾,这里针对的是单部多集电视剧的片头、片尾,片头片尾的时间比较相似
  • 针对多部多集的电视剧,可以通过excel,或者构建字典的方式解决。

    代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author:Aiker Zhao
@file:cut_media_all.py
@time:下午11:35
"""
import os
import re
import subprocess
from decimal import Decimal
from multiprocessing import Pool

path = r"/volume1/movie/201903/t1/"
new_path = r'/volume1/movie/201903/t2/'
if not os.path.exists(new_path):
    os.mkdir(new_path)
else:
    print(new_path + 'is ok!')

# 获取视频的 duration 时长 长 宽
def get_video_length(file):
    process = subprocess.Popen(['ffmpeg', '-i', file], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = process.communicate()
    print(stdout)
    pattern_duration = re.compile("Duration:\s(\d+?):(\d+?):(\d+\.\d+?),")
    pattern_size = re.compile(",\s(\d{3,4})x(\d{3,4}),")
    matches = re.search(pattern_duration, stdout.decode('utf-8'))
    size = re.search(pattern_size, stdout.decode('utf-8'))
    if size:
        size = size.groups()
        print(size)
    if matches:
        matches = matches.groups()
        print(matches)
        hours = Decimal(matches[0])
        minutes = Decimal(matches[1])
        seconds = Decimal(matches[2])  # 处理为十进制,避免小数点报错
        total = 0
        total += 60 * 60 * hours
        total += 60 * minutes
        total += seconds
        width = size[0]
        height = size[1]
        return {
            'total': total,
            'width': width,
            'height': height
        }

def cutVideo(startPoint, file, endPoint, newFile):
    command = ['ffmpeg', '-ss', startPoint, '-i', file, '-acodec', 'copy', '-vcodec', 'copy', '-t',
               endPoint, newFile]
    subprocess.call(command)

def millisecToAssFormat(t):  # 取时间
    s = t % 60
    m = t // 60
    if t < 3600:
        h = 00
    else:
        h = t // 3600
    return '%02d:%02d:%02d' % (h, m, s)

def main(file):
    # for file in os.listdir(path):
    #     print(file)
    videoInfo = get_video_length(file)  # 视频信息
    print(videoInfo)
    if videoInfo:
        duration = videoInfo.get('total')  # 时长 秒
        startPoint = 71  # 剪辑有片头片尾的视频 cut掉前71s后120s
        startPoint = millisecToAssFormat(startPoint)
        endPoint = duration - 120  # 120秒
        endPoint = millisecToAssFormat(endPoint)
        new_File = os.path.join(new_path, file)  # 创建生成的文件路径+文件名
        print(new_File, endPoint)
        cutVideo(startPoint, file, endPoint, new_File)

if __name__ == '__main__':
    # main()
    file = [file for file in os.listdir(path) if os.path.isfile(file) == True]
    pool = Pool()
    pool.map(main, file)
    pool.close()
    pool.join()

启动命令

  • 由于电视剧集数比较多,我这里使用了后台运行
nohup python cut_media_all.py > filelog.txt 2>&1 &
  • 多线程对帧处理
frame= 7888 fps=0.0 q=-1.0 size=   69120kB time=00:05:12.96 bitrate=1809.3kbits/s speed= 623x    
frame= 9849 fps=0.0 q=-1.0 size=   77312kB time=00:06:30.25 bitrate=1622.9kbits/s speed= 746x    
frame=18599 fps=18494 q=-1.0 size=  134656kB time=00:12:21.41 bitrate=1487.8kbits/s speed= 737x    
frame=19418 fps=16222 q=-1.0 size=  138752kB time=00:12:53.01 bitrate=1470.4kbits/s speed= 646x    
frame=23712 fps=15748 q=-1.0 size=  171008kB time=00:15:45.94 bitrate=1481.0kbits/s speed= 628x    
frame=26403 fps=15527 q=-1.0 size=  205312kB time=00:17:32.41 bitrate=1598.1kbits/s speed= 619x    
frame=32330 fps=16119 q=-1.0 size=  231168kB time=00:21:30.64 bitrate=1467.3kbits/s speed= 643x    
frame=35540 fps=11426 q=-1.0 size=  253696kB time=00:23:39.07 bitrate=1464.5kbits/s speed= 456x    
frame=33771 fps=10233 q=-1.0 size=  257792kB time=00:22:27.15 bitrate=1567.6kbits/s speed= 408x    
frame=53980 fps=14772 q=-1.0 size=  400896kB time=00:35:56.65 bitrate=1522.8kbits/s speed= 590x    
frame=47614 fps=12529 q=-1.0 size=  354816kB time=00:31:40.86 bitrate=1529.1kbits/s speed= 500x    
frame=63413 fps=15833 q=-1.0 Lsize=  491071kB time=00:42:13.99 bitrate=1587.6kbits/s speed= 633x    
  • 批量处理到指定的目录,通过预览已经看不到了片头
    python3多线程批量去除电视剧的片头片尾

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3多线程批量去除电视剧的片头

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python3多线程批量去除电视剧的片头

简介下载的电视剧经常遇到片头和片尾,有的片头还有广告,比较厌烦,所以笔者就写了个脚本,使用python3,ffmpeg批量多线程去除了片头和片尾,这里针对的是单部多集电视剧的片头、片尾,片头片尾的时间比较相似针对多部多集的电视剧,可以通过e
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录