FFmpeg操作命令 - 精简版

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 也可以进行相反的动作:把多个文件合在一起。

为了实现这一点,你得用自己顺手的编辑器来创建一个文本文件。

因为我喜欢使用终端,所以这里我用了 touchvim . 文件名无关紧要,这里我用 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上同时是使用 ALSApulseaudio 来处理声音的。 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中的过滤器的基本使用

技巧:更改播放速度

这里会介绍视频(不影响音频)和音频的过滤器。

  1. 视频

视频过滤器是 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)倍。

相关推荐
winfredzhang17 小时前
实战:从零构建一个支持屏幕录制与片段合并的视频管理系统 (Node.js + FFmpeg)
ffmpeg·node.js·音视频·录屏
winfredzhang18 小时前
自动化视频制作:深入解析 FFmpeg 图片转视频脚本
ffmpeg·自动化·音视频·命令行·bat·图片2视频
胖_大海_2 天前
【FFmpeg+Surface 底层渲染,实现超低延迟100ms】
ffmpeg
冷冷的菜哥2 天前
springboot调用ffmpeg实现对视频的截图,截取与水印
java·spring boot·ffmpeg·音视频·水印·截图·截取
进击的CJR2 天前
redis哨兵实现主从自动切换
mysql·ffmpeg·dba
huahualaly2 天前
重建oracle测试库步骤
数据库·oracle·ffmpeg
aqi003 天前
FFmpeg开发笔记(九十九)基于Kotlin的国产开源播放器DKVideoPlayer
android·ffmpeg·kotlin·音视频·直播·流媒体
lizongyao3 天前
FFMPEG命令行典型案例
ffmpeg
冷冷的菜哥3 天前
ASP.NET Core调用ffmpeg对视频进行截图,截取,增加水印
开发语言·后端·ffmpeg·asp.net·音视频·asp.net core
冷冷的菜哥3 天前
go(golang)调用ffmpeg对视频进行截图、截取、增加水印
后端·golang·ffmpeg·go·音视频·水印截取截图