惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈 从浏览器地址栏输入url到显示页面的步骤 - OXOXTECH 牛牛技术客栈 TypeScript事件派发管理器 - OXOXTECH 牛牛技术客栈 MQTT保留消息的使用方法 - OXOXTECH 牛牛技术客栈 世界工程-港珠澳大桥游 - OXOXTECH 牛牛技术客栈 Golang逃逸分析 - OXOXTECH 牛牛技术客栈 设计模式-享元模式 - OXOXTECH 牛牛技术客栈 牛牛成长记录 - OXOXTECH 牛牛技术客栈 设计模式-外观模式 - OXOXTECH 牛牛技术客栈 设计模式-装饰器模式 - OXOXTECH 牛牛技术客栈 设计模式-桥接模式 - OXOXTECH 牛牛技术客栈 5周年恋爱纪念日 - OXOXTECH 牛牛技术客栈 2024新年快乐,龙腾四海 - OXOXTECH 牛牛技术客栈 迎接新年:除夕的美好时刻 - OXOXTECH 牛牛技术客栈 设计模式-适配器模式 - OXOXTECH 牛牛技术客栈 设计模式-原型模式 - OXOXTECH 牛牛技术客栈 设计模式-建造者模式 - OXOXTECH 牛牛技术客栈 设计模式-工厂模式 - OXOXTECH 牛牛技术客栈 设计模式-单例模式 - OXOXTECH 牛牛技术客栈 SpringBoot在Linux环境下发送163邮件失败(No appropriate protocol (protocol is disabled or cipher suites are inappropriate)) 海与日落 - OXOXTECH 牛牛技术客栈 Swagger比较常用的注解 - OXOXTECH 牛牛技术客栈 猫🐱牛 - OXOXTECH 牛牛技术客栈 2023年最后一个晚霞 - OXOXTECH 牛牛技术客栈 Linux(Centos)部署Nginx教程 - OXOXTECH 牛牛技术客栈 Linux MySQL下载安装详细教程(CentOS版) - OXOXTECH 牛牛技术客栈 JavaFx打包成exe - OXOXTECH 牛牛技术客栈 Flux脚本语言入门教程 - OXOXTECH 牛牛技术客栈 演唱会出图 - OXOXTECH 牛牛技术客栈 Netty TCP解决粘包拆包 - OXOXTECH 牛牛技术客栈 SpringBoot实现订单超时取消的几种方案 - OXOXTECH 牛牛技术客栈 详解Java并发中的各种锁 - OXOXTECH 牛牛技术客栈 SpringBoot集成支付宝支付 - OXOXTECH 牛牛技术客栈 雪花算法:分布式系统唯一ID生成算法 - OXOXTECH 牛牛技术客栈 Java解决空指针的神器Optional - OXOXTECH 牛牛技术客栈 与兴一起 - OXOXTECH 牛牛技术客栈 Java17新特性详解与安装 - OXOXTECH 牛牛技术客栈 Jdk17安装+环境配置详细教程 - OXOXTECH 牛牛技术客栈 孤注一掷 - OXOXTECH 牛牛技术客栈 解决WinSCP经常断线重连 - OXOXTECH 牛牛技术客栈 内存不足导致Tomcat崩溃问题排查与解决办法 - OXOXTECH 牛牛技术客栈 influxDB初识,一个高效的时序数据库 - OXOXTECH 牛牛技术客栈 SpringBoot 服务接口限流方案 - OXOXTECH 牛牛技术客栈 Docker 安装 Portainer - OXOXTECH 牛牛技术客栈 Linux 安装Docker - OXOXTECH 牛牛技术客栈 物料宣传 - OXOXTECH 牛牛技术客栈 Java使用EMQX实现MQTT通信 - OXOXTECH 牛牛技术客栈 Java实现常见的排序算法 - OXOXTECH 牛牛技术客栈 FreeSwitch Windows安装教程 - OXOXTECH 牛牛技术客栈 MQTT单向SSL数据加密 - OXOXTECH 牛牛技术客栈 随性 - OXOXTECH 牛牛技术客栈 mysql报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的解决方案 Git Push项目报 push to origin/master was rejected 错误解决方案 游行记——珠海金沙滩与金湖公园之行 - OXOXTECH 牛牛技术客栈 Tomcat:解决Tomcat启动警告:"无法将资源添加到Web应用程序缓存中....请考虑增加缓存空间" 的问题 - OXOXTECH 牛牛技术客栈 励骏庞都广场,迷一般的皇宫 - OXOXTECH 牛牛技术客栈 Docker 常用命令集合 - OXOXTECH 牛牛技术客栈 ElasticSearch Windows版-安装教程 - OXOXTECH 牛牛技术客栈 Java去除对象中为null的字段 - OXOXTECH 牛牛技术客栈 我和我的青春 - OXOXTECH 牛牛技术客栈 Java实现螺旋矩阵算法: - OXOXTECH 牛牛技术客栈 Java直接内存分配和释放的理解 - OXOXTECH 牛牛技术客栈 FreeSwitch将默认数据库迁移至MySQL - OXOXTECH 牛牛技术客栈 别错过路上的风景,别错过刹那间的深情! - OXOXTECH 牛牛技术客栈 Viewer.js:一款强大的图片预览组件 - OXOXTECH 牛牛技术客栈 Java JDK Proxy和CGLib动态代理示例 - OXOXTECH 牛牛技术客栈 redis常用命令 - OXOXTECH 牛牛技术客栈 SpringBoot查询IP归属地 - OXOXTECH 牛牛技术客栈 Spring 事务失效的六种情况 - OXOXTECH 牛牛技术客栈 #张艺兴每时每刻# - OXOXTECH 牛牛技术客栈 Nginx常用命令及具体应用 - OXOXTECH 牛牛技术客栈
ffmpeg常用命令 - OXOXTECH 牛牛技术客栈
Mr.Potato · 2024-04-02 · via 牛牛技术客栈

