当前位置: 首页 > news >正文

我在命令行下剪辑视频

是的,你不需要格式工厂,你也不需要会声会影,更不需要爱剪辑这些莫名其妙的流氓软件,命令行下视频处理,包括剪辑,转码,提取,合成,缩放,字幕,特效等等,全部命令行搞定,这不是疯狂,而是效率:

MP4 转换 GIF

很多社区可以发 MP4,但对桌面录屏这种十多二十秒的小短片远远没有 GIF 来的便捷,GIF 在很多软件里支持的也比 MP4 要广泛,转换命令为:

ffmpeg -i in.mp4 -an -c:v gif out.gif

参数 -i 的指明输入文件 “in.mp4” ,-an 代表禁用音频,-c:v 的意思是指定视频编码为 gif,最后是输出文件名。

那么效率在哪里呢? 别急,我们写完善点,做个脚本:video_convert_to_gif.cmd

@echo off
if "%1" == "" goto HELPset "IN=%1"
set "OUT=%~dpn1.gif"if "%2" == "" goto NEXT
set "OUT=%2"
:NEXTcall ffmpeg -i "%IN%" -an -c:v gif "%OUT%"
pause
goto END:HELP
echo usage: video_convert_to_gif ^<input^> [^<output^>]
:END
echo.

将上面的脚本完善一下,保存成名为 video_convert_to_gif.cmd 的脚本:

每次要使用的时候,直接把任何格式的视频文件拖到这个脚本上面去,同级目录下就有了一个 gif 文件了,比你格式工厂修改一半天点点点来的高效多了。

转换为 MP4

最简单写法:

ffmpeg -i in.wmv -c:v libx264 -c:a aac out.mp4

前面输入可以是任意格式的视频文件,用 -c:v 指定视频编码器是 libx264,用 c:a 指定音频编码器是 aac,然后输出 mp4,考虑到某些安卓机可能无法正确播放,完善下:

ffmpeg -i in.wmv -c:v libx264 -c:a aac -pix_fmt yuv420p -vf ^"scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

在 Windows 的 Bat 文件里,^ 符号代表换行继续,这里针对部分安卓机只能播放 yuv420 的像素格式的问题,做了一些处理,并且把长宽设置为偶数,否则无法使用 yuv420 格式,完善一下,写成脚本:

@echo off
if "%1" == "" goto HELPset "IN=%1"
set "OUT=%~dpn1.mp4"if "%2" == "" goto NEXT
set "OUT=%2"
:NEXTcall ffmpeg -i "%IN%" -c:v libx264 -c:a aac ^-pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ^"%OUT%"
pause
goto END:HELP
echo usage: video_convert_to_mp4 ^<input^> [^<output^>]
:END
echo.

保存成 video_convert_to_mp4.cmd 用法和上面相同,也是鼠标拖上去就行了。

转换 H.265

和转换 264 类似:

ffmpeg -i in.mp4 -c:v libx265 -c:a aac ^-pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ^out.x265.mp4

脚本文件可以照葫芦画瓢,头两行最后用了 ^ 符号,代表命令在下一行继续。

GIF 转换 MP4

上面有了 MP4 到 GIF,反过来的话,需要做一些处理,添加一段空白音频,不然有些软件或者网站可能出问题:

ffmpeg -f lavfi -i anullsrc -i in.gif -c:v libx264 -c:a aac -shortest ^-pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

这里用了 anullsrc 代表空的音频输入,同时加了一个 -shortest 代表多个输入取时间最短的那个,一样照葫芦画瓢做一个脚本文件封装一下即可。

MP4 分离音频

将 MP4 的音频分离出来,保存成 mp3 也是比较常见的用法:

@echo off
if "%1" == "" goto HELPset "IN=%1"
set "OUT=%~dpn1.mp3"if "%2" == "" goto NEXT
set "OUT=%2"
:NEXTcall ffmpeg -i "%IN%" -vn -c:a mp3 -ar 48000 -ac 2 "%OUT%"pausegoto END
:HELP
echo usage: video_extract_audio ^<input^> [^<output^>]
:END
echo.

保存成 video_extract_audio.cmd 把文件拖上去即可转换。

这里 -vn 的意思是禁用视频,-c:a 指定编码为 mp3,-ar 的意思是指定音频采样率为 48000,同时 -ac 的意思是声道数量。

