【ffmpeg命令入门】重新编码媒体流、设置码率、设置帧速率

news2024/9/22 13:39:14

文章目录

  • 前言
  • ffmpeg的描述
  • 重新编码媒体流
    • 重新编码媒体流的命令
      • ffmpeg支持的媒体流
  • 设置视频码率
    • 视频码率是什么
    • 设置视频的码率
  • 设置文件帧数率
    • 帧数率是什么
    • ffmpeg设置帧数率
  • 总结


前言

在数字媒体处理领域,ffmpeg是一款非常强大的工具,它可以用来进行媒体流的重新编码、设置码率、设置帧速率等操作。ffmpeg的功能强大且复杂,但是一旦掌握了其基本的使用方法,就能够灵活地处理各种媒体文件,满足各种需求。


ffmpeg的描述

ffmpeg是一款通用的媒体转换工具,它可以读取各种类型的输入(包括实时抓取/录制设备),进行过滤,并将它们转换成各种输出格式。

ffmpeg可以从任意数量的输入"文件"中读取数据,这些文件可以是常规文件、管道、网络流、抓取设备等,这些都是通过-i选项指定的。ffmpeg可以写入任意数量的输出"文件",这些文件是通过一个普通的输出url指定的。命令行上找到的任何不能被解释为选项的内容都被视为输出url。

每个输入或输出url原则上可以包含任意数量和类型(视频/音频/字幕/附件/数据)的流。流的数量和/或类型可能受到容器格式的限制。选择哪些流从哪些输入进入哪个输出要么自动完成,要么通过-map选项完成。

在选项中引用输入文件时,你必须使用它们的索引(从0开始)。例如,第一个输入文件是0,第二个是1,等等。同样,文件内的流也是通过它们的索引引用的。例如,2:3指的是第三个输入文件中的第四个流。

作为一般规则,选项应用于下一个指定的文件。因此,顺序很重要,你可以在命令行上多次使用同一个选项。每次出现的选项都会应用于下一个输入或输出文件。此规则的例外是全局选项(例如,详细程度级别),这些选项应该首先被指定。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

重新编码媒体流

重新编码媒体流的命令

我们可以使用ffmpeg把任意他支持的媒体流变成另一个他支持的媒体流,就像这样:

ffmpeg -i input.mp4 output.avi

在这里插入图片描述

D:\Codes\ffmpeg_Command>ffmpeg -i test.mp4 out1.avi

ffmpeg支持的媒体流

FFmpeg支持的文件后缀非常多,包括但不限于以下几种:

  1. 视频格式.mp4.avi.flv.mov.mkv.wmv.3gp等。
  2. 音频格式.mp3.wav.aac.flac.ogg.m4a等。
  3. 封装格式.ts.m3u8(用于HLS流)等。
  4. 图像格式.jpg.png.bmp.gif等。

你可以通过ffmpeg -formats命令来获取FFmpeg所支持的所有文件类型

D:\Codes\ffmpeg_Command>ffmpeg -formats
ffmpeg version 7.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Formats:
 D.. = Demuxing supported
 .E. = Muxing supported
 ..d = Is a device
 ---
 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
 DE  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
//后面还有很多,这里不写出来了

设置视频码率

视频码率是什么

视频码率是指视频数据的传输速率,也就是每秒钟传输的数据量。它通常以比特每秒(bps)或千比特每秒(kbps)为单位来表示。

举个例子,如果一个视频的码率是500 kbps,那么这意味着每秒钟这个视频会传输500千比特的数据。

视频码率对视频质量有很大的影响。一般来说,码率越高,视频质量越好,因为每秒钟传输的数据量更大,能够展示更多的细节。但是,高码率的视频也会占用更多的存储空间和带宽。

所以,选择合适的视频码率是一个平衡的过程,需要在视频质量和存储空间/带宽之间做出权衡。

设置视频的码率

ffmpeg -i test2.mp4 -b:v 2048k -bufsize 2048k out2.mp4

这个命令是使用FFmpeg将一个输入的视频文件input.avi转换为输出的视频文件output.mp4,并在转换过程中设置视频流的码率和缓冲区大小。

具体来说,这个命令的各个部分的含义如下:

  • ffmpeg:这是调用FFmpeg程序的命令。

  • -i input.avi-i选项后面跟的是输入文件的名称,这里是input.avi

  • -b:v 2048k:这是设置视频流的码率为2048kbps(千比特每秒)。-b:v是指定视频码率的选项,2048k是码率的值。码率越大,视频质量越好,但文件大小也会越大。

  • -bufsize 2048k:这是设置码率控制缓冲区的大小,这里是2048kbps。缓冲区大小可以影响视频的质量和文件大小。

  • output.mp4:这是输出文件的名称,这里是output.mp4

设置文件帧数率

帧数率是什么

帧率,也被称为帧频,是用来衡量视频播放流畅度的一个参数。它表示的是每秒钟能够显示的图片的数量,单位通常是FPS(Frames Per Second,每秒帧数)。

