半自动ffmpeg视频分段切割,windows版

2020-12-14  本文已影响0人  小艾咪

前言

事情的起因是这样的,原神开服也有一阵了。几乎所有剧情我都是开着录屏来玩的。现在剧情全推完了看了下录屏文件夹也录了180多G了所以想着就上传到百度盘吧。然后

屏幕截图 2020-12-14 142109.png

........单文件有点大,然后想着用达芬奇切一下结果,达芬奇不支持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配置环境变量

最后:


大幻梦森罗万象狂气断罪眼\ (•◡•) /

上一篇下一篇

猜你喜欢

热点阅读