Mr.Potato 后端 ffmpeg

前言

FFmpeg是一个强大的开源多媒体处理工具,它可以用于录制、转换以及流化音频和视频。它是一个跨平台的项目,可以在多种操作系统上运行,包括Windows、Mac OS和Linux。这个工具可以执行各种各样的音视频处理任务,包括但不限于:

  1. 转换格式:可以将一种音频或视频格式转换为另一种。比如,你可以将一个MP4视频转换成AVI格式,或者将一个WAV音频文件转换成MP3。
  2. 裁剪和剪辑:可以从视频或音频文件中剪裁或提取特定的片段。
  3. 合并和拼接:可以将多个音频或视频文件合并成一个文件,或者将多个文件拼接成一个序列。
  4. 添加水印和字幕:可以在视频中添加图片水印或文本字幕。
  5. 调整参数:可以调整视频的分辨率、帧率、比特率等参数。
  6. 流媒体处理:可以将音频或视频流化,以便通过网络进行实时传输。

ffmpeg相关命令

相关概念

  • 音/视频流:在音视频领域,一路音/视频成为一路流。
  • 容器:一般把mp4、flv、mov等文件格式称之为容器。在这些常用格式文件中可以存放多路音视频文件。以mp4为例,可以存放一路视频流,多路音频流,多路字幕流。
  • channel:channel是音频中的概念,称之为声道,在一路音频流中可以有单声道、双声道和立体声。

基本命令格式

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

windows下查看音视频设备列表

ffmpeg -list_devices true -f dshow -i dummy

音视频录制

screen-capture-recorder

桌面采集工具,可以用来录制桌面;自带虚拟音频捕获器,录制桌面的音频;需要安装java环境。它还包括一个免费的、通用的、开源的DirectShow桌面/屏幕源捕获过滤器。下载地址 https://github.com/rdp/screen-capture-recorder-to-video-windows-free/releases

ffmpeg配合screen-capture-recorder录屏命令:


ffmpeg -f dshow  -i video="screen-capture-recorder"  -r 20 -t 10 screen-capture.mp4 
# -t 10 for 10 seconds recording
#列出设备列表
ffmpeg -list_devices true -f dshow -i dummy
#全屏录像
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 e:/temp/temp.mkv
  • -f 指定使用dshow采集数据
  • -i 指定从哪里采集数据
  • -r 指定帧率(-framerate用来限制输入,-r用来限制输出)桌面的输入对帧率没有要求,所以不用限制桌面的帧率,其实限制了也没用。
  • -s 设置窗口大小 -s 100x200 将桌面画布压缩为100x200
#gdigrab录屏,h264编码
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 G:\ffmpeg\testout\temp.mkv

音视频录制

#调用本地麦克风录制音频,保存到文件
ffmpeg -f dshow -i audio="麦克风(Conexant SmartAudio HD)"  G:/testout/1.mp3
#调用摄像头录制视频,并保存到文件
ffmpeg -f dshow -i video="Lenvo EasyCamera" G:/testout/1.flv
#调用摄像头和麦克风录制音视频,保存到文件
ffmpeg -f dshow -i video="" -f dshow -i audio="" G:/testout/2.flv

直播推流

摄像头推流

ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Conexant SmartAudio HD)" -acodec aac -strict experimental -ar 44100 -b:a 200k -b:v 1500k  -preset:v veryfast -f flv  rtmp://203.195.150.231:1935/live/

桌面推流

ffmpeg -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" -acodec aac -strict experimental -ar 44100 -b:a 150k -b:v 2500k  -preset:v veryfast -f flv  rtmp://*.*.*.*/live/vad

桌面音频推流

