python 使用ffmpeg对指定格式的视频进行切片 并输出ts和m3u8文件

python 使用ffmpeg对指定格式的视频进行切片 并输出ts和m3u8文件

举例:原来的视频都是mp4格式的 需要给它切片 还要输出一帧图片 然后视频得切片 生成索引文件到指定位置

代码:

import os
import logging
from ffmpy import FFmpeg
import random
import string
import json
logger = logging.getLogger(__name__)


class Trans(object):

    def __init__(self):
        self.base = r'E:\output_movie'


    #手动创建文件夹'E:\sywj'  用来存放m3u8文件
    #找出下面带mp4的文件 输出路径  类似这种 E:\种子\URVRSP-052\URVRSP-052-C.mp4
    def findAllFile(self, base):
        for root, ds, fs in os.walk(self.base):
            for f in fs:
                if f.endswith('.mp4'):
                    fullname = os.path.join(root, f)
                    print(fullname)
                    yield fullname


    #遍历出base下面的文件 返回一条视频路径
    def video_path_input(self):

        for video_path in self.findAllFile(self.base):
            video_path = video_path.replace('\\', '/')
       
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用ffmpeg查看视频时间和编码信息并转码ts切成m3u8的示例代码: ```php use think\facade\Filesystem; // 视频文件路径 $videoPath = '/path/to/video.mp4'; // 获取视频时长和编码信息 $cmd = "ffmpeg -i $videoPath 2>&1"; exec($cmd, $output); $duration = 0; $codec = ''; foreach ($output as $line) { if (preg_match('/Duration: ([\d:\.]+),/', $line, $matches)) { $duration = strtotime("1970-01-01 $matches[1] UTC"); } if (preg_match('/Video: (.+?),/', $line, $matches)) { $codec = $matches[1]; } } // 转码ts并切成m3u8 $dirPath = '/path/to/output'; Filesystem::mkdir($dirPath); $outputPath = $dirPath . '/output.m3u8'; $cmd = "ffmpeg -i $videoPath -codec:v $codec -map 0 -f segment -segment_list $outputPath -segment_time 10 $dirPath/%03d.ts"; exec($cmd); ``` 首先,我们使用`ffmpeg`命令获取视频的时长和编码信息。在命令中,`-i`参数表示输入文件,`2>&1`表示将标准错误输出重定向到标准输出。然后通过正则表达式解析输出内容获取时长和编码信息。 接着,我们使用`ffmpeg`命令将视频转码成ts格式,并将其切成长度为10秒的小段。`-codec:v`参数表示选择视频编码器,`-map 0`参数表示将所有流映射到输出,`-f segment`参数表示使用分段输出,`-segment_list`参数表示输出m3u8文件路径,`-segment_time`参数表示每个小段的时长,`%03d.ts`表示小段文件名的格式。 最后,我们使用`Filesystem`组件创建输出目录,然后执行`ffmpeg`命令将视频转码并切成小段,输出m3u8文件ts小段文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值