Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ffmpeg常用命令

ffmpeg常用命令

作者头像
Jensen_97
发布于 2024-04-18 05:04:39
发布于 2024-04-18 05:04:39
44300
代码可运行
举报
文章被收录于专栏:技术客栈技术客栈
运行总次数:0
代码可运行

前言

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

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

ffmpeg相关命令

相关概念

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

基本命令格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg [global_options] {[input_file_options] -i input_url}... {[output_file_options] output_url}...

windows下查看音视频设备列表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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录屏命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -f dshow  -i video="screen-capture-recorder"  -r 20 -t 10 screen-capture.mp4 
# -t 10 for 10 seconds recording
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#列出设备列表
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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
音视频录制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#调用本地麦克风录制音频,保存到文件
ffmpeg -f dshow -i audio="麦克风(Conexant SmartAudio HD)"  G:/testout/1.mp3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#调用摄像头录制视频,并保存到文件
ffmpeg -f dshow -i video="Lenvo EasyCamera" G:/testout/1.flv
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#调用摄像头和麦克风录制音视频,保存到文件
ffmpeg -f dshow -i video="" -f dshow -i audio="" G:/testout/2.flv

直播推流

摄像头推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/
桌面推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
桌面音频推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#推流到流服务器 
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流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffplay "rtmp://192.168.134.130:1936/live/dc live=1"
视频推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -re -i f:/8.mp4 -vcodec copy -acodec copy -f flv -r 30 -b:v 1000k  rtmp://*.*.*.*/live/vad2
视频循环推流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -i 0806.mp4 0806f.flv

视频截取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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	(更精确)

添加字幕

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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水印

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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输出
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
#如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。
为视频添加LOGO

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4

结果如下所示:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#右上角:
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。

完整命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

结果如下图所示:

截取视频图像
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
  • -r:表示每一秒几帧
  • -q:v:表示存储jpeg的图像质量,一般2是高质量。 ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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帧。

序列帧与视频的相互转换

分离视频音频流
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#分离视频流
ffmpeg -i input_file -vcodec copy -an output_file_video
#分离音频流
ffmpeg -i input_file -acodec copy -vn output_file_audio
视频解复用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264 
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264
视频转码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#转码为码流原始文件
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:分辨率控制
视频封装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
视频剪切
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#提取图片
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024/04/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
sqlite3的C语言使用(一)
前一天我讲了如何在VC中连接sqlite的库,从今天开始就分几个专题详细学习一下sqlite的一些API。当然我也是才接触sqlite3,这些题也都是我的作业题,如果有什么错误大家可以联系我,共同进步。
phith0n
2020/10/15
3.3K0
玩转SQLite-11:C语言高效API之sqlite3_prepare系列函数
SQLite是一个跨平台的轻量级数据库,支持C/C++开发,可用于嵌入式中,关于C/C++使用SQLite的简单实例,之前这篇文章,已经介绍过一种简单的使用方式。本篇来介绍另一种更加高效的调用方式。
xxpcb
2022/12/29
1.8K0
ios在SQLite3基本操作
首先是设置项目文件。在项目中加入iPhone版的sqlite3的数据库的开发包。在项目下的Frameworks点击右键。然后选择libsqlite3.0.dylib文件。
全栈程序员站长
2022/07/05
7740
Sqlite3详细解读
"代码下载:SQLite3_2013_0402详细版.zip" http://vdisk.weibo.com/s/Gb9Qi
py3study
2020/01/07
3.9K0
iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
  在前面的博客中已经介绍了如何连接SQLite数据库,并且简单的查询和遍历结果集。在前面用到了sqlite3_stmt *stmt,也就是预编译后的SQL语句。在本篇博客中会了解一下sqlite3_stmt,然后了解一下变量的绑定。变量绑定,简单的说就是往预编译后的SQL语句中传入相应的值。   一. sqlite3_stmt 的生命周期   这个对象的实例代表着一个被编译成二进制的SQL语句。每个SQL语句都必须经过预编译转换成sqlite3_stmt才能被执行。在iOS开发中,Application或
