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
相关推荐
im_AMBER2 小时前
算法笔记 10
笔记·学习·算法·leetcode
qzhqbb5 小时前
神经网络—— 学习与感知器
神经网络·学习
charlie1145141919 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
✎ ﹏梦醒͜ღ҉繁华落℘12 小时前
FreeRTOS学习笔记(应用)-- 各种 信号量的应用场景
笔记·学习
星星火柴93612 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
BeingACoder12 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
安全不再安全13 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
BreezeJuvenile13 小时前
外设模块学习(8)——HC-SR04超声波模块(STM32)
stm32·单片机·嵌入式硬件·学习·超声波测距模块·hc-sr04
LBuffer14 小时前
破解入门学习笔记题三十八
笔记·学习