举个例子,如果一个视频的帧率是30 FPS,那就意味着每秒钟这个视频会播放30张图片。这些图片以足够快的速度连续播放,使人眼看起来就像是连续的动画。

一般来说,帧率越高,视频看起来就越流畅。例如,大多数电影的帧率是24 FPS,而电视节目可能会使用30 FPS或60 FPS。然而,更高的帧率也意味着需要更多的存储空间和更高的播放要求。

总的来说,帧率是决定视频播放质量的重要因素之一。

ffmpeg设置帧数率

使用-r选项强制设置帧数率:

ffmpeg -i test2.mp4 -r 144 out3.mp4

过程:

frame=   46 fps=0.0 q=33.0 size=       0KiB time=00:00:00.30 bitrate=   1.3kbits/s dup=73 drop=0 speed=0.5frame=  135 fps=130 q=33.0 size=     256KiB time=00:00:00.92 bitrate=2271.0kbits/s dup=125 drop=0 speed=0.frame=  231 fps=149 q=33.0 size=     512KiB time=00:00:01.59 bitrate=2637.7kbits/s dup=181 drop=0 speed=1.frame=  318 fps=154 q=33.0 size=     768KiB time=00:00:02.19 bitrate=2867.2kbits/s dup=231 drop=0 speed=1.frame=  410 fps=159 q=33.0 size=    1280KiB time=00:00:02.83 bitrate=3701.0kbits/s dup=286 drop=0 speed= 1frame=  509 fps=164 q=33.0 size=    1536KiB time=00:00:03.52 bitrate=3574.0kbits/s dup=343 drop=0 speed=1.frame=  608 fps=168 q=33.0 size=    1792KiB time=00:00:04.20 bitrate=3488.4kbits/s dup=400 drop=0 speed=1.frame=  697 fps=169 q=33.0 size=    2048KiB time=00:00:04.82 bitrate=3476.2kbits/s dup=452 drop=0 speed=1.frame=  797 fps=172 q=33.0 size=    2560KiB time=00:00:05.51 bitrate=3803.5kbits/s dup=511 drop=0 speed=1.frame=  889 fps=172 q=33.0 size=    2816KiB time=00:00:06.15 bitrate=3745.1kbits/s dup=564 drop=0 speed=1.
//省略
[out#0/mp4 @ 0000023746653900] video:14502KiB audio:477KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.512872%
frame= 4330 fps=165 q=-1.0 Lsize=   15056KiB time=00:00:30.00 bitrate=4111.3kbits/s dup=2526 drop=0 speed=1.14x
[libx264 @ 000002374665af80] frame I:67    Avg QP:18.77  size: 18885
[libx264 @ 000002374665af80] frame P:1160  Avg QP:23.94  size:  8734
[libx264 @ 000002374665af80] frame B:3103  Avg QP:22.95  size:  1113
[libx264 @ 000002374665af80] consecutive B-frames:  1.9%  4.4%  9.8% 83.9%
[libx264 @ 000002374665af80] mb I  I16..4: 14.1% 80.9%  5.0%
[libx264 @ 000002374665af80] mb P  I16..4:  4.0% 13.5%  1.1%  P16..4: 10.2%  2.8%  0.7%  0.0%  0.0%    skip:67.7%
[libx264 @ 000002374665af80] mb B  I16..4:  0.1%  0.2%  0.0%  B16..8:  9.5%  0.4%  0.0%  direct: 0.1%  skip:89.6%  L0:46.4% L1:53.0% BI: 0.6%
[libx264 @ 000002374665af80] 8x8 transform intra:73.9% inter:73.4%
[libx264 @ 000002374665af80] coded y,uvDC,uvAC intra: 12.4% 19.1% 3.2% inter: 0.7% 0.7% 0.0%
[libx264 @ 000002374665af80] i16 v,h,dc,p: 49% 31% 11%  9%
[libx264 @ 000002374665af80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 48% 15% 30%  1%  1%  1%  1%  1%  1%
[libx264 @ 000002374665af80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39% 15% 20%  4%  5%  6%  4%  5%  2%
[libx264 @ 000002374665af80] i8c dc,h,v,p: 69% 13% 15%  2%
[libx264 @ 000002374665af80] Weighted P-Frames: Y:0.6% UV:0.2%
[libx264 @ 000002374665af80] ref P L0: 68.4%  6.5% 17.6%  7.4%  0.1%
[libx264 @ 000002374665af80] ref B L0: 84.6% 12.3%  3.0%
[libx264 @ 000002374665af80] ref B L1: 97.7%  2.3%
[libx264 @ 000002374665af80] kb/s:3950.77
[aac @ 0000023746669ac0] Qavg: 910.307

总结

通过本文的学习,我们了解了如何使用ffmpeg进行媒体流的重新编码、设置码率和设置帧速率等操作。虽然ffmpeg的命令行参数众多,但是只要掌握了一些基本的命令和概念,就能够灵活地处理各种媒体文件。希望本文能够帮助你入门ffmpeg,为你的媒体处理工作提供帮助。在实际使用中,你可能还需要根据自己的需求去查阅更多的ffmpeg命令和参数,不断提高自己的技能。祝你学习愉快!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化产线 搭配数据采集监控平台 创新与突破

自动化产线在现在的各行各业中应用广泛,已经是现在的生产趋势,不同的自动化生产设备充斥在各行各业中,自动化的设备会产生很多的数据,这些数据如何更科学化的管理,更优质的利用,就需要数据采集监控平台来完…

解决Ubuntu 20.04下外接显示屏无信号问题【多次尝试无坑完整版!!!】

解决Ubuntu 20.04下外接显示屏无信号问题【多次尝试无坑完整版!!!】 一、引言 作为一名开发者,我经常在Windows和Ubuntu之间切换,以满足不同的开发需求。最近,我在使用惠普暗影精灵9(搭载RTX 4…

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…

隐性行为克隆——机器人的复杂行为模仿学习的新表述

介绍 论文地址:https://arxiv.org/pdf/2109.00137.pdf 源码地址:https://github.com/opendilab/DI-engine.git 近年来,人们对机器人学习进行了大量研究,并取得了许多成果。其中,模仿学习法尤其受到关注。这是一种从人…

JavaEE初阶 - IO、存储、硬盘、文件系统相关常识 (二)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…

appium2.0 执行脚本遇到的问题

遇到的问题: appium 上的日志信息: 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上, 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

HarmonyOS NEXT学习——@BuilderParam装饰器

初步理解,相当于VUE的插槽slot Builder function overBuilder() {}Component struct Child {label: string ChildBuilder customBuilder() {}Builder customChangeThisBuilder() {}BuilderParam customBuilderParam: () > void this.customBuilder; // 使用自定…

【TDA4板端部署】基于 Pytorch 训练并部署 ONNX 模型在 TDA4

1 将torch模型转onnx模型 Ti转换工具只支持以下格式: Caffe - 0.17 (caffe-jacinto in gitHub) Tensorflow - 1.12 ONNX - 1.3.0 (opset 9 and 11) TFLite - Tensorflow 2.0-Alpha 基于 Tensorflow、Pytorch、Caffe 等训练框架,训练模型:选择…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道,NameNode存储一个文件元数据,默认是150byte大小的内存空间。 那么,如果出现很多的小文件,就会导致NameNode的内存占用。 但注意,存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

【5G Sub-6GHz模块】专为IoT/eMBB应用而设计的RG520NNA、RG520FEB、RG530FNA、RG500LEU 5G模组

推出全新的5G系列模组: RG520NNADB-M28-SGASA RG520NNADA-M20-SGASA RG520FEBDE-M28-TA0AA RG530FNAEA-M28-SGASA RG530FNAEA-M28-TA0AA RG500LEUAA-M28-TA0AA ——明佳达 1、5G RG520N 系列——专为IoT/eMBB应用而设计的LGA封装模块 RG520N 系列是一款专为 IoT…

Kafka Producer发送消息流程之Sender发送线程和在途请求缓存区

文章目录 1. Sender发送数据1. 发送数据的详细过程:2. 关键参数配置 2. 在途请求缓存区 1. Sender发送数据 Sender线程负责将已经在RecordAccumulator中准备好的消息批次发送到Kafka集群。虽然消息在RecordAccumulator中是按照分区组织的,但Sender线程在…

百日筑基第二十三天-23种设计模式-创建型总汇

百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…

【JavaEE】synchronized原理详解

本文使用的是JDK1.8 目录 引言 Java对象在JVM的结构 对象头 Mark Word Monitor Owner EntryList WaitSet 加锁过程 锁消除 偏向锁 偏向锁使用 重偏向 撤销偏向 轻量级锁 重量级锁 自旋优化 引言 对于synchronized原理讲解之前,我们需要知道Java对象…

如何通过DBC文件看懂CAN通信矩阵

实现汽车CAN通信开发,必不可少要用到DBC文件和CAN通信矩阵。 CAN通信矩阵是指用于描述 CAN 网络中各个节点之间通信关系的表格或矩阵。它通常记录了每个节点能够发送和接收的消息标识符(ID)以及与其他节点之间的通信权限。 通信矩阵在 CAN 网…

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术,可以有效提高系统的扩展性和性能。在Redis中,数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中,可以将负载均衡到不同的服务器上&#…

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议(用户数据包协议) UDP 是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当客户端向接收端发送数据时,客户端不会确认接收端是否存在,就会发出…

【深度学习教程】

文章目录 pytorch官方教程知识蒸馏:https://pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttp…

深入解析公有IP与私有IP:地址分配与使用限制

IP地址在网络基础设施的建设和维护过程中起着至关重要的作用。作为IP地址的两大类型,公有IP和私有IP各自具有独特的分配机制和使用限制。本文将详细分析两者之间的区别,以帮助读者更好地理解和使用IP地址。 1. 公有IP与私有IP概述 IP地址是网络中的唯一…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…