PS:(因为我只需要简单的操作,所以我整理出了这份笔记)
原网址:30分钟带你入门,20个 FFmpeg操作命令,包你学会 - 知乎
大佬零声Github整理库整理的笔记非常的全面,想看完整版去上面那个地址
在 Ubuntu 上安装 ffmpeg
在 Ubuntu 上,ffmpeg 存在于 "Universe repository", 所以确保您开启了enable universe repository,然后更新并安装ffmpeg。下面就是您可能需要的命令。
sudo add-apt-repository universe sudo apt update sudo apt install ffmpeg
这就OK了,您可以通过下面的命令尝试一下有没有正确安装:
ffmpeg
他会打印出一些ffmpeg的配置和版本信息。
正如上图所示,安装的版本是 3.4.4。不过ffmpeg的最新版本应该是4.1。为了安装4.x的版本,您需要使用ffmpeg ppa, 您可以自己研究一下......
在 Arch 系的Linux上安装 ffmpeg
这个也非常简单,用下面的命令就行:
sudo pacman -S ffmpeg
在 Fedora 系的Linux上安装 ffmpeg
使用下面的命令就好了:
sudo dnf install ffmpeg
如何使用 ffmpeg: 基础
1. 获得媒体文件的信息
ffmpeg 最简单的使用就是用来 显示文件信息 。不用给输出,只是简单的写:
ffmpeg -i file_name
视频和音频文件都可以使用:
ffmpeg -i video_file.mp4 ffmpeg -i audio_file.mp3
通过ffmpeg查看文件属性
命令会输出很多与您文件无关的信息(ffmpeg本身的信息),虽说这个蛮有用的,你可以使用 -hide_banner 来隐藏掉它们:
ffmpeg -i video_file.mp4 -hide_banner ffmpeg -i audio_file.mp3 -hide_banner
如图所示,现在命令只显示你文件相关的信息了(编码器,数据流等)。
2. 转换媒体文件
ffmpeg 最让人称道常用的恐怕就是你轻而易举的在不同媒体格式之间进行自由转换了。你是要指明输入和输出文件名就行了, ffmpeg 会从后缀名猜测格式,这个方法同时适用于视频和音频文件
下面是一些例子:
ffmpeg -i video_input.mp4 video_output.avi ffmpeg -i video_input.webm video_output.flv ffmpeg -i audio_input.mp3 audio_output.ogg ffmpeg -i audio_input.wav audio_output.flac
你也可以同时指定多个输出后缀:
ffmpeg -i audio_input.wav audio_output_1.mp3 audio_output_2.ogg
这样会同时输出多个文件.
想看支持的格式,可以用:
ffmpeg -formats
同样的,你可以使用 -hide_banner 来省略一些程序信息。
你可以在输出文件前使用 -qscale 0 来保留原始的视频质量:
ffmpeg -i video_input.wav -qscale 0 video_output.mp4
3. 从视频中抽取音频
为了从视频文件中抽取音频,直接加一个 -vn 参数就可以了:
ffmpeg -i video.mp4 -vn audio.mp3
这会让命令复用原有文件的比特率,一般来说,使用 -ab (音频比特率)来指定编码比特率是比较好的:
ffmpeg -i video.mp4 -vn -ab 128k audio.mp3
一些常见的比特率有 96k, 128k, 192k, 256k, 320k (mp3也可以使用最高的比特率)。
4. 让视频静音
和之前的要求类似,我们可以使用 -an 来获得纯视频(之前是 -vn).
ffmpeg -i video_input.mp4 -an -video_output.mp4
Note: 这个 -an 标记会让所有的音频参数无效,因为最后没有音频会产生。
5. 为视频增加字幕
另一个常见又很容易实现的要求是给视频增加字母,比如一部外文电源,使用下面的命令:
ffmpeg -i video.mp4 -i subtitles.srt -c:v copy -c:a copy -preset veryfast -c:s mov_text -map 0 -map 1 output.mp4
6. 裁剪媒体文件(基础)
可以通过 -ss 给出一个开始时间,-to 给出结束时间:
ffmpeg -i input_video.h264 -ss 00:01:30 -to 00:01:40 output_video.h264
可以看到 开始时间 (-ss HH:MM:SS ), 持续秒数 (-t duration ), 结束时间 (-to HH:MM:SS ), 和开始秒数 (-s duration)的用法.
ffmpeg: 高级使用
现在该开始讲述一些高级的特性了(比如截屏等),让我们开始吧。
1. 拼接媒体文件
ffmpeg 也可以进行相反的动作:把多个文件合在一起。
为了实现这一点,你得用自己顺手的编辑器来创建一个文本文件。
因为我喜欢使用终端,所以这里我用了 touch 和 vim . 文件名无关紧要,这里我用 touch 命令创建 video_to_join.txt 文件:
touch videos_to_join.txt
现在,使用 vim 编辑它:
vim videos_to_join.txt
你可以使用任何你喜欢的工具,比如nano,gedit等等。
在文件内容中, 输入您想拼接的文件的完整路径(文件会按照顺序拼合在一起),一行一个文件。确保他们拥有相同的后缀名。下面是我的例子:
/home/ubuntu/Desktop/video_1.mp4 /home/ubuntu/Desktop/video_2.mp4 /home/ubuntu/Desktop/video_3.mp4
保存这个文件,同样这个方法适用与任何音频或者视频文件。
然后使用下面的命令:
ffmpeg -f concat -i join.txt output.mp4
Note: 使用的输出文件的名称是 output.mp4, 因为我的输入文件都是mp4的 。
这样,你 videos_to_join.txt 里的所有文件都会被拼接成一个独立的文件了。
2. 录制屏幕
通过 ffmpeg 录制屏幕同样没有困难的,将格式(-f ) 设定为x11grab . 他就会抓取你的XSERVER . 输入的话可以这是屏幕编号(一般都是0:0 ). 抓取是从左上角开始计算的,可以指定屏幕分辨率 (-s ). 我的屏幕是 1920×1080 . 注意屏幕分辨率硬在输入之前指定t:
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
按 q 或者 CTRL+C 以结束录制屏幕。
小技巧: 你可以通过命令获得真实的分辨率而不是写死一个固定的大小**:**
-s $(xdpyinfo | grep dimensions | awk '{print $2;}')
完整的命令这么写:
ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 output.mp4
3. 录制摄像头
从摄像头录制就更简单了,linux上设备都是在/dev中的,比如 /dev/video0, /dev/video1, etc.:
ffmpeg -i /dev/video0 output.mkv
同样, q 或者 CTRL+C 来结束录制。
4. 录制声音
Linux上同时是使用 ALSA 和 pulseaudio 来处理声音的。 ffmpeg 可以录制两者,不过我要特别说明 pulseaudio, 因为 Debian 系列的发行版默认用了它。命令如下:
在 pulseaudio , 你必须强制指定(-f ) alsa 然后指定 default 作为输入t (-i default):
ffmpeg -f alsa -i default output.mp3
录制小贴士
对于录制任务来说,通常都需要指定编码器以及帧率,之前讲过的参数当然也可以用到这里来!
ffmpeg -i /dev/video0 -f alsa -i default -c:v libx264 -c:a flac -r 30 output.mkv
有时候不直接录音,而是在录屏/录像的时候给一个音频文件,那么可以这么做:
ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 -i audio.wav -c:a copy output.mp4
ffmpeg中的过滤器的基本使用
技巧:更改播放速度
这里会介绍视频(不影响音频)和音频的过滤器。
- 视频
视频过滤器是 setpts (PTS = presentation time stamp). 这个参数以一种有趣的方式工作,因为我们修改的是PTS,所以较大的数值意味着较慢的播放速度,反之亦然:
ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv ffmpeg -i input.mp4 -vf "setpts=2*PTS" output,mp4
第一个命令让播放速度加倍了,第二个则是让播放速度降低了一半。
2. 音频
这里的过滤器是 atempo . 这里有个限制,它只接受 0.5 (半速) 到 2 (倍速)之间的值。为了越过这个限制,你可以链式使用这个过滤器:
ffmpeg -i input.wav -af "atempo=0.75" output.wav ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3
第一个命令让音频速度慢了1/4,第二个则是加速到原来的4(2*2)倍。