• ffmpeg Linux 安装 和运行


    一、FFmpeg 简介

    FFmpeg 是一款开源的多媒体视频处理工具,它有非常强大的功能包括视频采集、视频格式转换、视频抓图、给视频加水印等。
    许多视频播放处理软件多是基于 FFmpeg 开发,包括暴风影音、QQ影音、PotPlaye 等。
    注:FFmpeg 是以命令行的方式运行的,所以我们要在终端操作它。

    二、音视频基础知识

    1、封装:封装即我们常说的文件格式 mp4、avi、mkv、rmvb。它像是一个容器,里面会包含视频、音频、字幕等信息。
    2、编码:编码的目的是为了存储和压缩。视频和音频会采用不同的编码方式编码后放进容器中。
    常见的视频编码方式有h.264(HVC)、h.265(HEVC)、MPEG4、VC-1等,常见的音频编码方式有AAC、AC-3、MP3等。
    注:封装格式会限制编码方式,如 rmvb 在视频方面只支持 RealVideo 8, 9, 10 编码的视频,而 mkv 则支持所有编码方式的音视频。

    三、FFmpeg 的安装

    我们到 FFmpeg 官网下载它,如下链接,它提供了 Linux、Windows、Mac OS 常见的三个平台的安装包。
    为了简单我们选择下载静态编译的包,这意味它可以放到任何位置多能正确的被执行。
    但为了方便我们通常希望在任何位置打开终端都能运行 FFmpeg,这样我们可以把 FFmpeg 的存放路径添加至系统环境变量即可。
    如在 Windows 平台,我们先将下载的静态编译包解压放置到 C:Program FilesFFmpeg 目录,
    然后将其可执行文件路径 C:Program FilesFFmpegin 添加至系统环境变量里,添加方法如下链接介绍。
    之后我们在任何位置打开终端都可以执行 FFmepg 命令了,Linux 和 Mac OS 平台类似,先下载,然后添加环境变量,即可完成安装。
     
    下面先进行软件安装。 
    1.安装x264库
    下载libx264包,如果在视频转码时不指定libx264格式,可能会出现转换后的视频或音频不正常
    进行简单配置,有些cpu不支持asm汇编语句,使能共享,使能多线程,使能pic
    ./configure --disable-asm --enable-shared --enable-pthread --enable-pic
    编译
    make
    安装,其实就是移动了库文件、可运行文件的位置
    make install
    2.安装ffmpeg
    http://www.ffmpeg.org/download.html下载软件包,我下载的是ffmpeg-4.1.3.tar.bz2。
    解压软件
    tar -jxvf ffmpeg-4.1.3.tar.bz2
    切换目录
    cd ffmpeg-4.1.3/
    根据服务器进行配置,生成配置文件
    ./configure --disable-x86asm --enable-gpl --enable-libx264
    编译
    make 
    安装
    make install
    之后我们可以运行命令,测试一下软件运行是否正常。
    ffmpeg -i ./e6a4aa70cb88294a364087ee98ecf502.avi -vcodec libx264 test.mp4
    一般情况下,是会报错的,提示找不到libx264.so之类的错误。
    /usr/local/lib/添加到/etc/ld.so.conf 文件末尾或者直接修改/etc/ld.so.conf ,需要root权限
    echo "/usr/local/lib" >> /etc/ld.so.conf 
    使库文件的配置生效
    ldconfig
    此时再试着运行命令,看是否可正确转码。可以看到服务器输出转码成功。
    ffmpeg -i ./e6a4aa70cb88294a364087ee98ecf502.avi -vcodec libx264 test.mp4
     

     

    四、简单的音视频处理操作

    4.1 视频剪辑

    任务:截取 A 视频的 00:00 - 00:30 和 02:00 - 02:30 两个片段重新拼接成新的视频 B。
    step1:截取 A 视频 00:00 - 00:30 片段输出为 A1
    /*
    * -ss 为指定起始时间
    * -t 为指定持续的时长
    * -i 为指定输入的视频文件
    * -vcodec 为指定输出视频的编码格式,这里为 copy 即不改变原来的编码格式,可加快输出速度
    * -acodec 为指定输出音频的编码格式,copy 意义同上
    */
    ffmpeg -ss 00:00:00 -t 00:00:30 -i A.mp4 -vcodec copy -acodec copy A1.mp4
    step2:截取 A 视频 02:00 - 02:30 片段输出为 A2
    ffmpeg -ss 00:02:00 -t 00:00:30 -i A.mp4 -vcodec copy -acodec copy A2.mp4
    setp3:拼接 A1 和 A2 输出为 B
    ffmpeg -f concat -i list.txt -c copy B.mp4
    其中 list.txt 的内容如下:
    file ./A1.mp4
    file ./A2.mp4

    4.2 提取或替换视频背景音

    任务:提取视频 A 的背景音输出为 B.mp3
    ffmpeg -y -i A.mp4 -vn B.mp3
    任务:用 B.mp3 替换视频 C 中的背景音
    step1:提取 C 中的视频,去除背景音,输出为无声的视频 D
    ffmpeg -i C.mp4 -vcodec copy -an D.mp4
    step2:将新的背景音 B 合成到视频 D 中生成新的视频 F
    ffmpeg -i D.mp4 -i B.mp3 -vcodec copy -acodec copy F.mp4

    4.3 视频转码

    这里有两个转换,一个封装的转换,一个编码的转换,我们常说的格式转换即为封装的转换,
    但编码格式有时受限于封装格式,所以有时也需要发生编码格式的转换。
    若不想关心音视频的编码方式只想换种封装格式,则可不指定编码方式,如下将 mp4 转为 mkv
    ffmpeg -i input.mp4 output.mkv
    当然我们知道 mkv 是支持任意的音视频编码方式,所以我们可以指定以 copy 的方式来转换可以加快输出速度,如下:
    ffmepg -i input.mp4 -vcodec copy -acodec copy output.mkv
    另外的要是我们的播放器受限只支持 h.264 编码方式的视频播放,那我们就可以指定输出的视频编码方式,如下:
    ffmpeg -i input.mp4 -vcodec h264 -acodec copy output.mkv
    其他的我们不仅可以转换视频的封装格式,和编码方式,
    我们也可以通过制定其他参数在改变视频的分辨率、码率、帧率等,了解更多可查看器帮助文档。

    五、小技巧

    1、限制 ffmpeg 的 cpu 使用率
    视频处理是一件非常消耗计算力的事情,通常 ffmpeg 会消耗 100% 的 cpu 来做这些事情,
    如果你使用的是笔记本,而视频又比较大,100% 的 cpu 使用持续不了几分钟,笔记本的风扇就要狂转,
    所以我们情愿多花点时间也不愿意把电脑热坏了,这可以通过限制 ffmpeg 的 cpu 使用率来降低笔记本的负担。
    我们通过加入 -threads 参数来实现这一点,如限制 cpu 使用率在 50%,则我们这样做:
    ffmpeg -i input.mp4 -threads 2 -vcodec h264 -acodec copy output.mkv
     
     
  • 相关阅读:
    echarts中3D地球模型
    面试题68
    Java正确创建对象数组
    8.Arrays类和比较器
    7.Base64类和UUID类
    6.大数字处理类
    3.JVM重要知识点
    2.JVM基础知识点
    1.JVM入门知识
    6.适配器模式
  • 原文地址:https://www.cnblogs.com/wanglao/p/11162432.html
Copyright © 2020-2023  润新知