数据人与超自然意识 发表于 2025-2-23 06:33:35

FFmpeg 是什么?为什么?怎么用?

择要:本文先容了 FFmpeg,一个功能强大的开源多媒体处理工具,广泛应用于视频和音频文件的处理。FFmpeg 支持多种多媒体格式,能够实现视频编码/解码、格式转换、裁剪、合并、音频提取、流媒体处理等功能。本文具体阐述了 FFmpeg 的主要组件、上风、安装方法、基本命令以及如何使用图形界面工具进行操作。

FFmpeg 是什么?为什么?怎么用?

一、FFmpeg 是什么?

FFmpeg 是一个开源的多媒体处理工具,广泛用于处理视频和音频文件。它支持险些所有常见的多媒体格式,包括但不限于视频编码/解码、视频转换、视频裁剪、音频提取、流媒体处理等。
FFmpeg 包含以下主要组件:

[*]ffmpeg:用于转换多媒体文件格式、裁剪、合并、调整分辨率等。
[*]ffplay:用于播放多媒体文件。
[*]ffprobe:用于表现多媒体文件的元数据(如编码格式、时长、分辨率等)。
[*]libavcodec:一个强大的多媒体编解码器库。
[*]libavformat:用于处理多媒体文件格式的库。
[*]libavutil:提供各种工具函数。
[*]libswscale:用于视频缩放和格式转换。
[*]libswresample:用于音频重采样和格式转换。
https://i-blog.csdnimg.cn/direct/0e2502ee401e4af9bc0104a45b81992a.png

二、为什么需要 FFmpeg?


[*]多功能性:

[*]FFmpeg 可以处理险些所有常见的视频和音频格式,包括但不限于 MP4、AVI、MKV、MP3、WAV 等。
[*]它支持视频和音频的编码、解码、转换、裁剪、合并、调整分辨率等操作。

[*]高效性:

[*]FFmpeg 使用高效的编解码器(如 H.264、H.265、VP9 等),可以在保证质量的同时压缩文件巨细。

[*]跨平台:

[*]FFmpeg 支持多种操作系统,包括 Windows、macOS、Linux 等。

[*]开源和免费:

[*]FFmpeg 是开源软件,任何人都可以免费使用和修改。

[*]强大的社区支持:

[*]FFmpeg 有一个活泼的社区,提供大量的文档、教程和支持。

https://i-blog.csdnimg.cn/direct/0cc789e3980249849cdf67457041b014.png
三、如何使用 FFmpeg?

1. 安装 FFmpeg

在 Windows 上安装 FFmpeg 的步调如下:

[*]下载 FFmpeg:

[*]下载地址1【官方】:访问 FFmpeg 官方下载页面。

https://i-blog.csdnimg.cn/direct/d043c1e944cc4bd89d2d153443283997.png


[*]

[*]选择适合 Windows 的版本(通常是 ffmpeg-release-essentials.7z)。
[*]下载地址2:Builds - CODEX FFMPEG @ gyan.dev 是一个常用的非官方下载地址,提供适用于 Windows 的 FFmpeg 二进制文件。虽然它不是 FFmpeg 的官方下载页面,但它是一个受信任的第三方网站,提供了预编译的 FFmpeg 构建版本。

https://i-blog.csdnimg.cn/direct/b7917bb537a2431499bd4044171281ce.png
使用发起


[*]假如你只是想快速使用 FFmpeg,可以直接从 Builds - CODEX FFMPEG @ gyan.dev 下载适合你需求的版本。
[*]假如你需要确保使用的是最新版本或需要特定功能,可以考虑从源码编译。


[*]解压文件:

[*]下载后,解压文件到一个目录(例如 C:\FFmpeg)。

https://i-blog.csdnimg.cn/direct/87815a2718b84ad4bfffef54a9b8a228.png


[*]设置环境变量:

[*]将 C:\FFmpeg\bin 添加到系统的环境变量 Path 中。

https://i-blog.csdnimg.cn/direct/b041f637af494f03a149d5d540f8b17e.png


[*]

[*]重启命令提示符或 PowerShell 以应用更改。


[*]验证安装结果:
ffmpeg -version https://i-blog.csdnimg.cn/direct/39bc5305e0af4a4fa77ace02d0fbb2fd.png

2. 基本命令

以下是一些常用的 FFmpeg 命令示例:
(1) 转换视频格式

将一个视频文件从 MP4 转换为 AVI:
ffmpeg -i input.mp4 output.avi (2) 裁剪视频

裁剪视频的前 10 秒:
ffmpeg -i input.mp4 -ss 00:00:00 -t 00:00:10 -c copy output.mp4 (3) 调整视频分辨率

将视频分辨率调整为 1280x720:
ffmpeg -i input.mp4 -s 1280x720 output.mp4 (4) 提取音频

从视频中提取音频并保存为 MP3 文件:
ffmpeg -i input.mp4 -q:a0-map a output.mp3 (5) 合并视频和音频

将视频和音频文件合并:
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4 (6) 实时流处理

将摄像头视频流推送到 RTMP 服务器:
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g50-c:a aac -b:a 128k -ac2-ar44100-f flv rtmp://live.twitch.tv/app/stream_key (7) 数字人合成视频