lizelu
2018/01/11
1.3K0
iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
SQLite3使用笔记(1)——查询
SQLite是一个嵌入式SQL数据库引擎。与大多数其他 SQL 数据库不同,SQLite 没有单独的服务器进程。SQLite 直接读写普通磁盘文件。具有多个表、索引、触发器和视图的完整SQL数据库包含在单个磁盘文件中。
charlee44
2022/05/23
1.5K0
如何优化 SQLite 每秒的插入操作
SQLite 的优化比较棘手,就批量插入而言,其速度可以从每秒 85 条优化到每秒 96,000 条。下面我们来具体看下实验过程和结果,
ClearSeve
2022/02/10
3.5K0
SQLite3使用笔记(2)——插入
如同上一篇文章SQLite3使用笔记(1)——查询所述,使用SQLite进行查询操作同样有两种方式。对于比较简单的表格插入,使用sqlite3_exec()接口就可以了:
charlee44
2022/05/23
6800
【IOS开发基础系列】数据持久化专题
iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data。
江中散人_Jun
2023/10/16
4040
【IOS开发基础系列】数据持久化专题
iOS原生sqlite3框架操作数据库
iOS开发的基本上都知道fmdb,自从用了fmdb之后都忘记了原生的sqlite3操作了(fmdb太好用了)。 SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。 SQLite是一个轻量级的关系数据库。SQLite最初的设计目标是用于嵌入式系统,TA占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。 需要注
傅_hc
2018/07/04
1.3K0
Sqlite数据库使用简介以Windows下简单的引入数据库到C++项目为例
SQLite 是一个开源的嵌入式关系型数据库管理系统。它不是作为一个独立进程运行的服务,而是作为一个库直接链接到应用程序中。这意味着使用 SQLite 的应用程序可以随身携带其数据库,并且可以在不需要单独服务器管理的情况下操作数据。
晨星成焰
2024/08/02
5701
Sqlite数据库使用简介以Windows下简单的引入数据库到C++项目为例
iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
  在《SQLite的C语言接口规范(一)》中介绍了如何去连接打开数据库,本篇博客就介绍如何操作数据库,本篇主要给出了如何执行数据库查询语句(Select), 然后遍历结果集。本篇博客就直接使用上一篇博客封装的打开数据库的方法获取到数据库的操作句柄,然后通过这个句柄来操作我们的Sqlite数据库。今天这篇博客中要多Cars.sqlite数据库中的其中一个表进行Select操作。更为细节的东西请参考SQLite官网:http://www.sqlite.org 。   一.预编译SQL语句     要想执行一条
lizelu
2018/01/11
1.1K0
iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
使用iOS原生sqlite3框架对sqlite数据库进行操作
      sqlite数据库是一种小型数据库,由于其小巧与简洁,在移动开发领域应用深广,sqlite数据库有一套完备的sqlite语句进行管理操作,一些常用的语句和可视化的开发工具在上篇博客中有介绍,地址如下:
珲少
2018/08/15
2.2K0
使用iOS原生sqlite3框架对sqlite数据库进行操作
swift 简易操作sqlite3 之 通用查询
上篇文章我们写了关于SQLite的简单操作和一些基本常识,对此陌生的童鞋可以参考之前的文章(swift简易操作sqlite3),今天我们在此基础上进一步加工处理,写出通用查询操作方法
大话swift
2019/07/03
1.5K0
swift 简易操作sqlite3 之 通用查询
Sqlite 接口封装(c++)
Freedom123
2024/03/29
2880
C/C++ 通过SQLiteSDK增删改查
SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现了数据库的零配置管理。这种设计理念使得SQLite成为许多嵌入式系统、移动应用和小型项目中的首选数据库引擎。
王瑞MVP
2023/11/26
4750
C/C++ 通过SQLiteSDK增删改查
Sqlite 读写blob数据(c++)
参考:https://www.cnblogs.com/wengzilin/archive/2012/03/28/2420796.html
Freedom123
2024/03/29
3020
SQLite3 Cpp基本使用
文章目录 SQLite3 C++ #0 GitHub #1 环境 #2 安装sqlite3 #3 使用 #3.1 基本SQL语句 #3.2 sqlite3 API #3.3 Code SQLite3 C++ 0 GitHub example代码 SQLite3 C++ Demo Github 1 环境 macOS C++14 2 安装sqlite3 git clone https://github.com/sqlite/sqlite.git cd sqlite && mkdir bld && cd bld
Autooooooo
2021/12/07
1.3K0
SQLite3 Cpp基本使用
学习iPhone开发中 sqlite3的
    由于我主要负责我们小组项目数据库模块的部分所以这几天都一直在研究在iphone中最为常用的一个简单数据库sqlite,自己也搜集很多资料,因此在这里总结一下这几天的学习成果:
py3study
2020/01/08
9930
C++编程库与框架实战——SQLite3数据库引擎
SQLite是可以实现类似于关系型数据库中各种操作的事务性SQL数据库引擎,可以为应用程序提供存储于本地的嵌入式数据库,帮助应用程序实现轻量级的数据存储。
Coder-ZZ
2024/06/06
1.3K0
C++编程库与框架实战——SQLite3数据库引擎
推荐阅读
相关推荐
sqlite3的C语言使用(一)
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验