FFmpeg命令行实践二
1 FFmpeg命令参数
1.1 主要参数
- -i 设定输入流
- -f 设定输出格式(format)
- -ss 开始时间
- -t 时间长度
#修改音视频容器格式为flv,拷贝编码格式,复制0-20s数据
ffmpeg -i test.mp4 -ss 0 -t 20 -codec copy -f flv out.flv
#-f参数可以省略,自动识别输出格式
ffmpeg -i test.mp4 -ss 0 -t 20 -codec copy out.flv
1.2 视频参数
- -vframes 设置要输出的视频帧数
- -b 设定视频码率
- -b:v 视频码率
- -r 设定帧速率
- -s 设定画面的宽与高
- -vn 不处理视频
- -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
- -vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
- -vf 视频过滤器
#查看h265编码格式
ffmpeg -encoders | grep h265
--enable-libx265
#修改视频码率为64k,帧率30帧,分辨率:640x480,纵横比4:3,编码格式为h265
ffmpeg -i test.mp4 -vframes 5 -b 64k -r 30 -s 640x480 -aspect 4:3 -vcodec libx265 test-video-265.mp4
#提取视频数据
ffmpeg -i test.mp4 -vcodec copy -an test-no-audio.mp4
修改前:
修改后:
注意:修改后可以看到视频的码率并没有生效,所以参数之间是相互影响的。
1.3 音频参数
- -aframes 设置要输出的音频帧数
- -b:a 音频码率
- -ar 设定采样率
- -ac 设定声音的Channel数
- -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。
- -an 不处理音频
- -af 音频过滤器
#查看mp3编码格式
ffmpeg -encoders | grep mp3
A..... libmp3lame libmp3lame MP3 (MPEG audio layer 3) (codec mp3)
#修改音频音频码率为64k,采样率为16000,双通道,编码格式为mp3,输出100帧大小
ffmpeg -i test.mp4 -aframes 100 -b:a 64k -ar 16000 -ac 2 -acodec libmp3lame test-audio.mp4
#提取音频数据
ffmpeg -i test.mp4 -acodec copy -vn test-no-video.mp4
修改前:
修改后:
2 提取音视频数据
2.1 保留原数据格式
首先用mediainfo查看音视频格式,然后直接提取到对应文件
#提取文件中aac音频数据
ffmpeg -i test.mp4 -acodec copy -vn test-no-video.aac
#提取文件中h264视频码流
ffmpeg -i test.mp4 -vcodec copy -an test-no-audio.h264
2.2 指定编码格式提取数据
有时候需要将音视频格式转换为需要的格式,可以指定具体的编码格式进行编码,提取相关的数据。
#将视频编码格式转换为h265
ffmpeg -i test.mp4 -vcodec libx265 -an -vframes 5 test.h265
#将音频转换为mp3
ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3
2.3 提取视频像素格式
可以提取视频文件中的视频像素格式,比较常见的两种是yuv和rgb。这里需要注意像素格式是没有视频分辨率信息的需要在转换完成后将视频的分辨率附在名字上保证视频可以正常的播放。
#查看yuv格式
ffmpeg -pix_fmts | grep yuv#提取视频像素格式为yuv420p,提取5s
ffmpeg -i test.mp4 -t 5 -pix_fmt yuv420p -s 320x240 test-yuv420p-320x240.yuv
#提取视频像素格式为rgb24
ffmpeg -i test.mp4 -t 5 -pix_fmt rgb24 -s 320x240 test-rgb24-320x240.rgb
#yuv420p转rgb24,需要指定输入的分辨率320x240
ffmpeg -s 320x240 -i test-yuv420p.yuv -pix_fmt rgb24 test-rgb24_320x240_1.rgb
2.4 播放视频像素格式文件
播放视频像素格式需要指定基本的像素格式和分辨率
#播放yuv420p格式文件,需要指定像素格式为yuv420p,视频分辨率320x240
ffplay -pixel_format yuv420p -video_size 320x240 -i test-yuv420p-320x240.yuv
2.5 提取音频pcm格式
提取pcm数据指定采样率,通道数和封装格式即可
#查询采样格式
ffmpeg -formats | grep PCM
DE s32le PCM signed 32-bit little-endian
#提取pcm数据
ffmpeg -i test.mp3 -ar 16000 -ac 2 -f s16le 16000_2_s16le.pcm
#利用sample_fmt获取pcm数据
ffmpeg -sample_fmts | grep PCM
ffmpeg -i test.mp3 -ar 16000 -ac 2 -sample_fmt s16 16000_2_s16.wav
//利用encodec获取
ffmpeg -encoders | grep PCM
ffmpeg -i test.mp3 -ar 16000 -ac 2 -codec:a pcm_s16le 16000_2_s16le.wav
2.6 播放音频像素格式
播放pcm数据需要指定采样率,通道数和封装格式。
ffplay -ar 16000 -ac 2 -f s16le 16000_2_s16le.pcm
3 ffmpeg转封装格式
3.2 保留编码格式
保留封装格式的拷贝,这里需要注意的是保留封装格式-codec copy等价于-vcodec copy 加-acodec copy 加 -s copy即包含音频编码、视频编码和字幕。
#保留编码格式,转换封装格式为ts,
ffmpeg -i test.mp4 -codec copy -t 5 test.flv
3.2 指定编码格式
指定编码格式主要修改两个参数,一个是vcodec,一个是acodec。需要注意的是如何查找自己想要的格式名称,一般采用-encoders
#将MP4中原格式h264转为h265;音频aac转成mp3
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame -t 5 test-h265-mp3.ts
3.2 修改视频参数
修改视频帧率、码率和分辨率
#修改视频码率为500k
ffmpeg -i test.mp4 -b:v 500k -t 5 test-bv500.ts
#修改视频帧率为10帧
ffmpeg -i test.mp4 -r:v 10 -t 5 test-rv10.ts
#修改视频分辨率为
ffmpeg -i test.mp4 -s:v 800x480 -t 5 test-sv10.ts
#修改音视频帧率
ffmpeg -i test.mp4 -r:v 10 -r:a 100 -t 5 test-rv10av10.ts
修改帧率为10
修改码率为500k
3.3 修改音频参数
修改音频码率、采样率和采样精度
#修改音频码率为500k
ffmpeg -i test.mp4 -b:a 500k -vcodec copy -t 5 test-av500.ts
#修改音频采样率16000
ffmpeg -i test.mp4 -r:a 16000 -vcodec copy -t 5 test-ar10.ts
#修改音频采样精度位16bit
ffmpeg -i test.mp4 -q:a 16 -vcodec copy -t 5 test-aq16.ts
#修改音视频帧率
ffmpeg -i test.mp4 -r:v 10 -r:a 100 -vcodec copy -t 5 test-rv10av10.ts
4 音视频裁剪
4.1 音视频文件裁剪
视频裁剪需要根据起始位置和裁剪时长两部分组成,这里裁剪起始位置可以用秒数来表示也可以用格式化00:00:00来裁剪。另外在视频转换格式时需要注意转换为了视频兼容性增加bsf过滤器来保证视频转换后能正常播放。
#裁剪视频从第5秒开始裁剪10s长度视频
ffmpeg -i test.mp4 -ss 00:00:05 -t 10 -codec copy test-ss10.mp4
#裁剪视频从第5秒开始裁剪10s长度视频,加vbsf为了提高转换的兼容性
ffmpeg -bsfs | grep h264
h264_mp4toannexb
ffmpeg -i test.mp4 -ss 00:00:05 -t 10 -codec copy -vbsf h264_mp4toannexb test-ss10vbsf.ts
4.2 音视频文件拼接
#视频拼接方式,concat命令进行拼接
ffmpeg -f concat -i mp4list.txt -codec copy test-concat2.mp4
vi mp4list.txt
file 'test.mp4'
file 'test-ss10.mp4'
5 视频与图片转换
视频转图片
图片转换时当转换多张图片时,需要利用格式化方式转换为多张图片。
#将视频转图片,%02d转换多张图片,转换一张图片可以用-vframes
ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg
图片转视频
#将图片转为25帧率的mp4视频
ffmpeg -f image2 -i frame%02d.jpg -r 25 jpgtomp4.mp4
FFmpeg命令行实践二相关推荐
- FFmpeg命令行工具系列二---转码流程及过滤器
一.概述 在FFmpeg命令行工具系列一中,对FFmpeg的命令行工具FFmpeg.exe进行了简单的介绍,并举出了几个简单的例子.在这一章中,将进行一次详细的介绍,主要是对转码过程和过滤器进行介绍. ...
- FFmpeg命令行解析
目录标题 一.引言(Introduction) 1.1 FFmpeg简介(Overview of FFmpeg) 1.2 FFmpeg命令行的应用场景(Application Scenarios of ...
- 【FFmpeg】Windows 搭建 FFmpeg 命令行运行环境
文章目录 前言 一.下载 FFMPEG 二.拷贝可执行文件 三.拷贝动态库文件 四.运行 ffmpeg 命令 总结 前言 Android 中需要使用到 FFMPEG , 先在 Windows 中搭建一 ...
- Android 下使用 FFmpeg 命令行工具与问题排查
目录 FFmpeg 命令行工具 将相关文件加入到项目中 修改 ffmpeg 源码 问题排查 上一篇文章 中,我们已经成功编译了 FFmpeg 的主要库并集成到了我们的 Android 应用中.我们暂时 ...
- FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...
- linux下ffmpeg命令行推送摄像头和麦克风
linux 下ffmpeg命令行推送摄像头和麦克风 最近学习ffmpeg,用到命令测试麦克风和摄像头,参考了很多blog,综合测试后得到如下命令. 测试系统使用的Ubuntu系统,在虚拟机中使用摄像头 ...
- 使用ffmpeg 命令行解码并显示像素格式为.raw图像
使用ffmpeg 命令行解码并显示像素格式为.raw图像,命令如下: ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt bayer_gbrg8 -s 2448* ...
- [笔记]快乐的Linux命令行《二》文件系统中跳转
系列文章目录 [笔记]快乐的Linux命令行<一>LInux系统简介以及什么是shell [笔记]快乐的Linux命令行<二>文件系统中跳转 文章目录 系列文章目录 前言 一. ...
- FFmpeg命令行(ffmpeg、ffplay、ffprobe)
ffmpeg命令行 A command line tool to convert multimedia files between formats. 名称 命令 解释 查看当前设备输入信息 ffmpe ...
最新文章
- 过椭圆外一点引两条切线方程_椭圆的一些结论汇总
- nginx负载均衡策略upstream
- java中截取字符串的方式
- Python 开发工具链全解
- Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了。cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目
- 使用SecureCrt远程登录Linux安装配置教程
- 滴水课后作业(1-5)
- MySQL数据库系列
- 【Java 网络编程】网络通信原理、TCP、UDP 回显服务
- videojs中文文档详解_MMDetection中文文档—详解
- 操作vsam用sequential访问模式REWRITE数据
- 【oracle】oracle常用命令汇总
- Cisco ASA 5505 (Version 9.X)的 LAN上网和NAT的配置
- 联邦学习(Federated Learning)
- 10种常用的分析模型 数据分析必看
- CSP-J冲刺 P1359 租用游艇
- 利用 cv2 给图片添加文字
- 什么是粘包?socket 中造成粘包的原因是什么? 粘包的处理方式
- 【系】微信小程序云开发实战坚果商城-扩展篇
- 程序设计思维模测 - M4