FFmpeg是一个开源的多媒体处理工具,它提供了录制、转换、以及流媒体处理的功能。从简单的格式转换到复杂的视频和音频编解码,FFmpeg都能轻松应对。下面介绍FFmpeg的一些常用方法,帮助你入门并提高你的多媒体处理技能。

FFmpeg简介

FFmpeg是一个跨平台的解决方案,支持Linux、Windows、macOS等操作系统。它包含了一套库(libav)和一套程序,可以用来处理视频和音频数据。

安装FFmpeg

安装FFmpeg通常很简单。在大多数Linux发行版中,你可以使用包管理器来安装:

sudo apt-get install ffmpeg  # Debian/Ubuntu
sudo yum install ffmpeg     # CentOS/RHEL

在Windows上,你可以下载可执行的安装程序。macOS用户可以使用Homebrew:

brew install ffmpeg

常用FFmpeg命令

1. 转换视频格式

将一个视频文件从一种格式转换到另一种格式,例如将.mp4转换为.avi

ffmpeg -i input.mp4 output.avi

同样,将 .mov 文件转换为 .mp4 格式也非常简单。以下是相应的 FFmpeg 命令:

ffmpeg -i input.mov output.mp4

这一个非常实用,我们把手机上的视频传输到电脑里时,经常要进行转换。

用一些软件来处理就很麻烦,用命令就非常快了。

FFmpeg:多媒体处理的瑞士军刀_音视频

FFmpeg:多媒体处理的瑞士军刀_ffmpeg_02

进阶选项

在转换视频格式时,你可能会想要调整输出视频的质量、分辨率、比特率等。以下是一些常用的进阶选项:

  • 设置输出视频的比特率
ffmpeg -i input.mp4 -b:v 2000k output.mp4

这里 -b:v 表示视频比特率,单位是 kbps。

  • 设置输出视频的分辨率
ffmpeg -i input.mov -s 1280x720 output.mp4

-s 选项后面跟的是要设置的视频分辨率。

  • 选择特定的视频编解码器
ffmpeg -i input.mp4 -c:v libx264 output.mp4

-c:v 后面跟的是视频编解码器的名称。

  • 选择特定的音频编解码器
ffmpeg -i input.mov -c:a aac output.mp4

-c:a 后面跟的是音频编解码器的名称。

  • 复制原始视频流而不重新编码
ffmpeg -i input.mov -c copy output.mp4

使用 -c copy 可以快速转换视频格式,但不会改变视频的编解码器和质量。

  • 添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

-filter_complex 用于指定视频滤镜,这里 overlay 滤镜用于在视频上叠加水印。

2. 提取音频

从视频文件中提取音频并保存为音频文件:

ffmpeg -i video.mp4 -vn -acodec copy audio.aac

从视频文件中提取音频并将其转换为 MP3 格式,非常实用:

ffmpeg -i video.mp4 -vn -c:a libmp3lame output.mp3

调整 MP3 的比特率来控制输出文件的大小和质量:

ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3

3. 视频截图

从视频中提取特定时间点的截图:

ffmpeg -i video.mp4 -ss 00:01:00 -vframes 1 image.jpg

4. 视频剪辑

剪辑视频,提取视频中的一个片段:

ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy clip.mp4

5.调整视频分辨率

改变视频的分辨率:

ffmpeg -i input.mp4 -s 1280x720 output.mp4

压缩视频

视频压缩可以显著减小视频文件的体积,同时可能会影响到视频的质量。FFmpeg提供了多种方式来压缩视频:

  1. 使用 -crf 参数进行恒定速率因子(CRF)编码: CRF 是一种质量和压缩率的平衡方式,值越小,质量越高,文件越大;值越大,质量越低,文件越小。范围通常是 0-51,其中 23 是默认值。
ffmpeg -i input.mp4 -c:v libx264 -crf 28 output.mp4

再举例:用剪映处理一个17分钟的竖视频加字幕后有400M,使用这一句,就变成60几M。

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -vf scale=-2:720 -c:a aac -b:a 128k -movflags +faststart output.mp4

参数应为多少,可以问chatGPT,比如你想目标大小多少M,这一个也非常实用。

在这个例子中,-crf 28 表示中等压缩质量,你可以根据需要调整这个值。

  1. 设置视频比特率: 直接设置视频的比特率也是一种压缩方法。较低的比特率会产生更小的文件,但可能会降低视频质量。
ffmpeg -i input.mp4 -b:v 1000k output.mp4

-b:v 后面跟的是以 kbps 为单位的视频比特率。

  1. 音频比特率压缩: 除了视频,你也可以压缩音频部分以减小文件大小:
ffmpeg -i input.mp4 -b:a 128k output.mp4

-b:a 后面跟的是音频的比特率。

  1. 使用 -scale 过滤视频: 如果你想要在压缩视频的同时减小分辨率,可以结合使用 -scale 过滤:
ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:a aac -b:a 128k -movflags +faststart output.mp4

scale=1280:-1 表示将视频宽度设置为 1280 像素,高度自动按照原始宽高比调整。

  1. 两步编码过程: 为了获得更好的压缩效果,你可以使用两步(两遍)编码过程,这通常能提供更好的压缩效率:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f mp4 /dev/null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 128k output.mp4

第一个命令是进行初次编码,不包含音频(-an 表示不编码音频),第二个命令使用初次编码的信息进行最终编码。

  1. 使用 movflags +faststart: 这个选项可以将视频的 moov 原子(文件信息头)放在文件的开始处,这样视频可以更快地开始播放,适用于网络流媒体。

请注意,压缩视频时需要在质量和文件大小之间找到平衡点。你可能需要尝试不同的参数来达到你的具体要求。

6. 视频转GIF

将视频文件转换为GIF动画:

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif

7. 音频转换

将一种音频格式转换为另一种格式,例如将.mp3转换为.wav

ffmpeg -i input.mp3 output.wav

8. 视频流合并

合并多个视频文件为一个:

ffmpeg -f concat -safe 0 -i <file1> -i <file2> -c copy output.mp4

9. 视频和音频同步

如果视频和音频不同步,可以使用以下命令进行同步:

ffmpeg -i video.mp4 -itsoffset -1.5 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac -shortest output.mp4

10. 直播流转录播

将直播流录制为视频文件:

ffmpeg -i rtmp://live.example.com/live/mystream -c copy output.mp4

结语

FFmpeg是一个功能强大的工具,可以应对各种多媒体处理需求。上述命令仅是冰山一角,FFmpeg还有更多高级功能等待你去探索。无论你是视频编辑、Web开发者还是多媒体工程师,FFmpeg都将是你的得力助手。

参考资料