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.gztar -zxvf ffmpeg-3.4.13.tar.gz
-
指定安装目录
安装路径 “/usr/local/ffmpeg”
cd ffmpeg-5.1./configure --prefix=/usr/local/ffmpeg./configure --prefix=/usr/local/ffmpeg --enable-openssl --disable-x86asmmake && make install
-
配置变量
vi /etc/profile在最后PATH添加环境变量:export PATH=$PATH:/usr/local/ffmpeg/bin
4.使配置变量生效
source /etc/profile
5.测试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%7Edefault%7EYuanLiJiHua%7ECtr-1-150421707-blog-144864353.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7ECtr-1-150421707-blog-144864353.235%5Ev43%5Epc_blog_bottom_relevance_base6&utm_relevant_index=2
1. Linux上查看ffmpeg安装位置
- which ffmpeg
- type -a ffmpeg
- whereis ffmpeg
- find / -name ffmpeg 2>/dev/null
- dpkg -l ffmpeg
rmp -ql ffmpeg - ls /usr/bin/ffmpeg
2. 测试 ffmpeg 的使用
- 使用ffmpeg将 MP4 转换为 MU38
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
参数说明:
-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. 获取视频时长的方式
- ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 your_video.mp4
- ffmpeg -i your_video.mp4 2>&1 | grep Duration
- 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
2)
ffmpeg -i input.mp4 -vf ‘select=eq(pict_type,I),fps=1’ -frames:v 1 output.jpg
3)
for file in *.mp4; do
ffmpeg -i "$file" -ss 00:00:05 -frames:v 1 "${file%.mp4}.jpg"
done
4 .学习记录
-
输出其他格式
ffmpeg -i input.avi output.mp4 -
将输出文件的视频比特率设置为64千比特每秒。
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4 -
将输出文件的帧率强制设置为24帧每秒。
ffmpeg -i input.avi -r 24 output.mp4 -
将输入文件(仅适用于原始格式)的帧率强制设置为1帧/秒,将输出文件的帧率设置为24帧/秒:
ffmpeg -r 1 -i input.m2v -r 24 output.mp4 -
基本配置
# 查看支持的编解码器
ffmpeg -codecs
# 查看支持的文件格式
ffmpeg -formats
# 查看支持的滤镜
ffmpeg -filters
# 查看支持的协议
ffmpeg -protocols
- 常用配置
# 日志级别
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
- 常用命令详解
# 音频格式转换
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