Loading... ## 1、FFmpeg命令行 FFmpeg命令行通用形式 ```sh ffmpeg [global_options] {[input_file_options] -i input_file} {[output_file_options] output_file} ``` 需要注意`[input_file_options]`和`[output_file_options]`这两个参数选项,它们分别只对后面的`input_file`和`output_file`起作用 没有使用`-i`指定的文件都被认为是输出文件。因此,FFmpeg可以接受多个输出文件。同时,你应该先指定输入文件,再指定输出文件。 ## 2、获取多媒体文件信息 > 在这里使用多媒体文件代表音频、视频、图像等文件。在之后的表述中处于方便考虑,将用文件来代替多媒体文件的表述。 > > 命令中的`中括号[]`代表该参数可选。 FFmpeg最简单的使用就是**显示文件信息** ```shell ffmpeg -i file_name [-hide_banner] ``` `-hide_banner`参数用于隐藏无用信息。 视频和音频文件都可以使用 ```shell ffmpeg -i video_file.mp4 -hide_banner ffmpeg -i audio_file.m4a -hide_banner ```  如上图所示,使用该命令可以获取文件的相关信息。下面来简单说明一下 ```shell Duration: 00:03:50.06, start: 0.000000, bitrate: 486 kb/s ``` 视频时长3分50秒,码率`486kbit/s` ```shell Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 388 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) ``` 视频流,视频编码格式为`h.264`,视频原始数据为`YUV420P`,分辨率`640x360`,视频码率`388kbit/s`,视频帧率`25fps` ```shell Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default) ``` 音频流,音频编码格式为`aac`,音频采样率`44100HZ`,音频码率`95kbit/s` ## 3、文件格式转换 FFmpeg最常用的转换就是可以使用简单的一条命令在不同的媒体格式之间进行自由转换。只需要指定输入和输出的文件名,FFmpeg会自动根据你给出的文件格式进行转换。视频->视频(转封装),音频->音频(转封装),视频->音频(提取音频流),音频->视频(没有画面,只有音频)。 ```shell ffmpeg -i video_input.mp4 video_output.flv ffmpeg -i audio_input.m4a audio_output.mp3 ffmpeg -i video_input.mp4 audio_output.mp3 ffmpeg -i audio_input.mp3 video_output.mp4 ``` 这样转换之后,视频和音频的码率等参数都不一定和原始文件相同,所以我们可以通过指定输出文件的参数来控制码率等参数。 通过指定编码器,使用`-c:a`(音频)和`-c:v`(视频)来指定编码器的名称,或者使用`copy`指定与源文件相同的编码器 ```shell ffmpeg -i video_input.mp4 -c:a copy -c:v copy output.flv ```   从上图可以看出,未指定和指定编码器的输出是不同的。 ## 4、从视频中抽取音频 为了从视频文件中抽取音频,直接加一个`-vn`参数就可以。这个命令会复用原有文件的比特率。 ```shell ffmpeg -i video_input.mp4 -vn audio_output.mp4 ``` 一般来说,使用`-ab`(音频比特率)参数来指定比特率是比较好的。(`-ab`可以用`-b:a替代`) 常用的音频比特率有:96k,128k,192k,256k,320k(mp3支持的最高比特率) ```shell ffmpeg -i vidoe_input.mp4 -vn -ab 128k audio_output.mp3 ``` 其他的一些常用的参数如:`-ar`(音频采样率:22050,44100,48000),`ac`(声道数),`-f`(音频格式) ```shell ffmpeg -i video_input.mp4 -vn -b:a 128k -ar 48000 -ac 2 audio_output.mp4 ``` ## 5、让视频静音 和之前的一个类似,我们可以使用`-an`来获取纯视频(之前使用`-vn`来获取纯音频) ```shell ffmpeg -i video_input.mp4 -an -video_output.mp4 ``` ## 6、从视频中提取图片 ```shell ffmpeg -i video_input.mp4 -r 1 -f image2 image-%3d.png ``` `-r`代表帧率(一秒内导出多少张图像,默认25); `-f`代表输出格式 `image-%3d.png`:代表输出图像的命名,`%3d`表示输出的图像有三位数字(000、001)等。也可以用`%4d`表示四位数字 ## 7、更改视频分辨率 使用`-s`参数缩放视频就行 ```shell ffmpeg -i video_input.mp4 -s 640x480 video_output.mp4 ``` 同时,需要使用`-c:a`保证音频编码是正确的: ```shell ffmpeg -i video_input.mp4 -s 1920x1080 -c:a video_output.mp4 ``` ## 8、为音频增加图像封面 有个很棒的方法把音频变成视频,全程使用一张图片(比如专辑封面)。当你想往某个网站上传音频,但那个网站又仅接受视频(比如YouTube, Facebook等)的情况下会非常有用。 ```shell ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 320k -shortest output.mp4 ``` > 如果你使用的FFmpeg版本为4.x,可以不指定`-strict experimental` `-loop 1`:代表封面图像一直循环音频的长度 `-c:v`:视频编码使用`x264` `-c:a`:音频编码使用`aac` `-b:a`:音频码率320k `-shortest`:表示音频文件结束,输出视频就结束 ## 9、压缩文件 压缩文件可以极大减少文件体积,这对文件传输尤为重要。有几种常用的压缩策略,下面来一一介绍: - 对于音频文件,可以通过降低比特率(使用`-b:a`) ```shell ffmpeg -i audio_input.mp3 -b:a 128k audio_output.mp3 ``` - 对于视频文件,可以通过降低视频比特率(使用`-b:v`) ```shell ffmpeg -i video_input.mp4 -b:v 1000k video_output.mp4 ``` - 对于视频文件,可以使用`-crf`参数(恒定质量因子),较小的`crf`意味着较大的码率(`crf`一般设置为20到30之间)。同时,使用`libx264`编码也可以显著降低文件体积 ```shell ffmpeg -i video_input.mp4 -c:v libx264 -crf 28 video_output.mp4 ``` - 队医视频文件,可以降低帧率(使用`-r`) ```shell ffmpeg -i video_input.mp4 -r 24 video_output.mp4 ``` ## 10、视频 要想从文件头开始剪辑一部分,使用`-t`参数来指定持续时间 ```shell ffmpeg -i video_input.mp4 -t 10 video_output.mp4 ``` 也可以使用`-ss`指定开始时间,`-to`指定结束时间 ```shell ffmpeg -i video_input.mp4 -ss 00:01:10 -t 10 video_output.mp4 ffmpeg -i video_input.mp4 -ss 00:02:00 -to 00:05:00 video_output.mp4 ``` ## 11、裁剪视频  ```shell ffmpeg -i input_video.mp4 -vf crop=iw/2.9:ih/2.5:iw/2.3:ih/3 .\output.mp4 ``` ## 12、合并视频 ```shell $ cd ~/Downloads $ touch ./list.txt $ vim ./list.txt # file file ./cut1.mov file ./cut2.mov ffmpeg -f concat -safe 0 -i ./list.txt -c copy ./concat.mov ``` Last modification:May 8th, 2021 at 09:38 am © 允许规范转载