ffmpeg学习记录

软件安装包版本

https://www.ffmpeg.org/releases/

一 在centos7.2 上安装ffmpeg(待查证)

1. 安装依赖

复制代码
sudo yum install -y yum-utils epel-release
sudo yum groupinstall -y 'Development Tools'
sudo yum install -y nasm yasm libass-devel libvpx-devel libvpx-tools libwebp-devel libx264-devel libx265-devel libtheora-devel x264-devel x265-devel ffmpeg-devel

2. 下载ffmpeg源码

复制代码
cd /usr/local/src
sudo wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
sudo tar -xvf ffmpeg-snapshot.tar.bz2
cd ffmpeg

3. 配置ffmpeg

复制代码
sudo ./configure --prefix="/usr/local" --enable-gpl --enable-libass --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libtheora --enable-nonfree --enable-openssl --enable-shared --enable-version3

4. 编译安装

复制代码
sudo make
sudo make install

5. 验证安装

复制代码
ffmpeg -version

6.创建软连接(附加)

复制代码
sudo ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg
sudo ln -s /usr/local/bin/ffprobe /usr/bin/ffprobe

方式二:下载源码包

压缩包地址 https://www.ffmpeg.org/releases/

复制代码
wget https://www.ffmpeg.org/releases/ffmpeg-3.4.13.tar.gz

tar -zxvf ffmpeg-3.4.13.tar.gz
  1. 指定安装目录

    安装路径 "/usr/local/ffmpeg"

    cd ffmpeg-5.1

    ./configure --prefix=/usr/local/ffmpeg

    ./configure --prefix=/usr/local/ffmpeg --enable-openssl --disable-x86asm

    make && make install

  2. 配置变量

    复制代码
    vi /etc/profile
    
    在最后PATH添加环境变量:
    
    export PATH=$PATH:/usr/local/ffmpeg/bin

4.使配置变量生效

source 复制代码
source /etc/profile

5.测试ffmpeg是否成功

ffmpeg 复制代码
ffmpeg -version

二 ffmpeg 的使用教程

1. FFmpeg 学习资料

中文官网: https://ffmpeg.p2hp.com/download.html

博客学习网址:

https://blog.csdn.net/qq_56591814/article/details/144864353

https://blog.csdn.net/Dontla/article/details/135371373

https://blog.csdn.net/p6448777/article/details/150421707?spm=1001.2101.3001.6650.1\&utm_medium=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Ctr-1-150421707-blog-144864353.235^v43^pc_blog_bottom_relevance_base6\&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~YuanLiJiHua~Ctr-1-150421707-blog-144864353.235^v43^pc_blog_bottom_relevance_base6\&utm_relevant_index=2

1. Linux上查看ffmpeg安装位置

  1. which ffmpeg
  2. type -a ffmpeg
  3. whereis ffmpeg
  4. find / -name ffmpeg 2>/dev/null
  5. dpkg -l ffmpeg
    rmp -ql ffmpeg
  6. ls /usr/bin/ffmpeg

2. 测试 ffmpeg 的使用

  1. 使用ffmpeg将 MP4 转换为 MU38
sh 复制代码
ffmpeg -i /data4t/wwwroot/xcx.3shi1.com/JQ/tp/public/11.mp4 
-f segment -segment_time 10 -segment_format mpegts 
-segment_list /data4t/wwwroot/t.3shi1.cn/movietrs/202511/04/1762237060.m3u8 
-c copy -bsf:v h264_mp4toannexb 
-map 0 /data4t/wwwroot/t.3shi1.cn/movietrs/202511/04//1762237060-%04d.ts
angular2html 复制代码
参数说明:
-i : 这个是输入文件参数,后面直接跟输入文件的路径
-c copy : 这个选项告诉ffmpeg使用复制流的方式来处理视频和音频数据,不进行重新编码
-bsf:v  h264_mp4toannexb 
   这个选项是比特流过滤器(Bitstream Filter)的简写,
   用于将 H.264 NAL 单元格式从 MP4 封装中的起始码前缀(start code prefix)转换为 Annex B 格式。
   Annex B 格式通常用于裸流文件(raw stream files),比如用于网络传输或某些特定的视频处理需求。
-map 0: 这个选项是用来选择输入文件中的流.
             0 表示第一个输入文件,
             -map 0 表示复制所有的流

