半自动ffmpeg视频分段切割,windows版
前言
事情的起因是这样的,原神开服也有一阵了。几乎所有剧情我都是开着录屏来玩的。现在剧情全推完了看了下录屏文件夹也录了180多G了所以想着就上传到百度盘吧。然后
........单文件有点大,然后想着用达芬奇切一下结果,达芬奇不支持mkv格式导入,淦!所以就想到了ffmpeg。但ffmpeg切割视频的命令是这样的
ffmpeg -ss start -i videoName -t duration -c:a copy -c:v copy seqName.mp4
start:开始时间
duration:持续时间
所以手动输入有点麻烦,就简单学习了一下批处理并用bat封装了一下.
正文
BAT常规命令
echo
向控制台打印 如echo hello world
它还有一些其他功能如 echo off正常批处理执行时都会在命令行显示当前执行的命令,echo off表示从该行起不再显示当前正在执行的命令。同理echo on与其功能相反
dir显示文件夹内容
cd切换目录
md创建目录
copy文件复制
cls清平
del文件删除
ren文件重命名
pause暂停
rem/::注释
:定义程序段,可用goto跳转到此,使用goto eof结束程序段
goto跳转
下面是本次处理会用到的命令
set
用于定义或为变量赋值,它有俩个可选参数
/a表示其后的参数将以数字形式操作例如set a=1+1 echo %a%将输出1+1set /a a=1+1 echo %a%将输出2
/p表示接收用户输入,将用户输入赋值给当前变量例如set /p a=请输入那么a的值就等于用户输入的数据
for
for循环有好几种形式,这里我介绍将要使用的一种形式
for %%i in (start,step,end) do (command)
%%i每次循环的索引值,start开始索引,step每次循环索引的步进,end结束索引,这里注意如果是在命令行中直接运行需要将%%i改写为%i。
当我们在编写某种编程语言经常会使用for并且for循环中会对外部变量做出更改,这里注意bat中不能直接访问外部变量,需要在for之前(一般在文件开头)加入setlocal enabledelayedexpansion并且在for循环内不再以%varName%作为取值依据应换为!varName!
ok,基础就到这里下面是bat源文件
bat源文件
@echo off
title 视频切割
setlocal enabledelayedexpansion
set /p videoName=输入视频名称:
set /p seqName=输入序列名:
set /p timelength=输入视频时长(单位秒):
set /p segcount=想分为多少段:
set /a segmentlength=(%timelength%+%segcount%-1)/%segcount%
set /a start=0
for /L %%i in (1,1,%segcount%) do (
ffmpeg -ss !start! -i %videoName% -t %segmentlength% -c:a copy -c:v copy !seqName!%%i.mp4
set /a start=!start!+!segmentlength!
)
pause
使用注意:需为ffmpeg配置环境变量
最后:
大幻梦森罗万象狂气断罪眼\ (•◡•) /

浙公网安备 33010602011771号