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

@TOC

前言

在数字媒体处理领域,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支持的文件后缀非常多,包括但不限于以下几种:

视频格式:.mp4、.avi、.flv、.mov、.mkv、.wmv、.3gp等。

音频格式:.mp3、.wav、.aac、.flac、.ogg、.m4a等。

封装格式:.ts、.m3u8(用于HLS流)等。

图像格式:.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命令和参数,不断提高自己的技能。祝你学习愉快!

友情链接:

Copyright © 2022 1998年世界杯主题曲_腾讯世界杯 - dg-zmt.com All Rights Reserved.