在Ubuntu和其他Linux上安装ffmpeg
在终端中使用以下命令完成这些操作:
1 | sudo add-apt-repository universe |
可以使用以下方法验证安装:
1 | ffmpeg |
如何使用 ffmpeg
基础知识
ffmpeg 命令的基本形式是:
1 | ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... |
1、您必须记住,所有文件选项仅适用于它们后面的文件(您必须为下一个文件再次写入它们)。
2、任何前面没有 -i 的文件都被视为输出文件。Ffmpeg 使用您提供的任意数量的输入和输出。您还可以对输入文件和输出文件使用相同的名称,但必须在输出文件名之前添加 -y 标签。
3、您不应该混合输入和输出;首先指定 Input Files(输入文件),然后指定 Output Files(输出文件)。
获取媒体文件信息
- ffmpeg 的第一个用途是显示有关媒体文件的信息。这可以通过不输入任何输出文件来完成。只需键入:
1
ffmpeg -i file_name
这适用于音频和视频文件;虽然很有用,但此命令将显示太多与您的文件无关的信息(有关 ffmpeg 的信息)。要省略它,请添加 -hide_banner 标志:
1 | ffmpeg -i video_file.mp4 -hide_banner |
转换媒体文件
- 使用 ffmpeg 在不同媒体格式之间轻松转换。只需指定输入和输出文件,ffmpeg 将从文件扩展名中获得所需的格式。这适用于视频到视频和音频到音频的转换。以下是一些示例:
1
2
3
4ffmpeg -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 - 您甚至可以指定输出多个文件:
1
ffmpeg -i audio_input.wav audio_output_1.mp3 audio_output_2.ogg
- 想要查看受支持的格式,可以使用:
1
ffmpeg -formats
- 同样也可以添加 -hide_banner 来省略有关应用程序的信息。
- 也可以在输出文件前指定 -qscale 0 参数以保持视频文件的质量:
1
ffmpeg -i video_input.wav -qscale 0 video_output.mp4
- 此外,您可以指定要使用的编解码器,添加
-c:a
(用于音频)和-c:v
(用于视频),后跟编解码器的名称,或者如果要使用与原始文件相同的编解码器:1
ffmpeg -i video_input.mp4 -c:v copy -c:a libvorbis video_output.avi
请注意: 这可能会使文件扩展名更具欺骗性,因此请小心。
从视频中提取音频
- 要从视频文件中提取音频,请执行简单的转换并添加 -vn 标志:此命令将使用原始文件的比特率。也可以自己使用
1
ffmpeg -i video.mp4 -vn audio.mp3
-ab
(音频比特率)设置:
1 | ffmpeg -i video.mp4 -vn -ab 128k audio.mp3 |
一些常见的比特率是 96k、128k、192k、256k、320k(mp3 支持的最高比特率)。
其他常见选项包括 -ar (音频频率: 22050, 441000, 48000), -ac (音频通道数), -f (音频格式,尽管通常会自动检测)。-ab
也可以替换为 -b:a
。例如:
1 | ffmpeg -i video.mov -vn -ar 44100 -ac 2 -b:a 128k -f mp3 audio.mp3 |
将视频中的音频去除
- 与上一个用法类似,我们可以添加一个简单的标签:
-an
(而不是-vn
)。1
ffmpeg -i video_input.mp4 -an -video_output.mp4
-an 标签将使该输出文件的所有音频选项变得无用,因为操作结果中没有音频。
从视频中提取图像
- 从视频中获取图像,只需要输入:-r 指定帧率(一秒提取多少帧到图像中,默认:25),-f 指定输出格式(image2 实际上代表 image2 序列。最后一个参数 %3d。这只是用 3 位数字(000、001 等)对您的图像进行编号。如果需要,您还可以使用 %2d(2 位格式)甚至 %4d(4 位格式)。
1
ffmpeg -i video.mp4 -r 1 -f image2 image-%3d.png
更改视频分辨率或纵横比
- 要调整视频大小,您只需在 -s 标志后指定新的分辨率即可:
1
ffmpeg -i video_input.mov -s 1024x576 video_output.mp4
- 还可以指定
-c:a
以确保输出文件的音频编解码器是正确的:1
ffmpeg -i video_input.h264 -s 640x480 -c:a video_output.mov
- 还可以使用 -aspect 更改纵横比:
1
ffmpeg -i video_input.mp4 -aspect 4:3 video_output.mp4
将海报图像添加到音频
- 在音频里添加封面:只需更改编解码器(
1
ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4
-c:v
指定视频编解码器,-c:a
指定音频编解码器)和文件名。
为视频添加字幕
- 用 ffmpeg 添加字幕。输入以下内容:可以指定所需的任何编解码器(以及与音频/视频相关的任何其他附加选项)。
1
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
压缩媒体文件
使用 ffmpeg,有多种方法可以减小文件大小。但过度压缩文件会明显降低结果文件的质量。
对于音频文件,只需降低比特率(使用
-b:a
或-ab
):1
2ffmpeg -i audio_input.mp3 -ab 128k audio_output.mp3
ffmpeg -i audio_input.mp3 -b:a 192k audio_output.mp3不同的比特率值是:96k、112k、128k、160k、192k、256k、320k。比特率越高,文件大小和质量就越高。
对于视频文件,您有更多选择。
- 一种方法是降低视频比特率(使用
-b:v
):可以设置 -crf 标志 (Constant Rate Factor)。较低的 crf 意味着较高的比特率。此外,使用1
ffmpeg -i video_input.mp4 -b:v 1000k -bufsize 1000k video_output.mp4
libx264
作为视频编解码器会有所帮助。这是一个非常有效的尺寸减小方法,质量降低非常小:20 到 30 的 crf 很常见,但您可以随意使用特定值。1
ffmpeg -i video_input.mp4 -c:v libx264 -crf 28 video_output.mp4
- 在某些情况下,也可以降低帧速率(尽管它很容易使视频感觉迟钝):-r 指定帧速率(在本例中为 24)。
1
ffmpeg -i video_input.mp4 -r 24 video_output.mp4
- 还可以压缩音频,使其成为立体声并降低比特率。例如:-strict -2 和 -ac 2 负责立体声部分。我已经介绍了降低比特率的部分。
1
ffmpeg -i video_input.mp4 -c:v libx264 -ac 2 -c:a aac -strict -2 -b:a 128k -crf 28 video_output.mp4
- 一种方法是降低视频比特率(使用
剪切媒体文件
- 从头开始修剪文件,必须使用 -t 指定持续时间:这适用于视频和音频文件。上面的两个命令都做同样的事情:将输入文件的前 5 秒保存到输出文件中。单个数字(秒数)和 HH:MM:SS(小时、分钟、秒)。第二个版本更像是一个结束时间。还可以更进一步,用
1
2ffmpeg -i input_video.mp4 -t 5 output_video.mp4
ffmpeg -i input_audio.wav -t 00:00:05 output_audio.wav-ss
指定开始时间,甚至用-to
指定结束时间:开始时间 (-ss HH:MM:SS)、持续时间 (-t 持续时间) (以秒为单位)、结束时间 (-to HH:MM:SS) 和开始时间 (-s 持续时间) (以秒为单位)(在持续时间秒后开始)。1
2
3
4ffmpeg -i input_audio.mp3 -ss 00:01:14 output_audio.mp3
ffmpeg -i input_audio.wav -ss 00:00:30 -t 10 output_audio.wav
ffmpeg -i input_video.h264 -ss 00:01:30 -to 00:01:40 output_video.h264
ffmpeg -i input_audio.ogg -ss 5 output_audio.ogg
高级用法
分割媒体文件
- 要将文件拆分为多个部分,必须做的是指定多个修剪(在每个输出文件之前指定开始时间、结束时间或持续时间)。语法非常简单。我指定了 -t 00:00:30 作为第一部分的持续时间(第一部分将包含原始视频的前 30 秒)。接下来,我指定我希望其余部分成为第二个视频的一部分(从最后一部分的结尾 00:00:30 开始)。
1
ffmpeg -i video.mp4 -t 00:00:30 video_1.mp4 -ss 00:00:30 video_2.mp4
连接媒体文件
- 创建一个文本谁的你可以使用任何你想要的工具,touch或vim都可以
1
2touch videos_to_join.txt
vim videos_to_join.txt - 输入你想要加入的所有文件的完整路径(它们将按照你在这里写的顺序加入),每行一个。确保它们具有相同的扩展名(例如 mp4)保存您刚刚编辑的文件。此方法适用于任何音频或视频文件。
1
2
3/home/ubuntu/Desktop/video_1.mp4
/home/ubuntu/Desktop/video_2.mp4
/home/ubuntu/Desktop/video_3.mp4 - 现在输入以下命令进行合并
1
ffmpeg -f concat -i join.txt output.mp4
我的输出文件output.mp4,那是因为我所有的输入文件都有 mp4 扩展名。
这会将您在 join.txt 中写下的所有文件合并到一个输出文件中。
将图像合并为视频
- 首先是确保你想要放在一起的照片位于同一个目录中。推荐用于图片的扩展名是 .png 和 .jpg。无论您选择哪种方式,请确保所有图像都具有相同的扩展名
我们转换的格式-f
应该是 image2pipe。对于输入,您必须提供连字符–
。image2pipe 允许你做的是将cat
等命令的结果通过管道|
到 ffmpeg 中,而不是一个一个地输入所有名称。这正是我要做的。为此,我们还必须提到我们希望复制视频编解码器-c:v copy
(以正确使用图像):制作的视频,每张照片 1 帧;FFmpeg(默认)以 23 fps 左右的速度运行。1
cat my_photos/* | ffmpeg -f image2pipe -i - -c:v copy video.mkv
要更改此设置,您必须指定所需的帧速率 (-framerate):这里将帧速率设置为 1,这意味着每个帧(也意味着每个图像)显示 1 秒。1
cat my_photos/* | ffmpeg -framerate 1 -f image2pipe -i - -c:v copy video.mkv
要添加音频,例如背景歌曲,可以将音频文件指定为输入文件-i audo_file
并复制音频编解码器-c:a copy
。对于编解码器,可以使用-c copy
同时复制音频和视频编解码器。确保在指定输出文件之前设置编解码器。还可以设置帧速率,以便所有图片与要使用的音频的持续时间同步。要获得该结果,请将图片数量除以音频的持续时间(以秒为单位)。例如,我有一个 22 秒长的音频文件和 9 张图像。9 / 22 大约是 0.40,这就是我将用于帧速率的值:1
cat my_photos/* | ffmpeg -framerate 0.40 -f image2pipe -i - -i audio.wav -c copy video.mkv
录制你的屏幕
- 使用 ffmpeg 进行录屏。需要使用的格式
-f
是x11grab
。这将捕获您的XSERVER
。作为输入,您必须指定屏幕显示编号(主屏幕通常应为 0:0)。但是,这只会捕获屏幕的左上角部分。您应该添加屏幕大小-s
。我的是 1920×1080。屏幕尺寸应在输入之前提及:随时按 q 或 Ctrl+C 可停止录屏视频。1
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
也可以通过以下方法来录全屏1
ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 output.mp4
录制摄像头
- 录制来自网络摄像头(或其他设备,如 USB 摄像头)的输入更加容易。在 Linux 中,设备以
/dev/video0、/dev/video1
等形式存储在/dev
中:再次按 q 或 Ctrl+C 停止录制。1
ffmpeg -i /dev/video0 output.mkv
录制你的音频
- Linux 主要通过
ALSA
和pulseaudio
处理音频。ffmpeg 可以同时录制两者,但我将介绍pulseaudio
,因为基于 Debian 的发行版默认包含它。这两种方法的语法略有不同。
对于pulseaudio
,您必须强制-f alsa
并指定default
作为输入-i default
:1
ffmpeg -f alsa -i default output.mp3