FFmpeg命令行使用小结

文章目录

  • 前言
  • 一、视频
    • 1.1 修改格式转码
    • 1.2 截取片段
    • 1.3 合并多个视频
    • 1.4 裁剪区域
    • 1.5 修改分辨率
    • 1.6 翻转视频
    • 1.7 调整速度
    • 1.8 多个视频拼接
    • 1.9 添加字幕
    • 1.10 修改文件封面
    • 1.11 添加文字水印
    • 1.12 制作画中画
    • 1.13 音视频混合/分离
    • 1.14 视频直播推流
    • 1.15 m3u8切片
  • 二、音频
    • 2.1 视频提取音频
    • 2.2 修改格式转码
    • 2.3 裁剪音频
    • 2.4 合并音频
    • 2.5 调整音量
    • 2.6 调整速度
    • 2.7 采样率
    • 2.8 音频降噪
  • 参考

前言

FFmpeg 是一个强大的开源多媒体框架,被广泛应用于视频编辑、视频转码、流媒体处理、视频直播等领域。

FFmpeg 包含了一系列的库和工具,用于处理和操作音视频文件。这些库包括音视频编解码器、格式转换器、滤镜、封装器等,可以处理几乎所有常见的音视频格式.

  • 源码 github 地址:https://github.com/FFmpeg/FFmpeg
  • release windows 版本 :https://www.gyan.dev/ffmpeg/builds/#release-builds

ffmpeg 相关命令行语法如下:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... 

一、视频

1.1 修改格式转码

# 将mp4格式转化为avi格式
ffmpeg -i input.mp4 output.avi# 转码不清晰,指定比特率
ffmpeg -i input.mp4 -b:v 20000k output.mp4

1.2 截取片段

# 从时间2分钟往后截取30秒
ffmpeg -ss 00:02:00 -t 30 -i input.mp4 -c:v copy -c:a copy  output1.mp4# 从时间2分钟往后截取到2分30秒
ffmpeg -ss 00:02:00 -to 00:02:30 -i input.mp4 -c:v copy -c:a copy  output2.mp4

上述命令实际测试会发现多 1s,可通过减一秒实现

1.3 合并多个视频

