FFmpeg 的使用
FFmpeg是一个流行的开源音视频处理工具,支持多种音视频格式的解码、编码、转换等功能。
常见的使用场景包括:
- 将视频文件转换为不同格式,如将MP4转换为AVI或FLV等。
- 对视频进行剪辑和合并,如将多个视频文件合并为一个或剪辑一个视频文件的一部分。
- 对视频进行处理,如添加水印、调整音量等。
- 抓取视频截图或生成视频缩略图。
安装
官网 https://ffmpeg.org/download.html
windows
官网下载安装包、bin目录里有exe文件
https://www.gyan.dev/ffmpeg/builds/
linux
sudo apt-get install ffmpeg
mac
- 用homebrew, 命令 brew install ffmpeg
- 官网下载压缩包 https://evermeet.cx/ffmpeg/ 解压后将可执行文件 ffmpeg、ffprobe、ffplay直接放到 /user/local/bin 或其他PATH 路径下
基本命令示例
格式如下: ffmpeg -i 输入文件名 [参数] 输出文件名
解码:-i参数指定输入文件,如:
ffmpeg -i input.mp4 output.avi编码:-c:v和-c:a参数指定视频和音频编码器,如:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4转换:-vf参数指定视频过滤器,如:
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4剪辑:-ss和-t参数指定起始时间和持续时间,如:
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 output.mp4合并:使用-concat参数合并多个文件,如:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex concat -c copy output.mp4
参数详解
可以通过ffmpeg -h命令查看FFmpeg的所有选项和参数
基本参数
-i input_file:指定输入文件,可以是本地文件或远程URL。
-f format:指定输出文件格式,例如:mp4、avi、mov等。
-y:覆盖输出文件。
-n:不覆盖输出文件。
-vn: 禁止输出视频
-an:禁止输出音频
-sn: 禁止输出字幕
视频参数
-c:v codec:指定视频编码器,例如:libx264(H.264编码器)或vp9(Google VP9编码器)。
-b:v bitrate:指定视频比特率,即视频的压缩率。值越高,视频质量越好,但文件大小也越大。
-crf quality:指定视频质量,即压缩比。值越小,视频质量越好,但文件大小也越大。
-s size:指定视频分辨率,例如:1280x720或1920x1080。
-r fps:指定视频帧率,即每秒钟显示的帧数。
-aspect aspect_ratio:指定视频宽高比,例如:16:9或4:3。
-profile:v profile_name:指定视频编码器的配置文件,例如:high表示高级配置文件。
-level:v level_value:指定视频编码器的级别,例如:4.1表示H.264编码器的4.1级别。
-maxrate:v max_bitrate:指定视频的最大比特率,例如:1000k表示最大每秒使用1000K位的比特率。
-bufsize:v buffer_size:指定视频码率控制缓冲区大小。
-vf filter:指定视频过滤器,例如:scale、rotate等。
-ss start_time:指定从输入文件的哪个时间点开始转码。
-t duration:指定转码的时长。
-map [input_file_id:stream_specifier]:指定输出文件中包含哪些流,例如:-map 0:v:0表示将输入文件中的第一个视频流复制到输出文件中。
-pix_fmt format:指定视频的像素格式,例如:yuv420p表示4:2:0格式。
音频参数
-c:a codec:指定音频编码器,例如:aac(Advanced Audio Coding)或mp3(MPEG Audio Layer III)。
-b:a bitrate:指定音频比特率,即音频的压缩率。值越高,音频质量越好,但文件大小也越大。
-c:a copy 表示直接复制音频流,不进行任何编码或处理。
-ar sample_rate:指定音频采样率,即每秒钟采样的次数。
-ac channels:指定音频声道数,例如:1(单声道)或2(立体声)。
-af filter:指定音频过滤器,例如:volume=2表示将音量增加2倍。
-ss start_time:指定从输入文件的哪个时间点开始转码。
-t duration:指定转码的时长。
-map [input_file_id:stream_specifier]:指定输出文件中包含哪些流,例如:-map 0:a:0表示将输入文件中的第一个音频流复制到输出文件中。
其他参数
-preset preset_name:指定编码速度和质量的预设值,例如:slow表示慢速但高质量的编码。
-tune tuning_parameter:指定编码器的调整参数,例如:film表示适用于电影的参数。
-threads threads_count:指定线程数,即并行处理的线程数。
-shortest:当多个流转码时,输出文件的长度将是最短的流的长度。
-movflags flag1,flag2,...:指定输出文件的MOV标志,例如:faststart表示使用快速启动。
-pix_fmt format:指定像素格式,例如:yuv420p表示4:2:0格式。
-f segment:指定输出文件的分段格式。
-segment_time duration:指定分段的时长。
-segment_wrap number:指定分段时循环的次数。
-hls_time duration:指定HLS(HTTP Live Streaming)流的分片时长。
-hls_list_size size:指定HLS流的播放列表大小。
-hls_segment_filename file_name:指定HLS流分片的文件名格式。
FFmpeg 的使用相关推荐
- Ubuntu 安装 ffmpeg
sudo add-apt-repository ppa:djcj/hybrid sudo apt-get update sudo apt-get install ffmpeg 在安装 ffmpeg 之 ...
- Linux实现ffmpeg H.265视频编码
Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...
- NVIDIA FFmpeg 转码技术分析
NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码.截至 ...
- H265与ffmpeg改进开发
H265与ffmpeg改进开发 Introduction KSC265是集编码.解码于一体的H.265编解码软件,完全遵循H.265协议标准.符合H.265编码规范的视频都可以通过KSC265进行解码 ...
- FFmpeg扩展开发
FFmpeg扩展开发 对FFmpeg RTMP/FLV部分做了扩展,用于支持H.265. 针对<video_file_format_spec_v10_1> VIDEODATA部分扩展如下: ...
- ffmpeg architecture(下)
ffmpeg architecture(下) 第3章-转码 TLDR:给我看代码和执行. $ make run_transcoding 我们将跳过一些细节,但是请放心:源代码可在github上找到. ...
- ffmpeg architecture(中)
ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...
- ffmpeg architecture(上)
ffmpeg architecture(上) · 视频-您看到的是什么! · 如果您有一系列图像序列,并以给定的频率(例如每秒24张图像)进行更改,则会产生运动的错觉.总之,这是视频背后的基本概念:一 ...
- FFmpeg集成到GPU
FFmpeg集成到GPU GPU加速视频处理集成到最流行的开源多媒体工具中. FFmpeg是最流行的开源多媒体操作工具之一,它有一个插件库,可以应用于音频和视频处理管道的各个部分,并在世界各地得到广泛 ...
- FFmpeg学习4:音频格式转换
前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...
最新文章
- poj3169(差分约束+SPFA)
- SpringBoot注解大全
- python数组加入新元素_Python之list添加新元素、删除元素、替换元素
- Ubuntu18.04 root 登录
- [内核编程] 内核环境及其特殊性,驱动编程基础篇
- C#Socket通信
- 如何用matlab消除谐波,如何在含有整次谐波和非整次谐波的信号中去除整次谐波?...
- C# CRC16 在textbox中显示实时时间
- 实现机器学习的循序渐进指南IX ——树回归
- 测试用例-写测试用例时怎么入手
- 大数据 数据库 评测_大数据产品能力评测介绍.pdf
- 人工智能时代!Python跃升编程语言第一名!
- Fiddler代理配置
- 运行c语言程序显示已停止运行程序,c – “此应用程序已请求运行时以不寻常的方式终止它.”...
- oracle物理结构视频教学,详解Oracle物理结构
- stm32c8t6之跑马灯程序配置
- js小学生图片_小学生画报设计图片
- Coding 码市:携手开发者与创业者,重新定义软件外包
- WITNESS基础教程
- 跳台阶算法的三种实现方案(PHP)