视频裁剪

直接上脚本:

@echo off
if "%3" == "" goto HELP
set "IN=%1"
set "OUT=%~dpn1_clip%~x1"if "%4" == "" goto NEXT
set "OUT=%4"
:NEXTcall ffmpeg -i "%IN%" -ss "%2" -to "%3" -c:a copy -c:v copy "%OUT%"
pause
goto END:HELP
echo usage: video_clip ^<input^> ^<from ^(00:00:00.000^)^> ^<to ^(00:10:00.000^)^> [^<output^>]
:END
echo.

指定输入文件,然后从几分几秒到积分几秒即可:

video_clip in.mp4  00:00:00  00:00:10 out.mp4

即可剪辑头 10 秒钟的视频保存成 out.mp4

视频合并

将两段视频合并成一段:

@echo off
if "%2" == "" goto HELPset "IN1=%1"
set "IN2=%2"
set "OUT=%~dpn1_%~dpn2_merged.%~x1"if "%3" == "" goto NEXT
set "OUT=%3"
:NEXTcall ffmpeg -i "%IN1%" -i "%IN2%" ^-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" ^-map "[outv]" -map "[outa]" "%OUT%"
pausegoto END
:HELP
echo usage: video_concat ^<input1^> ^<input2^> [^<output^>]
:END
echo.
区域裁剪

将视频里的一个矩形截取出来,保存成一个新的视频:

@echo off
if "%5" == "" goto HELPset "IN=%1"
set "OUT=%~dpn1_crop%~x1"if "%6" == "" goto NEXT
set "OUT=%6"
:NEXTcall ffmpeg -i "%IN%" -filter:v "crop=%4:%5:%2:%3" "%OUT%"
pausegoto END
:HELP
echo usage: video_crop ^<input^> ^<x^> ^<y^> ^<w^> ^<h^> [^<output^>]
:END
echo.

这样输入源视频和矩形区域坐标和长宽即可裁剪。

更多用法

欢迎使用 ffmpeg 命令速查表:

  • FFMPEG 命令速查表

附赠:我自己写好的一堆脚本

地址:

  • github.com/skywind3000/vim

相关文章:

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…...

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…...

流场主动流动控制

对于流场的主动控制而言&#xff0c;其难点主要集中在强化学习的环境搭建过程&#xff0c;如何建立数值仿真与强化学习的信息交互是研究过程中的拦路虎。经过几个星期的研究&#xff0c;已基本实现由pycharm程序数据端向star ccm端的数据传递。其主要过程包括如下过程&#xff…...

BOOST电感选型(参数详细计算)

上一篇文章我们介绍了BUCK电路中电感的计算与选型&#xff0c;与BUCK类似&#xff0c;这篇来介绍下BOOST BOOST电路原理简析 上图是一个异步BOOST电路拓扑图&#xff0c;我们先来简单回忆一下它是如何工作的&#xff1a; 1.Q闭合&#xff0c;Vin为Rload供电&#xff0c;Vin为L…...

EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于opencv答题卡识别判卷】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【G…...

Elasticsearch分词器基础安装

简介 Elasticsearch (ES) 是一个基于 Lucene 的搜索引擎&#xff0c;分词器是其核心组件之一&#xff0c;负责对文本数据进行分析和处理。 1. 文本分析 分词器将输入的文本拆分成一个个单独的词&#xff08;tokens&#xff09;&#xff0c;以便后续的索引和搜索。例如&#x…...

Django-邮件发送

邮件相关协议&#xff1a; SMTP&#xff08;负责发送&#xff09;&#xff1a; IMAP&#xff08;负责收邮件&#xff09;&#xff1a; POP3&#xff08;负责收邮件&#xff09;: 两者区别&#xff1a; Django发邮件&#xff1a; 邮箱相关配置&#xff1a; settings中&…...

SchooWeb2--基于课堂学习到的知识点2

SchoolWeb2 form表单input控件中各type中value值含义 默认值 text password hidden 提交给服务器的值 select option radio属性的name含义 name值相同表示是同一组单选框中的内容 script的位置 head标签 在head中使用script可以保证在页面加载时进行加载&#xff…...

Android.mk 写法