-f segment :
    指定ffmpeg的输出格式为"segment".意味着ffmpeg会将暑期视频分割成多个小片段,而不是生成一个单一的视频文件
-segment_time 10:
     这个参数指定了每个视频片段的时长,单位是秒. 
     10 表示每个片段长度为 10秒, 如果有个1分钟的视频,他将被分割成6个10秒.
-segment_format mpegts: 
      这个参数指定了输出视频片段的格式.mpegts 表示输出格式为 MPEG_TS(MPEG)传输流,
      这是一种广泛用于流媒体的格式.这意味着每个视频片段将是一个独立的 MPEG-TS文件.
-segment_list
      这个参数用于生成一个包含所有分割片段列表的文件. 你可以指定一个文件名,
      例如 -segment_list playlist.m3u8,这将创建一个 M3U8 播放列表文件,
      其中包含了所有 MPEG-TS 片段的引用,通常用于流媒体播放。


这里,output%03d.ts 是输出文件名的模式,
%03d 是一个占位符,表示数字将被格式化为至少三位数(例如,output001.ts, output002.ts 等)。
这确保了文件名的顺序性和唯一性。

3. 获取视频时长的方式

  1. ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 your_video.mp4
  2. ffmpeg -i your_video.mp4 2>&1 | grep Duration
  3. ffmpeg -i your_video.mp4 -f null - 2>&1 | grep Stream

4. 获取视频封面

ffmpeg -i input.mp4 -ss 00:00:05 -frames:v 1 output.jpg

ffmpeg -i input.mp4 -vf 'select=eq(pict_type,I),fps=1' -frames:v 1 output.jpg

angular2html 复制代码
for file in *.mp4; do
ffmpeg -i "$file" -ss 00:00:05 -frames:v 1 "${file%.mp4}.jpg"
done

4 .学习记录

  1. 输出其他格式

    ffmpeg -i input.avi output.mp4

  2. 将输出文件的视频比特率设置为64千比特每秒。

    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4

  3. 将输出文件的帧率强制设置为24帧每秒。

    ffmpeg -i input.avi -r 24 output.mp4

  4. 将输入文件(仅适用于原始格式)的帧率强制设置为1帧/秒,将输出文件的帧率设置为24帧/秒:

    ffmpeg -r 1 -i input.m2v -r 24 output.mp4

  5. 基本配置

angular2html 复制代码
# 查看支持的编解码器
ffmpeg -codecs 
# 查看支持的文件格式
ffmpeg -formats
# 查看支持的滤镜
ffmpeg -filters
# 查看支持的协议
ffmpeg -protocols 
  1. 常用配置
angular2html 复制代码
# 日志级别
ffmpeg -loglevel quiet|panic|fatal|error|warning|info|verbose|debug|trace
# 覆盖输出文件
ffmpeg -y -i input.mp4 output.avi   -y表示自动覆盖已经存在的输出文件
# 指定线程数
ffmpeg -threads 4 -i input.mp4 output.avi
  1. 常用命令详解
angular2html 复制代码
# 音频格式转换
wav -> pcm
ffmpeg -i input.wav -f s16le -ar 16000 -ac 1 -acodec pcm_s16le output.pcm

参数说明:
-f s16le:指定输出格式为有符号16位小端PCM
-ar 16000:设置采样率为16kHz
-ac 1:设置为单声道
-acodec pcm_s16le:指定音频编解码器为PCM 16位小端

PCM 转 WAV
MP3 转 WAV
WAV 转 MP3
相关推荐
周全全18 小时前
基于ElasticSearch的语义检索学习-向量化数据、向量化相似度、向量化检索
大数据·学习·elasticsearch
4***721318 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
爬虫·学习·计算机外设
t***316518 小时前
爬虫学习案例3
爬虫·python·学习
hhcccchh19 小时前
学习vue第七天 从单页面应用(SPA)进化为后台管理系统架构
vue.js·学习·系统架构
q***040519 小时前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg
文涛是个小白呀19 小时前
Java集合大调研
java·学习·链表·面试
hd51cc19 小时前
MFC多线程学习笔记三:线程间的通信
笔记·学习
hd51cc19 小时前
MFC多线程学习笔记四:线程间的同步
笔记·学习·mfc
一叶飘零_sweeeet19 小时前
FFmpeg 实战全解析:从底层原理到企业级应用落地
ffmpeg
wdfk_prog19 小时前
[Linux]学习笔记系列 -- [block]bfq-iosched
linux·笔记·学习