FFmpeg常用实例详解

FFmpeg 是一个专业的多媒体框架,能够解码、编码、转码、复用、解复用、流式传输、过滤和播放几乎所有格式的媒体文件。
这里通过一些示例简单地介绍下 ffmpeg 命令的基本使用。

一、获取详细信息

ffmpeg -i <inputfile> -hide_banner


其中 -hide_banner 选项用于在输出文件的详细信息时省略 ffmpeg 的版本信息和编译选项等。

ffmpeg -i May.mp4 -hide_banner

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'May.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
  Duration: 00:00:08.03, start: 0.000000, bitrate: 10299 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 10181 kb/s, 30 fps, 30 tbr, 19200 tbn (default)
    Metadata:
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 108 kb/s (default)
    Metadata:
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
At least one output file must be specified

二、格式转换

ffmpeg -i <inputfile> <outputfile>

FFmpeg 是一个强大的音频和视频格式转换器,几乎支持当前所有常用的格式,如:

ffmpeg -i input.avi output.mp4

或者经常需要用到的,将视频文件转为 GIF 动图:

ffmpeg -i input.mp4 output.gif

如果在格式转换时需要保留源视频的质量,可以添加上 -qscale 0 选项(-qscale 的值越低,输出视频的质量越高):

ffmpeg -i input.webm -qscale 0 output.mp4

可以使用 -formats 选项列出 ffmpeg 命令支持的所有格式(很长很长的一个列表。。。):

ffmpeg -formats -hide_banner

File formats:
 D. = Demuxing supported
 .E = Muxing supported
 --
 D  3dostr          3DO STR
  E 3g2             3GP2 (3GPP2 file format)
  E 3gp             3GP (3GPP file format)
 D  4xm             4X Technologies
  E a64             a64 - video for Commodore 64
 D  aa              Audible AA format files
 D  aac             raw ADTS AAC (Advanced Audio Coding)
 D  aax             CRI AAX
 DE ac3             raw AC-3
 DE ac4             raw AC-4
 D  ace             tri-Ace Audio Container
 D  acm             Interplay ACM
 D  act             ACT Voice file format
 D  adf             Artworx Data Format
 D  adp             ADP
 D  ads             Sony PS2 ADS
  E adts            ADTS AAC (Advanced Audio Coding)
 DE adx             CRI ADX
 D  aea             MD STUDIO audio
 D  afc             AFC
 DE aiff            Audio IFF
 D  aix             CRI AIX
 DE alaw            PCM A-law
 D  alias_pix       Alias/Wavefront PIX image
 DE alp             LEGO Racers ALP
 DE amr             3GPP AMR
 D  amrnb           raw AMR-NB
 D  amrwb           raw AMR-WB
  E amv             AMV
 D  anm             Deluxe Paint Animation
 D  apac            raw APAC
 D  apc             CRYO APC
 D  ape             Monkey's Audio
 ...


 三、指定编码
可以通过 -c 选项手动指定输出文件的编码,如:

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

其中 -c:v 用于指定视频编码,-c:a 指定音频编码

PS:视频文件的后缀如 mp4、mkv、avi 等只是表示用来装载媒体流的“容器”类型,而编码时使用的编码方式则另需指定。
当然很多时候 ffmpeg 会根据输出文件的后缀自行选择默认的编码方式,无需手动指定。

只改变视频或者音频流的编码
可以在指定编码时,只改变视频或者音频编码中的一项,另一项则保持原来的格式:

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

-c:v copy 表示复制输入文件中的视频流到输出文件,不重新进行编码

只改变文件后缀
即输入文件中的视频流和音频流同时复制到输出文件,只改变文件后缀

ffmpeg -i input.webm -c:av copy output.mkv

编码列表
查看 FFmpeg 支持的所有音视频编码格式(又一个很长的列表。。。):

ffmpeg -codecs -hide_banner

Codecs:
 D..... = Decoding supported
 .E.... = Encoding supported
 ..V... = Video codec
 ..A... = Audio codec
 ..S... = Subtitle codec
 ..D... = Data codec
 ..T... = Attachment codec
 ...I.. = Intra frame-only codec
 ....L. = Lossy compression
 .....S = Lossless compression
 -------
 D.VI.S 012v                 Uncompressed 4:2:2 10-bit
 D.V.L. 4xm                  4X Movie
 D.VI.S 8bps                 QuickTime 8BPS video
 .EVIL. a64_multi            Multicolor charset for Commodore 64 (encoders: a64multi)
 .EVIL. a64_multi5           Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5)
 D.V..S aasc                 Autodesk RLE
 D.V.L. agm                  Amuse Graphics Movie
 D.VIL. aic                  Apple Intermediate Codec
 DEVI.S alias_pix            Alias/Wavefront PIX image
 DEVIL. amv                  AMV Video
 D.V.L. anm                  Deluxe Paint Animation
 D.V.L. ansi                 ASCII/ANSI art
 DEV..S apng                 APNG (Animated Portable Network Graphics) image
 D.V.L. arbc                 Gryphon's Anim Compressor
 ...