目录放在odm/bundled_uninstall_back-app/VantronMdm/VantronMdm.apk LOCAL_PATH : $(my-dir) include $(CLEAR_VARS) LOCAL_MODULE : VantronMdm LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_PATH : $(TARGET_OUT_ODM)/bundled_uninstall_back-app LOCAL_SRC_FILES : $(LOCAL_M…...

精通Javascript 函数式array.forEach的8个案例

JavaScript是当今流行语言中对函数式编程支持最好的编程语言。我们继续构建函数式编程的基础&#xff0c;在前文中分解介绍了帮助我们组织思维的四种方法&#xff0c;分别为&#xff1a; array.reduce方法 帮你精通JS&#xff1a;神奇的array.reduce方法的10个案例 array.map方…...

忘记无线网络密码的几种解决办法

排名由简单到复杂 1网线直连&#xff1b; 2查看密码备份文件&#xff1b; 3问人要密码&#xff1b; 4已连接无线设备生成二维码扫描即可上网&#xff1b; 5路由器有wps功能&#xff0c;设备输入pin码可上网&#xff1b; 6已连接电脑右键wifi名&#xff0c;选择属性&#xff0c;…...

git add你真的用明白了吗?你还在无脑git add .?进入暂存区啥意思?

git add 命令用于将文件的改动添加到暂存区&#xff08;staging area&#xff09;&#xff0c;为下一次提交做好准备。简单来说&#xff0c;它标记了哪些文件或改动会被纳入下次 git commit 中。以下是 git add 的作用和使用场景&#xff1a; 1. 作用 git add 将指定文件或文…...

Vue-Route

一、相关理解 1. vue-router的理解 vue的一个插件库&#xff0c;专门用来实现SPA应用 2. 对SPA应用的理解 单页Web应用整个应用只有一个完整的页面点击页面中的导航链接不会刷新页面&#xff0c;只会做页面的局部更新数据需要通过ajax请求获取 3. 路由的理解 什么是路由 …...

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…...

芯片上音频相关的验证

通常芯片设计公司&#xff08;比如QUALCOMM&#xff09;把芯片设计好后交由芯片制造商&#xff08;比如台积电&#xff09;去生产&#xff0c;俗称流片。芯片设计公司由ASIC部门负责设计芯片。ASIC设计的芯片只有经过充分的验证&#xff08;这里说的验证是FPGA&#xff08;现场…...

【C/C++】函数的递归

1.什么是递归&#xff1f; 递归就是递推和回归&#xff0c;以数学函数f(x) x为例&#xff1a; 递推&#xff1a;f(x) f(x - 1) 1 ; f(x - 1) f(x - 2) 1 ; f(x - 2) …… 回归&#xff1a;……; f(x - 2) f(x - 1) 1 ; f(x - 1) f(x) 1; 可以看出&#xff0c; 递推和…...

《链表篇》---两两交换链表中的节点(中等)

题目传送门 1.定义一个虚拟节点链接链表 2.定义一个当前节点指向虚拟节点 3.在当前节点的下一个节点和下下一个节点都不为null的情况下。 定义 node1和node2。保存当前节点后面两个节点的地址。cur.next node2;node1.next node2.next;node2.next node1;cur node1; 4.返回re…...

Fakelocation 步道乐跑(Root真机篇)

前言:需要 Fakelocation&#xff0c;真机Root,步道乐跑&#xff0c;Dia&#xff0c;MT管理器系统需求 Fakelocation | MT管理器 | Dia | 环境模块 任务一 真机Root&#xff08;德尔塔&#xff0c;过momo&#xff0c;刷环境模块&#xff09; 任务二 前往Dia查看包名&#xff08…...

PyEcharts | 全局配置项中初始配置项和区域缩放配置项的使用

全局配置项可通过set_global_opts方法设置 一个图像主要的内容 引入包 from pyecharts.charts import Bar,Line from pyecharts import options as opts from pyecharts.faker import Faker from pyecharts.globals import ThemeType,RenderTypefrom pyecharts.globals imp…...

突破语言壁垒:Cohere 发布多语言大模型 Aya Expanse

前沿科技速递&#x1f680; 在多语言大模型领域&#xff0c;Cohere 再次迎来了突破&#xff01;10月24日&#xff0c;Cohere的研究实验室 Cohere For AI 正式发布了最新的多语言AI模型家族 —— Aya Expanse。该系列模型开放了8B和32B参数两个版本,为全球AI爱好者带来了崭新的多…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...