https://i-blog.csdnimg.cn/direct/7ccfa1f369324c7baf207867f914cb57.png
项目实际案例分享:
def main():
    if not os.path.isfile(args.face):
      raise ValueError('找不到数字人原始形象--face argument must be a valid path to video/image file')

    elif args.face.split('.') in ['jpg', 'png', 'jpeg']:
      full_frames =
      fps = args.fps

    else:
      video_stream = cv2.VideoCapture(args.face)
      fps = video_stream.get(cv2.CAP_PROP_FPS)

      print('Reading video frames...')

      full_frames = []
      while 1:
            still_reading, frame = video_stream.read()
            if not still_reading:
                video_stream.release()
                break
            if args.resize_factor > 1:
                frame = cv2.resize(frame, (frame.shape//args.resize_factor, frame.shape//args.resize_factor))

            if args.rotate:
                frame = cv2.rotate(frame, cv2.cv2.ROTATE_90_CLOCKWISE)

            y1, y2, x1, x2 = args.crop
            if x2 == -1: x2 = frame.shape
            if y2 == -1: y2 = frame.shape

            frame = frame

            full_frames.append(frame)

    print ("Number of frames available for inference: "+str(len(full_frames)))
    if not args.audio.endswith('.wav'):
      print('Extracting raw audio...')
      command = 'ffmpeg -y -i {} -strict -2 {}'.format(args.audio, '../temp/temp.wav')

      subprocess.call(command, shell=True)
      args.audio = '../temp/temp.wav'

    wav = audio.load_wav(args.audio, 16000)
    mel = audio.melspectrogram(wav)
    print(mel.shape)

    if np.isnan(mel.reshape(-1)).sum() > 0:
      raise ValueError('Mel contains nan! Using a TTS voice? Add a small epsilon noise to the wav file and try again')

    mel_chunks = []
    #TODO 与视频对应起来,每16,理论上来说,mel_idx_multiplier与mel_step_size相等,将音频分组,并获取与音频长度相等的视频帧
    mel_idx_multiplier = 80./fps
    i = 0
    while 1:
      start_idx = int(i * mel_idx_multiplier)
      if start_idx + mel_step_size > len(mel):
            mel_chunks.append(mel[:, len(mel) - mel_step_size:])
            break
      mel_chunks.append(mel[:, start_idx : start_idx + mel_step_size])
      i += 1

    print("Length of mel chunks: {}".format(len(mel_chunks)))
3. 查看多媒体文件信息

使用 ffprobe 查看文件的具体信息:
ffprobe input.mp4 4. 图形界面工具

假如你不熟悉命令行操作,可以使用以下图形界面工具:

[*]Shotcut:一个免费的开源视频编辑器,支持 FFmpeg 的功能。
[*]HandBrake:一个流行的视频转换工具,支持多种格式。
[*]VLC Media Player:虽然主要用于播放,但也支持一些基本的视频转换功能。
四、文章总结

FFmpeg 是一个功能强大的多媒体处理工具,适用于各种视频和音频处理任务。通过命令行操作,你可以轻松实现视频格式转换、裁剪、合并、音频提取等功能。假如你需要更直观的操作,也可以选择使用基于 FFmpeg 的图形界面工具。
五、相干分享

FFmpeg 的开源代码托管在 GitHub 上,你可以通过以下链接访问 FFmpeg 的开源地址:
GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git
1.如何使用 FFmpeg 源码


[*]克隆仓库:
假如你需要获取 FFmpeg 的源码,可以使用以下命令克隆仓库:
git clone https://github.com/FFmpeg/FFmpeg.git
[*]编译源码:

[*]FFmpeg 的源码需要自行编译。编译步调因操作系统而异。
[*]在 Windows 上编译 FFmpeg 比力复杂,通常需要使用 MSYS2 或 Cygwin 等工具。
[*]在 Linux 或 macOS 上,编译相对简单,可以参考 FFmpeg 的官方文档。

[*]贡献代码:
假如你对 FFmpeg 有改进或修复,可以通过 GitHub 提交 Pull Request。
开源地址:GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git
https://i-blog.csdnimg.cn/direct/4a981ac373fd457c94329aaced2bb8ed.png

2.FFmpeg 官方文档



[*]FFmpeg 的官方文档和使用指南可以在 FFmpeg 官方网站 找到。
[*]假如你需要相识 FFmpeg 的具体功能或命令用法,可以参考官方文档或使用 ffmpeg -help 命令。
https://i-blog.csdnimg.cn/direct/db4482ce6fd04ee4a242e2116b795eea.png


3.注意事项



[*]FFmpeg 的源码仓库包含大量的模块和编解码器,编译时可能需要较长时间和较多的系统资源。
[*]假如你只是想使用 FFmpeg,而不需要编译源码,可以直接下载预编译的二进制文件(如 Windows 上的 Essentials Build 或 Full Build)。

4.常见问题办理


[*]假如提示 'ffmpeg' 不是内部或外部命令:

[*]确保 Path 环境变量已正确设置。
[*]重启命令提示符或 PowerShell 以应用环境变量更改。

[*]假如遇到 DLL 文件缺失错误:

[*]安装最新版本的 Visual C++ Redistributable。
[*]或者使用静态版本的 FFmpeg(static build),制止 DLL 依赖问题。

[*]假如需要更新 FFmpeg:

[*]下载最新版本的 FFmpeg,解压到原安装目录,覆盖旧文件。
[*]确保系统 PATH 指向最新的安装路径。


5.windows安装参考

如何在Windows上安装FFMPEG:完备的指南
How to install FFmpeg on Windows: a complete guide
https://i-blog.csdnimg.cn/direct/ade3683220ea48e4943be42feb8f9690.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: FFmpeg 是什么?为什么?怎么用?