目录

ffmpeg音视频工具音视频合并

ffmpeg@音视频工具@音视频合并

文章目录

ffmpeg

  • 是一款强大的开源跨平台音视频处理工具集,它包含了一系列命令行工具以及用于音频和视频编码解码、格式转换、抓取、流化等功能的库。FFmpeg 支持多种视频、音频格式和编解码器,能够进行音视频的压缩、封装、转码、分割、合并、过滤、抓取屏幕、推流到服务器等多种操作。

    它的主要组成部分包括:

    1. ffmpeg :命令行工具,用于转换音频、视频文件格式,或者对它们进行各种复杂的处理操作,例如混流、抽取音轨、添加字幕等。
    2. ffprobe :用于获取媒体文件的元数据信息,包括容器格式、音视频流的具体参数等。
    3. ffplay :轻量级的媒体播放器,主要用于快速测试FFmpeg编码或解码的效果。
  • FFmpeg 项目拥有高度可移植性,可以在 Linux、Windows、Mac OS X 及其他多种操作系统环境下编译运行。其内部的 libavcodec 库包含了大量的音频视频编解码器实现,其中许多是从零开始开发的,旨在提供高效、高质量的编解码能力。

  • FFmpeg 使用 LGPL 或 GPL 许可证,这意味着它是自由软件,允许用户自由下载、使用、修改和分发代码。由于其广泛的功能和灵活性,FFmpeg 在多媒体开发领域被广泛应用,是许多视频编辑软件、流媒体服务、网络传输工具背后的基石技术之一。

特点

  • 强大,免费,灵活,无广告
  • 命令行操作

下载

  • windows版本: ,提供了多个版本,点击文件名直接下载即可(可能没有提供单独的下载按钮)

    • 可执行文件

      PS>ls
      
              Directory: C:\exes\ffmpeg\bin
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
      -a---         2/29/2024   6:06 PM       84847616 󰣆  ffmpeg.exe
      -a---         2/29/2024   6:06 PM       84639744 󰣆  ffplay.exe
      -a---         2/29/2024   6:06 PM       84680704 󰣆  ffprobe.exe
  • 其他版本下载比较直接

使用

  • 如果只是偶尔用用简单的功能,可以借助** **来使用,比如我们要合并一个视频和音频,如果不想查看文档,可以用大模型搜一下,看看例子就行,总体来说还算方便,不需要下载一个软件,也不需要安装就能够运行(顶多配置以下路径,或者把需要处理的文件拖到ffmpeg所在目录下进行操作)
  • 事实上,命令行工具的使用,现阶段大模型可以直接给出教程,复制粘贴,稍微修改一下就能用,但是图形界面的软件使用,大模型给出的结果往往有偏差,并且难以给出图文教程
  • ffmpeg主要是命令行的形式的,这意味着我们可以编制脚本做批处理,或者嵌入到其他应用中,是比图形界面灵活的
  • 其他的软件有的插入广告啊,教程里也有广告烦得很,找到一个好用的还不容易

将视频和音频合并

  • 相关软件很多,比如VLC等,这里用ffmpeg

  • 假设我从某处下载了音视频分离的资源,可以使用ffmpeg合并它们

  • 使用FFmpeg合并音频和视频,你可以根据不同的需求和场景采用不同方法。这里提供一种基本的无损合并方法,前提条件是音频和视频流已经同步并且具有兼容的参数(如帧率、分辨率、采样率等)。

  • 假设你有一个视频文件 input_video.mp4 和一个音频文件 input_audio.mp3 ,你想将音频替换到视频文件中,同时保持视频部分不变,可以这样做:

    ffmpeg -i input_video.mp4 -i input_audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4

    这个命令的意思是:

    • -i input_video.mp4-i input_audio.mp3 分别指定输入的视频和音频文件。
    • -c:v copy 表示视频流直接复制(无损),不进行转码。
    • -c:a aac 指定输出音频流编码为AAC(如果目标容器支持aac,且原mp3音频需要被转码以适应容器要求)。
    • -map 0:v:0 选取第一个输入文件的第一个视频流。
    • -map 1:a:0 选取第二个输入文件的第一个音频流。
    • output.mp4 是合并后输出的文件名。
  • PS BAT [11:37:09 AM] [C:\Users\cxxu\Downloads]
    [🔋 102%] MEM:71.01% [5.57/7.85] GB |ls
    
            Directory: C:\Users\cxxu\Downloads
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d----         2/28/2024   8:58 PM                  Documents
    d----          3/4/2024  11:20 AM                  ffmpeg-2024-02-29-git-4a134eb14a-essentials_build
    -a---          3/4/2024  11:06 AM       32204639   DownKyi-1.6.1.zip
    -a---          3/4/2024  11:19 AM       27260421   ffmpeg-2024-02-29-git-4a134eb14a-essentials_build.7z
    -a---          3/4/2024  11:16 AM        1379060   kk.mp3
    -a---          3/4/2024  10:56 AM        4960232   kk.mp4
    -a---          3/4/2024  11:25 AM        7739933   output.mp4
    
    PS BAT [11:37:21 AM] [C:\Users\cxxu\Downloads]
    [🔋 102%] MEM:72.27% [5.67/7.85] GB |ffmpeg -i kk.mp4 -i kk.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output2.mp4
    ffmpeg version 2024-02-29-git-4a134eb14a-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
      built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
      configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-
    
      ..........
    
      libavfilter     9. 17.100 /  9. 17.100
      libswscale      7.  6.100 /  7.  6.100
      libswresample   4. 13.100 /  4. 13.100
      libpostproc    57.  4.100 / 57.  4.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'kk.mp4':
      Metadata:
        major_brand     : iso5
        minor_version   : 1
        compatible_brands: iso5dsmsmsixdash
        encoder         : Lavf58.29.100
        description     : Packed by Bilibili XCoder v2.0.2
      Duration: 00:02:44.03, start: 0.000000, bitrate: 241 kb/s
      Stream #0:0[0x1](und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 6 kb/s, 29.97 fps, 29.97 tbr, 16k tbn (default)
          Metadata:
            handler_name    : VideoHandler
            vendor_id       : [0][0][0][0]
    Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'kk.mp3':
      Metadata:
        major_brand     : iso5
        minor_version   : 1
        compatible_brands: avc1iso5dsmsmsixdash
        encoder         : Lavf57.71.100
        description     : Packed by Bilibili XCoder v2.0.2
      Duration: 00:02:44.05, start: 0.000000, bitrate: 67 kb/s
      Stream #1:0[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
          Metadata:
            handler_name    : SoundHandler
            vendor_id       : [0][0][0][0]
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
      Stream #1:0 -> #0:1 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    Output #0, mp4, to 'output2.mp4':
      Metadata:
        major_brand     : iso5
        minor_version   : 1
        compatible_brands: iso5dsmsmsixdash
        description     : Packed by Bilibili XCoder v2.0.2
        encoder         : Lavf60.22.101
      Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], q=2-31, 6 kb/s, 29.97 fps, 29.97 tbr, 16k tbn (default)
          Metadata:
            handler_name    : VideoHandler
            vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
          Metadata:
            handler_name    : SoundHandler
            vendor_id       : [0][0][0][0]
            encoder         : Lavc60.40.100 aac
    [out#0/mp4 @ 0000024831eaa980] video:4782KiB audio:2573KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 2.767128%
    size=    7559KiB time=00:02:43.89 bitrate= 377.8kbits/s speed=58.8x
    [aac @ 0000024831f7d540] Qavg: 621.202