前言
在数字媒体处理惩罚领域,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下令和参数,不断进步本身的技能。祝你学习愉快!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |