FFmpeg 最最强大的视频工具
FFmpeg 最最强大的视频工具 (转码/压缩/剪辑/滤镜/水印/录屏/Gif/…)
https://www.bilibili.com/video/BV1AT411J7cH/
奇乐编程学院 2022-07-11 14:43:53
简介
嗨大家好,我是罗斯,今天我们来讲一个最最强大的视频处理工具, Ffmpeg ,没有之一,几乎你能想到的所有功能,比如视频格式的转换,压缩拼接,添加水印,甚至包括声音的处理,录屏GIF动图的转换都可以用它来完成。
它本身是一个命令行工具,很尽量完全免费,所有平台通用。
正因为它是一个命令行工具,你可以很方便的在脚本中调用它,创建批处理,用来进行自动化等等。
可能你之前没有听过他,但其实相当多的视频工具平台播放器都用到了, Ffmpeg 或者它的核心库,另外有些观众可能知道,我的视频都是用脚本剪辑的,渲染的部分自然也用到了它,所以今天我想跟大家介绍一下, Ffmpeg 的基本用法和一些实用的小技巧。
安装
首先我们还是稍微啰嗦一下, Ffmpeg 的下载和安装,大家也可以直接跳过这段,在Linux Mac下最简单的动作方式,还是使用包管理工具,但是在Windows下也可以用第三方的choco,scoop来安装等等。
否则大家可以去官网这里,我以Windows为例,选择最下面的这个地址,然后找到win64gpl shared(ffmpeg-master-latest-win64-gpl-shared.zip)这个文件。
这是一个动态链接的版本,文件体积会稍微小一些,里面包含了所有要用到的组件和解码器。
最后我们解压缩,在bin目录下可以找到这三个可执行文件,这里的 Ffmpeg 就是我们要用到的命令。另外如果你希望在全局范围内,都可以调用到这个命令,那么还需要将bin目录的路径,添加到path环境变量中。
小试牛刀
配置完毕之后,我们先来小试牛刀一下,先来介绍一下 Ffmpeg 最最基本的用法。
首先我们通过GUI指定输入文件的名字,然后在最后一个参数指定要输出的文件名,那么 Ffmpeg 会自动根据扩展名转换,视频文件的格式。
ffmpeg -i test.avi test.mp4
mpv test.mp4
C:\Users\CoderDream\Videos\ffmpeg>ffmpeg -i test.avi test.mp4
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, 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-libvidstab –enable-libvmaf –enable-libzimg –enable-amf –enable-cuda-llvm –enable-cuvid –enable-ffnvcodec –enable-nvdec –enable-nvenc –enable-d3d11va –enable-dxva2 –enable-libvpl –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 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, avi, from ‘test.avi’:
Metadata:
software : Lavf58.19.102
Duration: 00:00:07.17, start: 0.000000, bitrate: 1658 kb/s
Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 640x300, 224 kb/s, 24 fps, 24 tbr, 24 tbn
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 000001818e9391c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000001818e9391c0] profile High, level 2.1, 4:2:0, 8-bit
[libx264 @ 000001818e9391c0] 264 - core 164 r3106 eaa68fa - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=9 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to ‘test.mp4’:
Metadata:
software : Lavf58.19.102
encoder : Lavf60.3.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 640x300, q=2-31, 24 fps, 12288 tbn
Metadata:
encoder : Lavc60.3.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.3.100 aac
frame= 174 fps=0.0 q=-1.0 Lsize= 277kB time=00:00:07.15 bitrate= 317.2kbits/s dup=2 drop=0 speed=22.9x
video:185kB audio:85kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.458137%
[libx264 @ 000001818e9391c0] frame I:4 Avg QP:11.92 size: 4427
[libx264 @ 000001818e9391c0] frame P:67 Avg QP:21.49 size: 1704
[libx264 @ 000001818e9391c0] frame B:103 Avg QP:21.61 size: 556
[libx264 @ 000001818e9391c0] consecutive B-frames: 14.9% 12.6% 17.2% 55.2%
[libx264 @ 000001818e9391c0] mb I I16..4: 80.0% 12.3% 7.7%
[libx264 @ 000001818e9391c0] mb P I16..4: 5.1% 17.6% 1.7% P16..4: 12.6% 4.7% 1.3% 0.0% 0.0% skip:57.0%
[libx264 @ 000001818e9391c0] mb B I16..4: 3.3% 1.0% 0.1% B16..8: 13.2% 2.5% 0.2% direct: 2.0% skip:77.8% L0:48.6% L1:46.4% BI: 5.0%
[libx264 @ 000001818e9391c0] 8x8 transform intra:53.6% inter:72.0%
[libx264 @ 000001818e9391c0] coded y,uvDC,uvAC intra: 13.0% 34.4% 19.7% inter: 1.9% 7.4% 2.4%
[libx264 @ 000001818e9391c0] i16 v,h,dc,p: 76% 9% 8% 7%
[libx264 @ 000001818e9391c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 11% 43% 3% 2% 3% 2% 3% 2%
[libx264 @ 000001818e9391c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 22% 27% 4% 4% 6% 3% 5% 3%
[libx264 @ 000001818e9391c0] i8c dc,h,v,p: 66% 13% 12% 8%
[libx264 @ 000001818e9391c0] Weighted P-Frames: Y:6.0% UV:6.0%
[libx264 @ 000001818e9391c0] ref P L0: 70.8% 7.9% 14.7% 6.6%
[libx264 @ 000001818e9391c0] ref B L0: 85.2% 12.9% 1.9%
[libx264 @ 000001818e9391c0] ref B L1: 96.6% 3.4%
[libx264 @ 000001818e9391c0] kb/s:208.71
[aac @ 000001818eabb980] Qavg: 17834.014C:\Users\CoderDream\Videos\ffmpeg>
既然说到了格式,我们就先来定义一下什么是视频文件的格式,像我们平时用到mp4,准确来说是视频文件的一种封装格式,或者也叫容器格式,它里面包含了视频流,音频流,甚至包括字幕章节和一些其他的元数据。
而其中的音频视频流,又可以采用不同的编码格式,那么什么是编码呢?
编码解决的是如何将每一帧的画面存储成二进制的数据保存在硬盘上,或者通过网络传输。显然不同的编码,对于视频的质量和压缩率有很大的影响,对mp4文件,目前使用最广泛的视频编码是H264。
它有很多不同的名字,但实际上说的都是同一个东西,这样显得比较专业一些,可以看到 Ffmpeg ,也默认帮我们选择了H264编码。
当然我们可以通过更新冒号V,去手动指定一个视频编码器,这里的lb x264,其实就是 Ffmpeg 默认提供的一个,用纯软件实现的H264编码器,如果你使用的是NVIDIA显卡的话,还可以用nb encoder进行硬件加速,这里我做了一个简单的时间比较,分别用lb x264和nb encoder,对同一段视频进行编码,可以看到第二种明显快了不少,所以如果你显卡支持的话,还是建议首选NBENCODER,因为它可以帮你节省不少时间。
timeit ffmpeg -i test.avi -loglevel error -c:v libx264 output.mp4 -y
timeit ffmpeg -i test.avi -loglevel error -c:v libx264_nvenc output.mp4 -y
当然H264并不是唯一的视频编码格式,我们还可以选择宣称拥有更高压缩率的,H265,VP9等等,但考虑到硬件支持度,编码效率,当然还有使用许可的限制,目前应用最广泛的视频编码依然还是H264,比如大家现在看到的视频,包括B站上的绝大多数视频,都是用H264编码的。
接下来我们以它为例,那么除了视频软件之外,我们还可以用F Ffmpeg 来转换音频。
ffmpeg -i sound.wav sound.mp3
,甚至可以用它来转换图片, 或者更常见的用法是用它来提取视频中的缩略图等等,这个我们待会讲到。
ffmpeg -i test.mp4 -vf “fps=1/10,scale=-2:720” thumbnail-%3d.jpg
preset
另外在转换视频的时候,我们可以设置一些其他的参数,来压缩视频文件的大小,比如对于H264编码器,我们可以设置一个预设preset,它可以是下面这些取值。
最上面的ultra fast,拥有最快的编码速度,但同时会产生一个较大的文件,最下面的very slow,虽然速度最慢,但生成的文件较小,这个参数呢允许你在编码速度和文件大小时间,做一些取舍。
crf
第二个非常重要的参数是crf,大家不用过于纠结他名字的具体含义,它是用来控制图片的质量的,取值范围是051,这个值越大代表图片的质量越差,其中零代表无损压缩输出的文件较大,51代表最差的质量,但可以生成较小的文件,实际使用中,我们最常用到的范围是1928。
下面我以不同的CRF值来编码了同一个视频,大家可以观察,他们在图像质量和文件大小上的区别。
ffmpeg -i test.avi -c:v libx264 -crf 20 output_20.mp4
ffmpeg -i test.avi -c:v libx264 -crf 30 output_30.mp4
ffmpeg -i test.avi -c:v libx264 -crf 40 output_40.mp4
ffmpeg -i test.avi -c:v libx264 -crf 50 output_50.mp4
和之前preset不一样的是,这里的crf,允许我们在视频文件大小和图像质量,之间做一些权衡。
过滤器
说完了脚本的格式转换之后,我们来讲一下FFPX中另一个重要的功能过滤器。过滤器可以对视频图像进行变换,比如修改它的尺寸,裁剪旋转,添加滤镜等等,并且我们可以去指定一系列的过滤器,前一个过滤器的输出,会直接作为下一个过滤器的输入。
缩放
比如我们可以将视频先缩放为原先的0.5倍,然后再将它旋转90度,这里我们用参数杠VF来指定一个过滤器,如果要修改视频的尺寸,我们可以用scale,后面我们输入缩放之后的长度和宽度,中间以冒号分隔
我们也可以将其中任意一个参数设置为-2,让 Ffmpeg 根据另外一个参数帮我们自动推算。
比如想将视频转化为720P,那么可以简写为-2冒号720。
旋转
如果要旋转视频,我们可以用另一个过滤器,transpose后面的数字代表旋转的方向,我们可以在文档中看到,这里的2代表将视频90度逆时针旋转。
当然不同的过滤器可以相互组合,比如我们可以先缩放再旋转,我们只需要将它们以逗号分隔即可。
ffmpeg -i test.avi -c:v libx264 -vf “scale=256:256,transpose=1” output.mp4
裁剪
如果我们想要裁剪视频中的某一块区域,可以用到另一个过滤器crop,这里的四个数字分别代表区域的宽和高,以及左上角的XY坐标,另外他们也可以是一个表达式,比如我们可以将宽高设为1/3,原始视频的宽度和高度,这里的iw根据名字可以猜到,它代表输出视频的宽度。
除了之前讲到的这三种过滤器之外,我们还可以在文档中找到其他上百种的过滤器,它们的用法都一样,首先通过参数 -vf 指定一个视频过滤器,然后输入过滤器的名字加等号,后面指定不同的参数参数之间用冒号分隔。
如果希望将多个过滤器组合起来使用的话,还需要将它们用逗号分隔,那么过滤器的部分我们就暂时讲到这里。
剪切与合并
接下来我们来讲一下, Ffmpeg 对视频的剪切与合并,如果要剪切出视频的某个片段,我们会用到两个参数,第一个 -ss 指定了片段的起始位置,第二个 -t 表示片段的时长,这里我们可以用十分秒的格式,也可以直接填写描述,但需要注意的是,**-ss** 需要放在 -t 参数的后面,这样才能做到分毫不差的剪切。如果将 -ss 放在 -t 参数之前,我们虽然可以快速定位片段的起点,但由于使用的是关键帧定位,所以剪切的起始位置可能会稍有偏差。这种方式呢比较适合于较长的视频,因为定位的速度很快,另外我们可以用 -to 来替代 -t ,指定一个片段的中止位置,这两个参数都可以用于指定片段的时间范围,只不过表示的方式不同而已。
如果要合并视频的话,我们需要先将所有的文件列举在一个,文本文档中,使用下面这种格式,然后通过 -f concat 指定,接下来要输入的文件是一个视频列表,后面的 -i 传入了这个列表,文件在后面的 -c copy 代表我们不希望重新编码,而是直接拷贝原始视频的数据,因为我们输出的视频格式是完全一样的,重新编码自然会浪费很多时间。
ffmpeg -f concat -i mylist.txt -c copy output.mp4
音频过滤器
和视频过滤器一样,我们同样可以用过滤器对音频进行处理,不过这次我们用到的是GIF参数, Ffmpeg ,对音频的支持同样是相当齐全的,比如我们可以用volume来调节音量的大小,用LOL来统一视频的音量,添加高通低通滤波器甚至均衡器等等。
ffmpeg -i test.mp4 -af “volume=1.5” output.mp4
ffmpeg -i test.mp4 -af “loudnorm=I=-5:LRA=A” output.mp4
ffmpeg -i test.mp4 -af “equalizer=f=1000:width_type=h:width=200:g=-10” output.mp4
有时候我们还希望删除视频中的音频轨,比如创建一个无声的视频,那么可以用到 -an 参数类似的 Ffmpeg ,还提供 -vn, -sn, -dn,分别用来删除视频轨、字幕,还有数据流等等。
到这里呢我们就讲完了, Ffmpeg 最最基本的概念和用法,在视频的最后,我想给大家介绍一些比较实用的小技巧。
小技巧
创建缩略图
首先第一个创建视频的缩略图,这里用到了两个过滤器,第一个 fps 指定了输出文件的帧率,1/10代表每十秒输出一帧画面,而后面的 scale 指定了输出图像的大小,最后是图片的文件名,由thumbnail加上编号组成,格式为jpg。
ffmpeg -i test.mp4 -vf “fps=1/10, scale=-2:720” thumbnail-%03d.jpg
这个命令会在当前目录下输出,若干张视频的缩略图
添加水印
第二个技巧给视频添加水印,我们需要先准备一张图片,然后将原始视频和水印图片同时输入给 Ffmpeg ,后面的过滤器,overlay用于将水印叠加在原始视频的上面,在后面的这两个参数,指定了水印在图像中的位置
ffmpeg -i test.mp4 -i cat.jpg -filter_complex “overlay=100:100” output.mp4
GIF动图的转换
第三个技巧,GIF动图的转换,由于GIF自身编码格式的限制,不太适合于较大或者较长的视频,所以我们需要先剪切出一个片段,然后用过滤器播放视频,并且降低视频的帧率,最后这部分的纯粹是,因为GIF自身256色的限制,因此需要单独创建一个调色板,运行命令可以帮我们生成一个高质量的GIF动图。
1 |
|
屏幕录像
最后的一个技巧,利用 Ffmpeg 来进行屏幕录像,也是我目前自己使用的录屏方式
1 |
|
它虽然效率上不如OBS、ShadowPlay这些工具,但是由于不需要额外安装软件配合,让过滤器可以轻易实现各种效果,用起来是相当顺手的。
说了这么多,我们今天也不过只提到了 Ffmpeg 的冰山一角,不过希望大家能够认识到,这样一款强大的视频处理工具,并且慢慢使用起来,它更多的用法和细节全都在官方详尽的文档中,非常值得去研究一下。
ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
这个命令使用 FFmpeg 工具将一个 FLAC 音频文件转换为 MP3 格式。具体来说,命令的每个部分执行不同的任务。下面是对该命令每个选项的详细解释:
1ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
1.
ffmpeg
- 这是 FFmpeg 的命令行工具,用于处理多媒体文件的转换、编辑等操作。
- FFmpeg 是一个强大的开源框架,支持处理音视频数据,包括格式转换、剪切、合并、录制等。
2.
-i in.flac
-i
是输入文件的参数,用来指定你想要转换的原始音频文件。in.flac
是输入文件名,指的是你要转换的音频文件,它是 FLAC 格式(无损音频格式)。你可以把这个名字换成你自己的文件路径。3.
-acodec libmp3lame
-acodec
参数指定输出音频的编解码器(audio codec)。在这里,它设置输出音频的编码器为 libmp3lame。- libmp3lame 是 FFmpeg 使用的 MP3 编码器,它实现了将音频数据转换为 MP3 格式的功能。
因此,这个选项告诉 FFmpeg 将音频编码为 MP3 格式。
4.
-ar 44100
-ar
是用于设置输出音频的采样率(audio sample rate)的参数。采样率指的是每秒钟采集多少次音频数据。44100
表示将音频转换为 44.1 kHz(每秒 44,100 次采样),这是 CD 音质的标准采样率。如果不指定该选项,FFmpeg 会默认使用输入音频的采样率。
5.
-ab 320k
-ab
用来设置音频比特率(audio bitrate)。比特率控制了音频的质量和文件的大小,单位是比特每秒(bps)。320k
表示将输出音频的比特率设置为 320 kbps,这是一种高质量的音频比特率,适合用来生成高保真度的 MP3 文件。如果你选择一个较低的比特率(例如 128k 或 192k),音频文件会更小,但质量可能会下降。
6.
-ac 2
-ac
参数设置输出音频的通道数(audio channels)。音频通道指的是声音的输出方式,例如单声道(Mono)或立体声(Stereo)。2
表示输出为 立体声(Stereo),即两个通道(左声道和右声道)。如果你想要单声道音频,可以将2
改为1
。7.
out.mp3
- 这是输出文件的名称和格式。FFmpeg 会将转换后的音频保存为
out.mp3
,即 MP3 格式的音频文件。- 你可以根据需要修改输出文件的路径和名称。
总结:
这个命令的作用是将一个 FLAC 音频文件(
in.flac
)转换为 MP3 格式(out.mp3
)。转换过程中,它会:
- 使用 libmp3lame 编解码器来编码音频;
- 设置输出音频的采样率为 44.1 kHz(标准 CD 音质);
- 设置音频比特率为 320 kbps(高质量音频);
- 设置输出为 立体声(2 通道)。
示例:
假设你有一个
music.flac
文件,执行以下命令:
1ffmpeg -i music.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 music.mp3
这将会把
music.flac
转换为music.mp3
,并确保音频质量高且符合常见的标准。常用参数:
-ar
采样率(单位:Hz),常见值有 44100、48000、96000。-ab
比特率(单位:bps),常见值有 128k、192k、320k,数字越大,音质越高,文件越大。-ac
通道数(1 为单声道,2 为立体声)。希望这些解释对你有帮助!如果你有其他问题,随时告诉我!
常用的音频转换参数
在使用 FFmpeg 进行音频转换时,有许多参数可以帮助你控制音频的输出格式、质量、通道、采样率等。以下是一些常用的音频转换参数及其详细解释和示例。
常用的音频转换参数
-acodec
: 指定音频编码器-ab
: 设置音频比特率-ar
: 设置音频采样率-ac
: 设置音频通道数(单声道或立体声)-vn
: 禁用视频(如果输入文件包含视频)-sample_fmt
: 设置音频样本格式-channels
: 设置音频通道数(与-ac
类似)-f
: 强制输出格式-metadata
: 设置输出音频文件的元数据(如标题、艺术家等)-t
: 设置输出文件的持续时间-ss
: 设置从输入文件的某个时间点开始转换-vol
: 调整音频的音量详细解释和示例
1.
-acodec
: 指定音频编码器
- 描述: 设置要使用的音频编解码器(audio codec)。常用的音频编解码器有 libmp3lame(MP3 编码器),aac(AAC 编码器),flac(FLAC 编码器)等。
- 示例:
1ffmpeg -i input.wav -acodec libmp3lame output.mp3
2.
-ab
: 设置音频比特率
- 描述: 设置音频的比特率(单位为 bps)。比特率越高,音质越好,但文件也越大。
- 常用值: 128k、192k、256k、320k。
- 示例:
1ffmpeg -i input.wav -acodec libmp3lame -ab 192k output.mp3
3.
-ar
: 设置音频采样率
- 描述: 设置音频的采样率(单位为 Hz)。常见的采样率有 44100 Hz(标准 CD 音质)和 48000 Hz(用于视频制作的标准)。
- 示例:
1ffmpeg -i input.wav -ar 44100 -acodec libmp3lame output.mp3
4.
-ac
: 设置音频通道数
- 描述: 设置输出音频的通道数。1 表示单声道,2 表示立体声,更多通道则用于环绕声等。
- 示例:
1
2
ffmpeg -i input.wav -ac 2 -acodec libmp3lame output.mp3 # 立体声
ffmpeg -i input.wav -ac 1 -acodec libmp3lame output.mp3 # 单声道5.
-vn
: 禁用视频
- 描述: 如果输入文件包含视频,该选项将忽略视频流,只处理音频。
- 示例:
1ffmpeg -i video.mp4 -vn -acodec libmp3lame output.mp3
6.
-sample_fmt
: 设置音频样本格式
- 描述: 设置音频样本的格式。常见格式有
s16
(16位整数)、flt
(浮点数格式)等。这个参数对于特定的音频编码器有用。- 示例:
1ffmpeg -i input.wav -sample_fmt s16 -acodec libmp3lame output.mp3
7.
-channels
: 设置音频通道数(与-ac
类似)
- 描述: 该参数可以替代
-ac
,设置音频的通道数。1 是单声道,2 是立体声。- 示例:
1ffmpeg -i input.wav -channels 2 output.mp3
8.
-f
: 强制输出格式
- 描述: 强制设置输出文件格式。对于某些特殊需求时,强制使用特定格式。
- 示例:
1ffmpeg -i input.wav -f mp3 output.mp3
9.
-metadata
: 设置输出音频的元数据
- 描述: 可以设置输出文件的标签,如标题、艺术家、专辑等。元数据对于管理音乐文件非常有用。
- 示例:
1
ffmpeg -i input.wav -metadata title="My Song" -metadata artist="My Artist" -acodec libmp3lame output.mp3
10.
-t
: 设置输出文件的持续时间
- 描述: 设置输出音频文件的时长,可以截取输入文件的部分内容。单位为秒。
- 示例:
这将截取前 30 秒的音频并保存为 MP3 文件。
1ffmpeg -i input.wav -t 30 -acodec libmp3lame output.mp3
11.
-ss
: 设置从输入文件的某个时间点开始转换
- 描述: 设置开始处理的时间点,单位为秒或
hh:mm:ss
格式。- 示例:
这将从 1 分 30 秒开始进行转换。
1ffmpeg -i input.wav -ss 00:01:30 -acodec libmp3lame output.mp3
12.
-vol
: 调整音量
- 描述: 调整音频文件的音量,单位为百分比。例如,
-vol 200
表示音量为原来的 2 倍。- 示例:
这将音量调高为原来的两倍。
1ffmpeg -i input.wav -vol 256 -acodec libmp3lame output.mp3
综合示例
假设你有一个 WAV 文件
music.wav
,你想将其转换为 MP3 格式,设置为 320 kbps 比特率,44.1 kHz 采样率,立体声,且从文件的 1 分钟开始,持续转换 30 秒的内容,同时添加元数据:
1
ffmpeg -i music.wav -ss 00:01:00 -t 30 -acodec libmp3lame -ab 320k -ar 44100 -ac 2 -metadata title="Song Title" -metadata artist="Artist Name" output.mp3
总结
FFmpeg 提供了丰富的参数来控制音频转换的各个方面,包括音频编解码器、采样率、比特率、通道数等。通过合理选择这些参数,可以定制化音频输出,确保其符合你的需求。
如果你有更多问题或具体需求,欢迎继续提问!
常用ffmpeg命令
ffmpeg 迷途小书童 4年前 (2020-09-29) 7477次浏览 0个评论
文章目录
软硬件环境视频看这里下载及安装获取音频/视频文件信息转换视频格式视频截取视频拼接更改视频的分辨率改变音视频的编码方式提取视频中的音频提取图像m3u8切片调整视频播放速度编辑视频寻求帮助
软硬件环境
- windows 10 64bit
- ffmpeg 3.4.8
视频看这里
此处是 youtube
的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。
下载及安装
从官网下载编译好的二进制文件 http://ffmpeg.org/download.html,并将其路径加入到系统环境变量中
获取音频/视频文件信息
显示媒体文件的信息,执行 ffmpeg -i test.mp4
1 |
|
在上面的输出中可以看到媒体文件的信息,以及 ffmpeg
的信息,例如版本、配置细节、版权标记、构建参数和库选项等
转换视频格式
从 mp4
转换成 avi
1 |
|
视频截取
从视频的第10秒开始,截取长度为30秒的视频,维持编码方式不变
1 |
|
视频拼接
用一个 txt
文件将需要拼接在一起的视频文件组织起来,格式是
1 |
|
有了上面的文本文件,就可以使用 ffmpeg
进行拼接了,命令是
1 |
|
更改视频的分辨率
将原视频中的分辨率更改为1280×720,音频编码方式不变
1 |
|
如果还想更改视频比例的话,可以这样
1 |
|
改变音视频的编码方式
也就是转码,可以指定编码方式
1 |
|
提取视频中的音频
使用参数 -vn
,就是 disable video
的意思
1 |
|
对应的,如果想去掉音频,使用参数 -an
1 |
|
提取图像
1 |
|
其中 -r
表示帧速度,-r 1
就是每一秒提取一张图片的意思,提取出来的图片命名格式是 image_01.png
、image_02.png
、image_03.png
,以此类推
m3u8切片
m3u8
非常适合在网络上播放,ffmpeg
可以将本地视频文件转化成 m3u8
索引加 ts
视频的组合。这样,只要将生成的文件拷贝到类似 nginx
这样的 web
服务上,就可以实现视频点播了
1 |
|
调整视频播放速度
下面的示例是2倍速的转换,如果是原来的1/2速度,则参数变为 setpts=2*PTS
1 |
|
编辑视频
可以修改 original_network_id
、transport_stream_id
、service_id
等等,streamid
代表音视频 pid
,可以修改 video pid
和 audio pid
1 |
|
寻求帮助
最后放出终极大招,超级详细的官方帮助信息
1 |
|
使用ffmpeg将图片合成为视频(附完整参数介绍)
xindoo
已于 2022-08-25 10:05:39 修改
本文介绍下如何使用ffmpeg将大量图片拼接成一个视频,并介绍其中部分参数的含义。
使用ffmpeg将图片拼接成视频前,需要将图片文件名做下预处理,文件名中必须有数字将其次序标记出来,这里我直接使用数字将图片重命名了,如下:
直接使用命令就可以将其转为mp4视频。
1 |
|
命令中的%03d是数字编号占位符,ffmpeg会按次序加载001-250.jpg做为输入。这里我们没有指定如何其他参数,所以ffmpeg使用了默认的参数,比如帧率是25fps,视频使用了h264编码,分辨率直接使用了图片原始分辨率……
1 |
|
我们可以调整其参数,生成更符合我们需求的视频,下面介绍下几个常见的参数。
-r 调整帧率
不指定帧率的话,ffmpeg会使用默认的25帧,也就是1秒钟拼接25张图片,我们可以通过调整帧率的大小来控制最终生成视频的时长。
1 |
|
如上命令每秒会拼接10张图片,250张图片最终会生成25秒的视频。
这里需要注意 -r 10 参数的位置,在-i %03d.jpg前面和在后面的效果是不一样的。放在-i后面只会改变输出的视频帧率,而输入的还是默认值25 ,比如ffmpeg -f image2 -i %03d.jpg -r 10 output1.mp4,250张图片依旧只会生成10s的视频,但视频的播放征率会减小到10。
1 |
|
-b:v 调整视频码率
-b:v bitrate of video。如果原始图片比较大,默认参数生成的视频大小会比较大。比如上文中我使用的图片都是2k的高清图,最终生成的10s视频就有35MB,码率有近30Mb/s(码率是只1s播过的数据量,注意这里单位是小b)。
1 |
|
这里额外提醒下,改变码率会影响到视频清晰度,但并不意味着高码率的视频一定比低码率的视频清晰度更高,这还取决于视频编码格式,比如h265编码可以用更小的码率生成h264同等的视频质量,像av1、v8、v9等编码也优于h264。
-crf 调整视频质量
-crf Constant Rate Factor,用以平衡视频质量和文件大小的参数,FFMPEG里取值范围为0-51,取值越高内容损失越多,视频质量更差。 ffmpeg的默认值是23,建议的取值范围是17-28。
1 |
|
-c:v 调整视频的编码格式
-c:v codec of video。目前ffmpeg针对于mp4默认使用的是h264,你可以使用-c:v libx265生成同等质量,但文件更小的h265视频。
1 |
|
output4.mp4相比于上文中生成的output.mp4,视频文件大小减少了60%,但视频质量不变。你也可以使用-c:v libvpx -c:v libvpx-vp9分别生成v8和v9编码的webm文件。
1 |
|
#注意webm默认生成的是低质量的视频,可使用-crf或者-b:v参数调整视频质量。
-vf scale 调整视频分辨率
-vf scale: Video Filter Scale
1 |
|
上面的命令会将视频直接调整为640x480的分辨率,如果原始图片不是4:3 肯定是会对原始图像做拉伸的。可以使用下面的命令等比例缩放
1 |
|
#-2表示比例缩放,也可-vf scale=640:-2固定宽度缩放高度
以上就是几个常用的参数,这几个参数不仅限于图片转视频,视频转视频时也可以使用。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xindoo/article/details/121451318
使用FFmpeg工具将一个图片和一个音频合成一个视频以及在window系统下使用脚本运行
悟空、大师兄
于 2020-02-05 17:00:08 发布
阅读量2.8k
收藏 6
点赞数 3
分类专栏: # ffmpeg 文章标签: ffmpeg
版权
ffmpeg
专栏收录该内容
1 篇文章0 订阅
订阅专栏
注意:使用命令前检查正在使用的电脑是否安装的有ffmpeg工具以及是否配置环境变量。
命令:
1 |
|
参数介绍:
-r 10:fps设置为10帧/秒(不同位置有不同含义)
-f image2:表示输入或输出文件的格式是image2格式, -f是format(格式)的意思
-loop 1:因为只有一张图片所以必须加入这个参数(循环这张图片)
-i:输入
-s:指定视频的分辨率
-pix_fmt:指定图片输入格式(有yuv420,yuv444等各种格式)
-t:图片转换成视频的持续时长,单位是秒(S),必须指定该值,否则会无限制生成视频
-vcodec:生成视频的编码格式,这里指定的是x264
window系统下脚本运行命令:
创建一个txt文件,然后将后缀改为bat
@echo off
start cmd /k “ffmpeg -r 10 -f image2 -loop 1 -i F:\javatest\3.jpg -i F:\javatest\lx.mp3 -s
1920x1080 -pix_fmt yuvj420p -t 278 -vcodec libx264 F:\javatest\lx1.mp4”
使用心得:
1.-r后面的参数会影响到合成速度,参数越大耗时越长
2.-t后面的参数要设置为和音频一样的长度
3.音频格式我只测试了MP3、m4a两种格式,都是可行的
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/it_erge/article/details/104184710