四、视频压缩
编码与比特率
有些时候,基于磁盘空间和网络传输的考虑,需要对视频文件进行压缩处理。其中一种方法就是改变视频的比特率。
在某些情况下,比特率的适当缩减对视频的观看效果并不会产生太大的影响(人眼察觉的范围内)。
当然编码的选择也会对输出文件的大小产生一定的影响,示例如下:

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

-b:v 用于指定视频的比特率。

帧率
另一种方式就是改变视频文件的帧率,也就是人们常常提到的FPS。

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

-r 30 选项用于指定输出视频的帧率为 30 FPS。

分辨率
视频的分辨率也会影响文件的大小,可以使用 -s 选项指定输出文件的分辨率。当然,视频的画幅大小也会产生相应的变化:

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

五、提取音频
通过格式转换,FFmpeg 可以直接将视频文件转为音频文件,只需要指定输出文件的格式为 .mp3 或 .ogg 等。如:

ffmpeg -i input.mp4 output.mp3

同时,也可以在转换时指定音频的格式选项

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3

其中:
-vn :指定输出文件中禁用视频
-ar :指定输出文件中音频的采样率
-ac:指定音频的通道数
-ab:指定音频的比特率
-f:指定输出文件的格式


六、常用实用命令集锦
调整分辨率
将某视频文件的分辨率改为 1280x720:

ffmpeg -i input.mp4 -filter:v scale=1280:720 output.mp4

或者:

ffmpeg -i input.mp4 -s 1280x720 output.mp4

压缩视频文件

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

-vf scale=1280:-1 表示使用视频滤镜进行缩放,将视频宽度设置为 1280,高度自动调整。
-c:v libx264 选择视频编码为 libx264
-preset veryslow 指定编码预设为非常慢,以获得更好的质量
-crf 24 设置恒定质量因子为 24,用于控制编码质量

也可以添加如下选项同时对音频流进行压缩:-c:a aac -strict -2 -b:a 128k

移除音频

ffmpeg -i input.mp4 -an output.mp4

-an 选项表示在输出文件中禁用音频

提取图片

ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

其中各选项的含义:
-r :设置帧率,即每秒有多少帧画面被提取到图片中。默认为 25
-f :指定输出的格式。本例中为图片(image2)
-image-%2d.png :指定提取出的图片的命名方式。本例中最终的命名为 image-01.png、image-02.png 等。如使用 image-%3d.png ,则最终的命名为 image-001.png、imag-002.png 等

裁剪视频
即截取指定范围内的视频画面,裁切掉多余的部分

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

其中 crop=w:h:x:y 用于指定“裁剪框”的大小和位置。
w 表示裁剪部分的宽度(默认为源视频的宽度 iw);
h 表示裁剪部分的高度(默认为源视频的高度 ih;
x 表示 x 轴上裁剪的起始位置(最左边为 0,默认为源视频的中间位置);
y 表示 y 轴上裁剪的起始位置(最顶部为 0,默认为源视频的中间位置)。

改变视频比例
视频比例即视频画幅的长宽比,也就是通常所说的 4:3 和 16:9 等。

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

设置音频封面
即创建以一张静止的图片为画面的视频。

ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -shortest output.mp4

其中的选项和参数可以根据需求自行修改和省略。

-loop 1:设置输入图像循环播放 1 次。
-i inputimage.jpg:指定输入的图像文件为 inputimage.jpg。
-i inputaudio.wav:指定输入的音频文件为 inputaudio.wav。
-c:v libx264:使用 libx264 进行视频编码。
-tune stillimage:针对静态图像进行优化。
-c:a aac:音频编码使用 aac。
-b:a 192k:音频比特率设置为 192k。
-shortest:以最短的输入(音频或图像)结束输出

截取视频片段

ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 60 output.mp4

截取视频中从第 50 秒开始,持续时间为一分钟的视频片段。

-ss 用于指定视频片段的开始时间;
-t 指定视频片段的持续时间,单位都为秒。

也可以使用如下方式:

ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

以上命令也适用于音频文件。

视频分割

ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4

将输入的视频文件分割为两段,第一段为从最开始到第 30 秒;第二段为第 30 秒到视频结束。

-t 00:00:30 前面省略了 -ss 00:00:00;
-ss 00:00:30 后面省略了 -t 剩余时间。
有点类似于截取多个连续的视频片段。

视频合并
首先创建包含各媒体文件路径列表的文本文件 join.txt :
file '~/myvideos/part1.mp4'
file '~/myvideos/part2.mp4'
file '~/myvideos/part3.mp4'
使用 -f concat 选项对多个视频进行合并:

ffmpeg -f concat -i join.txt -c copy output.mp4

添加字幕文件

ffmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4

-map 0:将输入视频的所有流映射到输出。
-map 1:将输入字幕的所有流映射到输出。
-c copy:复制音频和视频的编码格式。
-c:v libx264:视频编码使用 libx264。
-crf 23:设置恒定质量因子为 23。
-preset veryfast:编码预设模式为非常快。

改变视频播放速度(音频不受影响)

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

上述命令会加快视频画面的播放速度,音频播放速度不变。
如果想放慢视频画面的切换速度,可以相应地将 setpts=0.5*PTS 中的 0.5 改为大于 1 的数值。

Padding
即宽银幕视频中上下的两道“黑边”,可以使用 FFmpeg 命令添加类似的效果:

ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" output.mp4

该效果由 -vf 选项的 pad 参数指定,可以根据情况自行修改。

-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black":使用视频滤镜进行处理,将视频缩放为 1920x1080 的尺寸,并且保持原始宽高比缩小,同时进行填充,填充的颜色为黑色

从图片创建视频

ffmpeg -framerate 1 -i img%02d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

把当前目录下的多张图片(名字为 img01.jpg、img02.jpg 的形式)组合为一个视频文件,效果类似于自动播放的 PPT。
每秒切换一张图片。

ffmpeg -framerate 30 -i img%02d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4

也是将当前目录下的多张图片组合成一个完整的视频,该视频帧率为 30 FPS。
每帧切换一张图片。


调整码率
调整码率(transrating)指的是,改变编码的比特率,一般用来将视频文件的体积变小。下面的例子指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。

ffmpeg -i input.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K output.mp4


见的容器格式有以下几种。一般来说,视频文件的后缀名反映了它的容器格式。

MP4
MKV
WebM
AVI

常用的视频编码格式如下。

H.262
H.264
H.265

还有几种无版权的视频编码格式。

VP8
VP9
AV1

常用的音频编码格式如下。

MP3
AAC

FFmpeg 内置的视频编码器。

libx264:最流行的开源 H.264 编码器
NVENC:基于 NVIDIA GPU 的 H.264 编码器
libx265:开源的 HEVC 编码器
libvpx:谷歌的 VP8 和 VP9 编码器
libaom:AV1 编码器

音频编码器如下。

libfdk-aac
aac

FFmpeg 常用的命令行参数如下。

-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/572211.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240425,模板

感觉比学C那会好了点&#xff0c;不怎么出现照着抄但是就是不能跑的情况&#xff0c;哭死&#xff0c;但是学的顺又不复习&#xff0c;第二天跟没学一样&#xff0c;笑死&#xff0c;要是能给我开个过目不忘的挂&#xff0c;爽的不要不要的 呵呵呵蠢女人&#xff0c;别忘了你C的…

服装厂生产ERP有哪些功能

在当今竞争激烈的服装行业中&#xff0c;企业如何在保证产品质量的同时提高生产效率和市场响应速度?答案在于智能化的生产管理。ERP(企业资源计划)系统作为现代企业管理的核心工具&#xff0c;对于服装厂而言&#xff0c;它的功能不仅需要全面&#xff0c;更要针对性强、操作简…

Python浅谈清朝秋海棠叶版图

1、清朝疆域概述&#xff1a; 清朝是我国最后一个封建王朝&#xff0c;其始于1616年建州女真部努尔哈赤建立后金&#xff0c;此后统一女真各部、东北地区。后又降服漠南蒙古&#xff0c;1644年入关打败农民起义军、灭南明&#xff0c;削三藩&#xff0c;复台湾。后又收外蒙&am…

展馆设计中必不可少的场景

1、一般场景展营造 一般场景是经过对实物进行概括、提炼&#xff0c;进行符号化、审美化的处理后引入展示现场&#xff0c;而并不是将与展品有关联的事物统统罗列其中。 2、复原场景营造 复原场景营造常用于博物馆、纪念馆陈列展示中。运用复原场景就是为了营造历史上曾存在的&…

java中2个List集合值和顺序完全一样,如果判断他们相等

和判断2个字符串是否相等一样&#xff0c;List可以通过equals来判断2个集合是否相等 示例代码如下&#xff1a; 1、相等的示例 2、顺序不一致 3、值不一致

简单使用优雅的程序计数器-StopWatch

一、引入hutool-core 5.8.18包 二、代码 public static void main(String[] args) throws InterruptedException {StopWatch stopWatch new StopWatch("测试StopWatch");stopWatch.start("任务1");// 任务1花费1000毫秒Thread.sleep(1000);stopWatch.st…

Python入门与进阶

基础语法语句 在线python代码运行网址 &#xff08;推荐使用python3网址&#xff09; 基础语法&输入输出 python等号赋值 赋值类型描述示例基本赋值使用等号&#xff08;&#xff09;进行赋值。x10同一个值给多个变量可以使用一个值来赋值给多个变量。xyz10多重赋值可以…

Bentley二次开发教程27-交互窗口-界面开发方法

界面设计概述 引言 在我们掌握了交互式工具的使用方法后&#xff0c;在使用过程中会发现&#xff1a;虽然工具中拥有多种交互的手段&#xff0c;但仅凭工具中鼠标&#xff0c;特殊按键与信息提示等交互方法&#xff0c;没有办法同时对多个信息进行展示&#xff0c;也不够直观…

Redis底层数据结构之IntSet

目录 一、概述二、IntSet结构三、自动升级 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️redis底层数据结构之Int…

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开&#xff0c;一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…

ROS python实现乌龟跟随

产生两只乌龟&#xff0c;中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置&#xff0c;并且键盘控制时&#xff0c;只是控制 A 的运动&#xff0c;但是 B 可以跟随 A 运行 乌龟跟随实现的核心&#xff0c;是乌龟A和B都要发布相对世界坐标系的坐标信息&#xff0c;然后&am…

按钮获取验证码倒计时60秒

把倒计时存在缓存里刷新页面依旧是接着倒计时 <el-buttonsize"large"class"btnStyle":class"btnStyleClass":style"buttonStyle":disabled"countdownActive"click"handleClick">{{ buttonText }}</el-b…

算法-KMP算法

时间复杂度&#xff1a; public int strStr(String haystack, String needle) {int[] next new int[needle.length()];//next数组的生成next[0] 0;int prefixLen 0;//共同前后缀长度int i 1, j 1;//i,j复用while (i < needle.length()) {if (needle.charAt(prefixLen)…

Shader实战(3):贴图像素化风格实现

话不多说&#xff0c;将以下shader赋给材质贴上贴图即可。 Shader "HQY/Shader2" //自己改名 {Properties{_Diffuse ("Diffuse", Color) (1,1,1,1)_MainTex ("MainTex", 2D) "white" {}_Specular("Specular", Color) (…

AI伙伴是什么

AI伙伴&#xff0c;或称为人工智能伙伴&#xff0c;是指能够执行特定任务、协助人类活动&#xff0c;甚至进行社交互动的智能系统。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; AI伙伴通常是通过集成了先进的技术如语音识别、语义理解和图像识别等来实现与…

ubuntu扩展根目录磁盘空间

ubuntu扩展根目录磁盘空间 扩展虚拟机磁盘空间 查看现有磁盘状态 查询现有分区状态&#xff0c;/dev/sda是我们要扩展的磁盘 fdisk -l 开始进行磁盘空间的扩容 parted /dev/sda#扩展3号分区的空间 resizepart 3刷新分区空间 resize2fs /dev/sda3查询扩展结果&#xff0c;…

Golang GMP解读

概念梳理 1. 1 线程 通常语义中的线程&#xff0c;指的是内核级线程&#xff0c;核心点如下&#xff1a; 是操作系统最小调度单元&#xff1b;创建、销毁、调度交由内核完成&#xff0c;cpu 需完成用户态与内核态间的切换&#xff1b;可充分利用多核&#xff0c;实现并行. …

HTTP 网络协议请求的消息结构,具体详解(2024-04-25)

一、简介 HTTP 是基于客户端/服务端&#xff08;C/S&#xff09;的架构模型&#xff0c;通过一个可靠的链接来交换信息&#xff0c;是一个无状态的请求/响应协议。 HTTP 消息是客户端和服务器之间通信的基础&#xff0c;它们由一系列的文本行组成&#xff0c;遵循特定的格式和…

热门项目!知识付费小程序源码系统 带完整的安装代码包以及安装部署教程

近年来&#xff0c;随着在线教育、知识分享等领域的蓬勃发展&#xff0c;知识付费市场逐渐壮大。越来越多的用户愿意为高质量的知识内容付费&#xff0c;而企业和个人也看到了知识付费的巨大商机。然而&#xff0c;对于许多没有技术背景的用户来说&#xff0c;搭建一个稳定、易…

自定义数据 微调CLIP (结合paper)

CLIP 是 Contrastive Language-Image Pre-training 的缩写&#xff0c;是一个擅长理解文本和图像之间关系的模型&#xff0c;下面是一个简单的介绍&#xff1a; 优点&#xff1a; CLIP 在零样本学习方面特别强大&#xff0c;它可以&#xff08;用自然语言&#xff09;给出图像…
最新文章