ffmpeg -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec aac -strict experimental -ar 44100 -b:a 200k -b:v 2500k  -preset:v ultrafast -f flv  rtmp://*.*.*.*/live/vad

推rtsp流

ffmpeg -i rtsp://192.168.0.189:554/stream/main -codec copy -rtsp_transport tcp -r 15 -s 1366x768 -f rtsp rtsp://x.x.x.x:554/stream/main

推rtmp流

#推流到流服务器 
ffmpeg -f dshow -i video="screen-capture-recorder" -r 15 -s 990x512 -f flv rtmp://203.195.150.231:1935/live/ 
#使用ffplay拉流播放 
ffplay "rtmp://203.195.150.231:1935/live/ live=1" 
#读取流音频,保存到本地 
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

播放rtmp流

ffplay "rtmp://192.168.134.130:1936/live/dc live=1"

视频推流

ffmpeg -re -i f:/8.mp4 -vcodec copy -acodec copy -f flv -r 30 -b:v 1000k  rtmp://*.*.*.*/live/vad2

视频循环推流

ffmpeg -re -stream_loop -1 -i f:/8.mp4 -vcodec copy -acodec copy -f flv -r 30 -b:v 1000k  rtmp://*.*.*.*/live/vad2

格式转换

将0806.mp4由mp4转换为flv:

ffmpeg -i 0806.mp4 0806f.flv

视频截取

ffmpeg  -i 0806.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:30 cutout.mp4 -y      (不精确,会有几秒的误差)
ffmpeg -accurate_seek -i I:/8.mp4 -codec copy -y -ss 00:00:10 -to 00:00:30 I:/8-cut.mp4	(更精确)

添加字幕

1)嵌入到视频(嵌入到视频流)
ffmpeg -i 0806.mp4 -vf subtitles=a.srt srtout.mp4 
2)嵌入到视频(嵌入到字幕流)
ffmpeg -i 0806.mp4 -i a.srt -c:s mov_text -c:v copy -c:a copy srtout3.mp4

ffmpeg -i video.avi -vf subtitles=subtitle.srt out.avi
ffmpeg -filter_complex "subtitles='a.srt File - 1 srtout.mp4'"

添加LOGO水印

ffmpeg -i I:/8.mp4 -i I:/logo.png -filter_complex overlay I:/8-logo.mp4
ffmpeg -i /mnt/hgfs/shared/resource/shenghua.avi -i /mnt/hgfs/shared/resource/my_logo.png -filter_complex overlay /mnt/hgfs/shared/resource/shenghua_die.mp4

过滤器的使用

将输入的1920*1080缩小到960*540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
#如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

为视频添加LOGO

比如,我有这么一个图片

202404021623331328.webp

想要贴到一个视频上,那可以用如下命令:

ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4

结果如下所示:

202404021624538271.webp

要贴到其他地方?看下面:

#右上角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
#左下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
#右下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

去掉视频中的LOGO

语法:-vf delogo=x:y:w:h[:t[:show]]

  • x:y: 离左上角的坐标
  • w:h: logo的宽和高
  • t: 矩形边缘的厚度默认值4
  • show:若设置为1有一个绿色的矩形,默认值0。

完整命令:

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

结果如下图所示:

202404021627576605.webp

截取视频图像

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
  • -r:表示每一秒几帧
  • -q:v:表示存储jpeg的图像质量,一般2是高质量。
    ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。

可以设置开始时间和你想要截取的时间:

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
  • -ss:表示开始时间
  • -t:表示共要多少时间。
    这样,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

序列帧与视频的相互转换

分离视频音频流

#分离视频流
ffmpeg -i input_file -vcodec copy -an output_file_video
#分离音频流
ffmpeg -i input_file -acodec copy -vn output_file_audio

视频解复用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264 
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

视频转码

#转码为码流原始文件
ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264
#转码为码流原始文件              
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264
#转码为封装文件  
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            
  • -bf:B帧数目控制
  • -g:关键帧间隔控制
  • -s:分辨率控制

视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

视频剪切

#提取图片
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        
#剪切视频
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    
  • -r 提取图像的频率
  • -ss 开始时间
  • -t 持续时间

常用参数说明

主要参数:

  • -i:设定输入流
  • -f:设定输出格式
  • -ss:开始时间

视频参数:

  • -b:设定视频流量,默认为200Kbit/s
  • -r:设定帧速率,默认为25
  • -s:设定画面的宽与高
  • -aspect:设定画面的比例
  • -vn:不处理视频
  • -vcodec:设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数:

  • -ar:设定采样率
  • -ac:设定声音的Channel数
  • -acodec:设定声音编解码器,未设定时则使用与输入流相同的编解码器
  • -an:不处理音频

结尾

本篇文章总结ffmpeg的一些常用的命令(windows)

本文出处: https://www.cnblogs.com/dch0/p/11149266.html

说点什么吧...

共 0 条评论