FFmpeg视频处理
目录
1. Ubuntu(wsl)安装 ffmpeg
2. ffmpeg查看指令
3. ffmpeg查看媒体文件信息
4. ffmpeg基础操作指令
5. ffmpeg视频抽帧
5.1 基于时间抽取帧
5.2 两种抽帧方式
5.3 视频流抽帧
5.4 视频批量抽帧
6. ffmpeg更改视频播放速度
7. ffmpeg视频格式转换
8. ffmpeg视频裁剪
9. ffmpeg图片转视频
10. ffmpeg更改视频分辨率
11. ffmpeg视频旋转
12. ffmpeg视频转码及压缩
13. ffmpeg合并多个视频
1. Ubuntu(wsl)安装 ffmpeg
更新源:sudo apt update
添加源:sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
安装ffmpeg:sudo apt-get install ffmpeg
查看版本:ffmpeg -version
2. ffmpeg查看指令
查看ffmpeg支持的编码器:ffmpeg configure -encoders
查看ffmpeg支持的解码器:ffmpeg configure -decoders
查看ffmpeg支持的通信协议:ffmpeg configure -protocols
查看ffmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议等:ffmpeg configure --help
查看ffmpeg的支持格式的列表:ffmpeg -formats
获取ffmpeg使用帮助:man ffmpeg
3. ffmpeg查看媒体文件信息
ffmpeg -i video_file.mp4 # 查看视频文件信息
ffmpeg -i audio_file.mp3 # 查看音频文件信息
# 使用 -hide_banner 隐藏掉与文件无关的信息(ffmpeg本身的信息)
ffmpeg -i video_file.mp4 -hide_banner
ffmpeg -i audio_file.mp3 -hide_banner
4. ffmpeg基础操作指令
- 查看视频总帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 test.mp4
- 视频中抽取音频,直接加一个 -vn 参数就可以
ffmpeg -i video.mp4 -vn audio.mp3
- 使用 -an 来获得纯视频 , -an 标记会让所有的音频参数无效
ffmpeg -i video_input.mp4 -an -video_output.mp4
- jpg转换成png,其它格式转换同理
ffmpeg -i ./images/img%5d.jpg ./images_new/img%5d.png
-
设置视频的屏幕高宽比,使用 -aspect 标志设置一个视频文件的屏幕高宽比。通常使用高宽比:16:9,4:3,16:10,5:4,2:21:1,2:35:1,2:39:1
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
5. ffmpeg视频抽帧
5.1 基于时间抽取帧
- 参数说明:-ss 设定起始抽帧时间,语法:hh:mm:ss;-t 表示抽帧持续时间,单位为秒;-vframes 指定抽取的帧数
ffmpeg -i test.mp4 -r 1 -ss 00:00:05 -f image2 img_%05d.jpeg
ffmpeg -i test.mp4 -r 1 -ss 00:00:05 -vframes 5 -f image2 img_%05d.jpeg
ffmpeg -i test.mp4 -r 1 -t 4 -f image2 img_%05d.jpeg
- input seeking。input seeking使用的是key frames,所以速度很快;参数说明:-frame:v 5,在video stream上截取5帧。
ffmpeg -ss 00:00:05 -i test.mp4 -frames:v 5 img_%05d.jpg
- output seeking。output seeking是逐帧decode,直到1分05秒,所以速度很慢
ffmpeg -i test.mp4 -ss 00:00:05 -frames:v 5 img_%05d.jpg
5.2 两种抽帧方式
- 方法一,该抽帧方式画质较好。参数说明:-i 输入文件,源文件;-f 指定保存图片使用的格式;image2 图像解析模式; img%05d.jpg 格式化输出图片;-vf:设置过滤器;fps=fps=1/5 表示5s抽一帧,fps=fps=5 表示1s抽5帧
ffmpeg -i /data/test.mp4 -f image2 -vf fps=fps=1/5 -qscale:v 2 /data/img%05d.jpg
- 方法二,该抽帧方式画质稍差。 参数说明:-r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量;1代表每秒抽取一帧,5表示一秒抽5张,1/5表示5秒抽一张。
ffmpeg -i test.mp4 -r 1 -f image2 img%05d.jpeg
5.3 视频流抽帧
-
rtsp流抽帧。参数说明:-y :如果提示文件已经存在,自动执行y,对已存在文件进行覆盖;-f image2:以图片格式保存;-r 1:帧数,每秒截取一帧,-r 1/5 表示每5秒抽取一帧;img%03d.jpg 格式化命名,会生成img001.jpg,img002.jpg
ffmpeg -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/1 img%03d.jpg
-
rtsp流抽帧,tcp协议推流需要加上: -rtsp_transport tcp
ffmpeg -rtsp_transport tcp -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/5 img%03d.jpg
-
直接保存RTMP视频流到本地
ffmpeg -i rtmp://live.hkstv.hk.lxdns.com/live/hks -c copy ./test1.flv
-
直接保存RTSP视频流到本地。参数说明:-vcodec copy 表示不重新编码,在格式未改
ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -vcodec copy -acodec copy ./rtsp1.flv
5.4 视频批量抽帧
- 视频文件目录
- videos
- 1.mp4
- 2.mp4
- ………
- videos_imgs
- 为空(脚本会以视频文件名自动创建文件夹,并保存抽帧图像)
- bash frame.bash
- videos
- 批量抽帧shell脚本 frame.bash
#!/usr/bin/env bashvideos_root=./videos
save_root=./videos_imgs/
for video in $videos_root/*;
doecho $videosave_dir=$save_root$(basename $video)if [ ! -d $save_dir ];thenmkdir $save_dirfiffmpeg -i $video -f image2 -vf fps=fps=1/5 -qscale:v 2 $save_dir/img%05d.jpg
done
6. ffmpeg更改视频播放速度
-
双倍视频播放速度
ffmpeg -i test.mp4 -vf "setpts=0.5*PTS" result.mp4
-
四倍视频播放速度
ffmpeg -i test.mp4 -an -r 50 -filter:v "setpts=0.25*PTS" result.mp4
-
降低视频播放速度,使用一个大于 1 的倍数
ffmpeg -i test.mp4 -vf "setpts=4.0*PTS" output.mp4
7. ffmpeg视频格式转换
-
转换mp4文件到avi文件
ffmpeg -i test.mp4 output.avi
-
转换flv格式视频为mpeg格式
ffmpeg -i video.flv video.mpeg
-
同时指定多个输出后缀,输出多个文件
ffmpeg -i audio_input.wav audio_output_1.mp3 audio_output_2.ogg
-
维持源视频文件的质量,使用-qscale 0 参数
ffmpeg -i test.mp4 -qscale 0 output.flv
-
转换所给定视频input.mp4文件的开始 10 秒到视频 .avi 格式
ffmpeg -i input.mp4 -t 10 output.avi
8. ffmpeg视频裁剪
- 基于时间进行视频裁剪。参数说明:开始时间 (-ss HH:MM:SS), 持续秒数 (-t duration), 结束时间 (-to HH:MM:SS), 和开始秒数 (-s duration)
ffmpeg -i input_audio.mp3 -ss 00:01:14 output_audio.mp3
ffmpeg -i input_audio.wav -ss 00:00:30 -t 10 output_audio.wav
ffmpeg -i input_video.h264 -ss 00:01:30 -to 00:01:40 output_video.h264
ffmpeg -i input_audio.ogg -ss 5 output_audio.ogg
ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
- 裁剪视频文件为多个部分。参数说明:-t 00:00:30 表示从视频的开始到视频的第 30 秒创建一部分视频;-ss 00:00:30 为视频的下一部分显示开始时间戳。表示第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾
ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
- 基于宽高进行裁剪。参数说明:input.mp4 – 源视频文件;-filter:v – 表示视频过滤器;crop – 表示裁剪过滤器(w – 源视频中裁剪的矩形的宽度,h – 矩形的高度;x – 源视频中裁剪的矩形的 x 坐标 ;y – 矩形的 y 坐标
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
# 想要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频;剪切视频将影响质量
ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
9. ffmpeg图片转视频
-
规则图片名称转视频。参数说明:-r 25 表示每秒播放25帧;-b 200k 指定码率为200k;将`img00001.jpg’, `img00002.jpg'这种顺序排列的图片文件转制作为视频
ffmpeg -f image2 -i ./images/img%05d.jpg ./result.mp4
ffmpeg -f image2 -i './images/img%05d.jpg' -vcodec libx264 -r 25 -b 200k result.mp4
-
不规则图片名称转视频。参数说明:-framerate 10:视频帧率;-pattern_type glob:Glob pattern 模糊匹配;-f image2pipe:图像管道,模糊匹配得到图片名称
ffmpeg -framerate 10 -pattern_type glob -i './images/*.jpg' out.mp4
cat ./images/*.jpg | ffmpeg -f image2pipe -i - output.mp4
10. ffmpeg更改视频分辨率
-
设置一个视频文件为指定的分辨率
# 使用 -c:a 来保证音频编码是正确的
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
# 参数说明:-s 表示设置目标视频文件的分辨率,将设置所给定视频文件的分辨率到 1280×720
ffmpeg -i test.mp4 -s 1280:720 -c:a copy output.mp4
11. ffmpeg视频旋转
-
将视频顺时针旋转90°
ffmpeg -i test.mp4 -c copy -metadata:s:v:0 rotate=90 result.mp4
ffmpeg -i input.avi -vf "rotate=90*PI/180"
-
上下颠倒视频(翻转了180°)
ffmpeg -i input.mp4 -vf "rotate=PI"
12. ffmpeg视频转码及压缩
-
MPEG4编码转成H264编码
ffmpeg -i data.mp4 -strict -2 -vcodec h264 output.mp4
-
H264编码转成MPEG4编码
ffmpeg -i data.mp4 -strict -2 -vcodec mpeg4 output.mp4
-
视频裁剪转码及压缩。-crf 参数 (恒定质量因子). 较小的crf 意味着较大的码率,同时使用 libx264 编码器也有助于减小文件体积
ffmpeg -i data.mp4 -ss 00:03 -to 10:08 -c:v libx264 -crf 30 result.mp4
ffmpeg -i video_input.mp4 -c:v libx264 -crf 28 video_output.mp4
# 压缩视频文件,减小视频文件的大小,将损失视频质量。如果 24 太有侵略性,可以降低 -crf 值到或更低值
ffmpeg -i test.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
13. ffmpeg合并多个视频
# 创建包含想接合文件的准确的路径的 join.txt。所有的文件都应该是相同的格式(相同的编码格式)。
# 所有文件的路径应该逐个列出,例如:
file /home/myvideos/part1.mp4
file /home/myvideos/part2.mp4
file /home/myvideos/part3.mp4
file /home/myvideos/part4.mp4
ffmpeg -f concat -i join.txt -c copy output.mp4
#若出现错误join.txt: Operation not permitted,添加-safe 0
ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
相关文章:
FFmpeg视频处理
目录 1. Ubuntu(wsl)安装 ffmpeg 2. ffmpeg查看指令 3. ffmpeg查看媒体文件信息 4. ffmpeg基础操作指令 5. ffmpeg视频抽帧 5.1 基于时间抽取帧 5.2 两种抽帧方式 5.3 视频流抽帧 5.4 视频批量抽帧 6. ffmpeg更改视频播放速度 7. ffmpeg视频格…...
FreeRTOS任务通知 | FreeRTOS十二
目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …...
CentOS搭建博客typecho
Ubuntu搭建博客typecho_Dyansts的博客-CSDN博客 见过这样的文章展示页面吗? 详细视频安装教程: 9分钟快速搭建typecho博客,让你不再烦恼_哔哩哔哩_bilibili 现在就把他搭建出来 展示页面:Hello World 其他的插件:…...
湖南中创教育PMP如何实施风险应对,避免产生投诉
一、评估风险 评估风险影响的直接或间接价值 面临的潜在威胁,威胁发生的可能性有多大? 威胁一旦发生,损失是多大? 评估承受风险的能力 采取怎样的措施才能将损失降到最低,甚至为零 二、规划风险 对识别出来的风险进行分组或分类 确定…...
Urho3D子系统
通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。 发动机初始化后,以下子系统将…...
无线网络术语总结
学习802.11协议,其中有一些英文缩略词,这里做一下总结与记录。 学习资料:知乎徐方鑫 802.11相关文章 802.11协议精读3:CSMA/CD与CSMA/CA - 知乎 (zhihu.com) 无线网络术语缩写全称中文含义APAccessPoint无线访问节点用于无线网络…...
海卡和海派有什么区别
一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式,海派是到海港海关清关拆柜后,尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后,尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…...
vue3学习资料整理
一、一个后端程序员为什么要学习前端? 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点(nodejs的概念与特征详解)》 https://www.1pindao.co…...
Linux基础语法进阶版
Linux基础语法 查看文件内容指令 touch 主要是修改文件时间,多用创建文件 -a #只更改访问时间 -m #只更改修改时间 -c --no-create#不创建任何文件cat 展示小文件内容 -b #对于非空输出行编号 -n #对于所有行输出编号 -E #在每行结束处显示"$" -A #展示所…...
近红外染料标记小分子1628790-37-3,Cyanine5.5 alkyne,花青素CY5.5炔基
试剂基团反应特点:Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃。氰基5.5是Cy5.5的类似物,一种流行的荧光团,已广泛用于各种应用,包括完整生物体成像。在温和的铜催化化学条件下,该试剂可与叠氮基共轭&a…...
洛谷——P1004 方格取数
【题目描述】 设有 NN 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0…...
Linux删除软链接
不防大家试试 unlink 命令 首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建test_chk目录 的软链接 #ln-s test_chk test_chk_ln 软链接创建好了,我们来…...
【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
用于大型Transformer的8-bit矩阵乘法介绍原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes 相关博客 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…...
设计模式之工厂模式详解和应用
目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…...
ArcGIS中的附件功能
从ArcGIS10起,空间数据库增加了"附件"的功能,可灵活管理与要素相关的附加信息,可以是图像、PDF、文本文档或任意其他文件类型。例如,如果用某个要素表示建筑物,则可以使用附件来添加多张从不同角度拍摄的建筑物照片。 启动附件功能 要想使用附件功能,要素类必…...
epoll单台设备支持百万并发连接
一些概念: linux下一切接文件,文件描述符fd,文件I/O(包含socket,文本文件等),I/O多路复用,reactor模型,水平触发,边沿触发,多线程模型,阻塞和非阻塞…...
网络字节序
文章目录网络字节序网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 网络数据流的地址统一按大端处理 发送主机通常将发送缓冲区中的数据按内存地址从低到高的…...
03- SVC 支持向量机做人脸识别 (项目三)
数据集描述: sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集来精确实现人脸识别并提取人脸特征向量数据集地址: sklearn.datasets.fetch_lfw_people — scikit-learn 1.2.1 documentationPCA降维: pca PCA(n_components0.9) 数据拆分: X_train, X_test, y_tra…...
浅谈指向二维数组元素的指针变量
(1)指向数组元素的指针变量 例1.有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. 编写程序 1 #include <stdio.h>2 int main()3 {4 int a[3][4] { 1,3,5,7,9,11,13,15,17,19,21,23 };5 int *p;6 for (p a[0]; p < a[0] 12; p) …...
左右值引用和移动语义
文章首发公众号:iDoitnow 1. 左右值和左右值引用 什么是左值、右值呢?一种极不严谨的理解为:在赋值的时候,能够被放到等号左边的值为左值,放在右边的值为右值。例如: int sum(int x, int y){return x y;…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