# 第一种,先转化为ts,再合并
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy -bsf:a aac_adtstoasc output.mp4# 第二种, 建一个文件file.txt,内容如下,包含所要合并视频文件名字,注意,每行要以file起始
# file input1.mp4
# file input2.mp4
ffmpeg -f concat -i file.txt -c copy output.mp4# 上述两种是相同码率分辨率的视频
# 第三种,分辨率如果不同,可用-filter_complex实现
# 下面就是将两个输入文件的视频流分辨率都转为1024x576,然后合并
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]scale=1024:576:force_original_aspect_ratio=1[v0]; [1:v]scale=1024:576:force_original_aspect_ratio=1[v1]; [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map [v] -map [a] output.mp4# 可去掉音频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]" -map "[outv]" -strict -2 output.mp4
# [0:v] 和 [1:v] 是视频流的输入标签,表示要连接的第一个和第二个视频文件。
# concat=n=2:v=1:a=0[outv] 部分定义了连接的方式:n 表示输入的文件数,v=1表示1个输出视频流,a=0表示0个输出音频流,[outv] 是输出标签。
# -map "[outv]" 用于将输出的视频流映射到输出文件。
# -strict -2 用于确保兼容性。

1.4 裁剪区域

# 截图将第20s截取为1张352x240的jpg
ffmpeg -ss 20 -i input1.mp4 -y -f image2 -t 0.001  -s 352x240 output.jpg# 截取第一帧
ffmpeg -i input1.mp4 -y -f image2 -frames 1 cover_1f.jpg# 裁剪部分区域视频
ffmpeg -i input1.mp4 -filter:v "crop=w=500:h=500:x=12:y=34" output.mp4# 抖动裁剪
ffmpeg -i input1.mp4 -filter:v "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" output.mp4

1.5 修改分辨率

# 转化视频分辨率为960x540
ffmpeg -i input1.mp4 -vf scale=960:540 output.mp4# 转化为缩略图大小分辨率
ffmpeg -i input1.mp4 -vf scale=qcif output.mp4# 长宽都缩小一半
ffmpeg -i input1.mp4 -vf scale=w=iw/2:h=ih/2 output.mp4

1.6 翻转视频

# 水平翻转
ffmpeg -i input1.mp4 -vf "hflip" output.mp4# 垂直翻转
ffmpeg -i input1.mp4 -vf "vflip" output.mp4

1.7 调整速度

# 视频加速,2倍速,音频也实现加速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4# 减速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4

1.8 多个视频拼接

# 将视频横向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex hstack output.mp4
# 竖向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex vstack output.mp4# 四宫格
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scale=960:540 [s1]; [1:v]scale=960:540 [s2]; [2:v]scale=960:540 [s3]; [3:v]scale=960:540 [s4]; [s1][s2]hstack[top]; [s3][s4]hstack[bottom]; [top][bottom]vstack" output.mp4

1.9 添加字幕

# 内嵌字幕
ffmpeg -i input1.mp4 -i subtitle.ass -c copy -c:s mov_text output.mp4
ffmpeg -i input1.mp4 -vf "ass=subtitle.ass" output.mp4

1.10 修改文件封面

# 给视频文件添加封面
ffmpeg -i input1.mp4 -i qizai.jpg -map 1 -map 0 -c copy -disposition:0 attached_pic output.mp4

1.11 添加文字水印

# 文字水印,中文需要指定字体文件
ffmpeg -i input1.mp4 -vf "drawtext=text='中文水印':x=10:y=10:fontsize=24:fontcolor=white:fontfile=msyh.ttc" output.mp4

1.12 制作画中画

# 实现视频添加视频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[1:v]scale=320:240 [pip]; [0:v][pip]overlay=W-w-20:y=H-h-10" output.mp4# 左上角添加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=20:10" output.mp4# 右下角加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=W-w-20:H-h-10" output.mp4

1.13 音视频混合/分离

# 混合音频和视频
ffmpeg -i input.mp4 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mp4# 分离音视频
ffmpeg -i input1.mp4 -vn output.mp3
ffmpeg -i input1.mp4 -an output.mp4

1.14 视频直播推流

# rtmp为推流地址
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "${rtmp}"

1.15 m3u8切片

# mp4转m3u8
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
# m3u8转mp4
ffmpeg -i output.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4

二、音频

2.1 视频提取音频

# 提取音频
ffmpeg -i input1.mp4 -vn -map 0:a:0 -c:a libmp3lame -q:a 2 output.mp3

2.2 修改格式转码

# 将wav转为mp3
ffmpeg -i input.wav input.mp3

2.3 裁剪音频

# 和视频类似,裁剪
ffmpeg -ss 00:00:10 -i input.mp3 -t 10 output.mp3

2.4 合并音频

# 合并音频
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3

2.5 调整音量

# 将音量变为2倍
ffmpeg -i input.mp3 -vn -af "volume=2.0" output.mp3# 减少6分贝
ffmpeg -i input.mp3 -vn -af "volume=-6dB" output.mp3

2.6 调整速度

# 2倍速
ffmpeg -i input.mp3 -filter:a "atempo=2.0" -vn output.mp3

2.7 采样率

# 修改音频采样率
ffmpeg -i input.mp3 -ar 44100  output.mp3

2.8 音频降噪

# 过滤掉200hz及以下频率和过滤掉3000hz及以上频率
ffmpeg -i 1.wav -af "highpass=f=200, lowpass=f=3000"  output.mp3
ffmpeg -i 1.wav -af "highpass=200,lowpass=3000,afftdn" output.mp3

参考

  1. http://ffmpeg.org/ffmpeg.html
  2. https://ffmpeg.org/ffmpeg-filters.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 最核心的 25 个注解

1、SpringBootApplication 这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。 其实这个注解就是 SpringBootConfiguration、EnableAutoConfiguration、Componen…

分析实现HarmonyOS中的Linux内核架构模式

在当今的科技领域,操作系统是各种智能设备运行的关键所在。而在这方面,华为的鸿蒙系统备受瞩目。那么,鸿蒙系统技术架构是怎样的呢?本文将为您揭开这一神秘面纱。 首先,我们需要了解鸿蒙系统的基本架构。鸿蒙系统采用…

mysql中除了InnoDB以外的其它存储引擎

参考资料:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html MyISAM存储引擎 https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html MyISAM 存储引擎是基于比较老的ISAM存储引擎(ISAM已经不再可用)&#xff…

shell编程系列(11)-使用grep查找文本

文章目录 前言grep的使用根据关键字查找反向查找 结语 前言 grep命令也是我们在日常使用linux,编写shell脚本中会用到的一个高频命令,grep主要是帮助我们查找我们想要的内容,类似于我们在office word里面的 Ctrl f 查找功能,但是…

SLURM资源调度管理系统REST API服务配置,基于slurm22.05.9,centos9stream默认版本

前面给大家将了一下slurm集群的简单配置,这里给大家再提升一下,配置slurm服务的restful的api,这样大家可以将slurm服务通过api整合到桌面或者网页端,通过桌面或者网页界面进行管理。 1、SLURM集群配置 这里请大家参考&#xff1…

使用C语言创建高性能爬虫ip网络

之前写的python和GO语言的爬虫ip池的文章引起很大反响,这次我将以C语言来创建爬虫IP池,但是因为其复杂性,可能代码并非完美。但是最终也达到的想要的效果。 因为在C语言中创建代理IP池可能会比较复杂,且C语言并没有像Python那样的…

07-原型模式-C语言实现

原型模式: Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.(用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。 ) UML图&#xff1…

关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记

写在前面 工作中遇到,简单整理记忆博文为官方文档整理涉及内置准入控制的分类理解理解不足小伙伴帮忙指正 人活着就是为了忍受摧残,一直到死,想明了这一点,一切事情都能泰然处之 —— 王小波《黄金时代》 为什么需要准入控制器 准…

非得让你会之MyBatis插件与Java动态代理

引言 咱们今天聊聊Java动态代理,这东西在开发中真的太常见了。比如Spring AOP、RPC,它们都离不开动态代理。然后,咱们再来说说MyBatis插件,这可是MyBatis框架中的一个超实用的功能,它就像是给MyBatis加了个“超能力”…

『测试基础』| 如何理解测试用例管理和缺陷管理?

『测试管理攻略』| 如何理解测试用例管理和缺陷管理? 1 测试用例定义2 测试用例设计原则3 测试用例的评审4 测试如何维护?5 用例的作用6 用例管理工具7 缺陷关注的重点8 缺陷分析9 缺陷管理工具 1 测试用例定义 测试用例(TestCase&#xff0…

西南科技大学(数据结构A)期末自测练习四

一、填空题(每空1分,共10分) 1、树最适合用来表示( C ) A.有序数据元素 B.无序数据元素 C.元素之间具有层次关系的数据 D.元素之间具有多对多关系的数据 2、根据二叉树的定义可知二叉树共有( B)种不同的基本形态…

react 面试题 50题 大公司常问的面试

1. 请解释 React 是什么以及它的主要特点。 2. 请解释 React 中的虚拟 DOM(Virtual DOM)以及它的工作原理。 3. 请解释 React 中的组件(Components)以及它们如何工作。 4. 请解释 React 中的生命周期方法(Lifecycle Me…

Zabbix监控openstack系统资源

一、简介 随着信息技术的不断发展,作为基础平台,封闭架构带来不兼容性,无法支持异构虚拟机系统,也难以支撑开放合作的产业链需求。随着云计算时代的来临,虚拟化管理平台向开放平台架构转变,多种厂家的虚拟机可以在开放的平台架构下共存,不同的应用厂商可以基于开放…

12.1平衡树(splay),旋转操作及代码

平衡树 变量定义 tot表示结点数量,rt表示根的编号 v[i]表示结点i的权值 fa[i]表示结点i的父亲节点 chi[i][2]表示结点i的左右孩子 cnt[i]表示结点i的权值存在数量,如1123,v[3]1,则cnt[3]2;就是说i3的三号结点的权值为1&…

备忘录模式-C++实现

备忘录是一种行为型设计模式,它允许在不破坏封装性的前提下捕获和恢复一个对象的内部状态。它将对象的内部状态保存到备忘录对象中,并在需要的时候从备忘录中取出恢复状态,实现了状态的保存和恢复。 备忘录有以下三个角色: 1、发…

Mybatis-Plus条件构造器Wrapper

常用的两种条件构造器分别是 QueryWrapper 和 LambdaQueryWrapper QueryWrapper Autowiredprivate StudentMapper studentMapper;Testpublic void test() {//条件分页查询学生,性别为2(代表女),年龄大于等于12的学生QueryWrapper&…

树和二叉树的基本概念和堆的实现

树的概念及结构 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1.有一个特殊的结点&#…

04-配置远程仓库的SSH免密登陆

配置SSH免密登录 配置步骤 创建好的远程仓库也可以使用SSH的方式进行访问,但如果没有配置公钥会有警告 第一步: 删除用户家目录下的.ssh目录,如果没有该目录或者该目录下已经有密钥了就不用执行该操作 #进入当前用户的家目录,删除.ssh 目录 LayneLAPTOP-Layne MINGW64 ~ $ r…

python datetime 获取特定一天的后一天或者后几天

这里写自定义目录标题 1 获取特定天的时间对象 具体时间格式参考:Python time strptime()和strftime()-CSDN博客 import datetimetimer datetime.datetime.strptime(date, "%Y-%m-%d")2 获取下一天或者【下x天】的数据并进行格式转换 # 下一天数据 ne…

基于SpringBoot+Vue的前后端分离的房屋租赁系统2

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 开发过程中&#xff0…