您当前的位置:首页 > 计算机 > 软件应用 > 其它软件

ffmpeg --安装及简单使用(转视频格式)

时间:08-14来源:作者:点击数:

官网

http://www.ffmpeg.org/download.html

windows安装

在这里插入图片描述
在这里插入图片描述
如下载过慢,可以找我要安装包,qq:1206154726

下载后解压直接就可调用

from ffmpy3 import FFmpeg

ff = FFmpeg(inputs={r'C:\Users\ht-desktop-001\Desktop\1.mp4': None},
            outputs={r'C:\Users\ht-desktop-001\Desktop\1.avi': None})

print(ff.cmd)
ff.run()
# 转视频格式,需要的话可以配环境变量
#如果找不到ffmpeg,则修改源码绝对路径,在ffmpy3.py中
在这里插入图片描述

Centos (离线)安装

https://johnvansickle.com/ffmpeg/release-source/
在这里插入图片描述

下载后解压缩

xz -d ffmpeg-4.1.tar.xz
tar -xf ffmpeg-4.1.tar

确保系统有gcc和yasm(如果没有则下载)

 yum install gcc

安装yasm

 wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
 gunzip yasm-1.3.0.tar.gzcd yasm-1.3.0
 tar -xf yasm-1.3.0.tar
 cd yasm-1.3.0
 ./configure
 make && make install

cd ~
cd ffmpeg-4.1
./configure --enable-shared --prefix=/usr/local/ffmpeg  #输入如下命令/usr/local/ffmpeg为自己指定的安装目录
make & make install 
# 也可分开1.make  2.make install


修改文件/etc/ld.so.conf(也可不用)
vim /etc/ld.so.conf
输入以下内容
include ld.so.conf.d/*.conf
/usr/local/ffmpeg/lib/
输入ldconfig使修改生效。  

输入: 	/usr/local/ffmpeg/bin/ffmpeg -version 
或:  	/root/ffmpeg-4.1/ffmpeg -version




附录:
	# 如果此句还找不到so文件,吧lib文件需要加到环境变量中
	export LD_LIBRARY_PATH=/home/compile_ffmpeg/build/lib/  # 临时        配置之后最好运行一下:# ldconfig

	 在~/.bashrc 或者 ~/.bash_profile 中加入 export 语句(永久)
	 vim  ~/.bash_profile
	 export LD_LIBRARY_PATH=/root/project/code/tree_hole_gpt/ffmpeg/lib/   # 文件末尾添加

常用命令

视频相关

格式转换

.

# 命令: ffmpeg -i source target
# 例如avi转mp4
ffmpeg -i input.avi output.mp4

提取视频(从视频中提取音频)

# 命令: ffmpeg -i input -acodec type -vn output
# 例如mp4提取音频一般为aac,某些格式可能会报错
ffmpeg -i input.mp4 -acodec aac -vn output.aac

提取音频(只保留视频而不保留音频)

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

视频剪切

# 从时间为00:00:15开始,截取5秒钟的视频
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

ffmpeg -ss 00:00:00 -to 00:05:23 -i imput.mp4 -y -f mp4 -vcodec copy -acodec copy -q:v 1 output.mp4
参数说明:
	-ss 指定要截取的视频的起始时间。
	-to 指定要截取的视频的终止时间。
	-i 输入文件,这里指的就是视频文件。
	-y 表示无需询问,直接覆盖输出文件(如果有原文件的话)。
	-f 指定输出视频的格式。
	-acodec 指定音频编码格式。copy表示编码格式不发生改变,直接复制原来的编码格式,这样会大大提升速度。
	-vcodec 指定视频编码格式。copy表示编码格式不发生改变,直接复制原来的编码格式,这样会大大提升速度。
	-q:v 1 q是质量,v是视频,v的取值范围是[1, 35],取值1的时候,对应着最佳的视频质量。

添加字幕

# mp4添加软字幕
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4
# mkv添加软字幕
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv
# 硬字幕
ffmpeg -i end_font.mp4 -vf subtitles=words.srt -y output.mp4

码率控制

一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率

	# 将码率将为2Mbps
	ffmpeg -i input.mp4 -b:v 2000k output.mp4

ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize,用于设置码率控制缓冲器的大小,
设置的好处是,让整体的码率更趋近于希望的值,减少波动。
# 设置为码率在2Mpbs波动
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate最小码率,-maxrate最大码率
# 码率最大不超过2500k
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

编码转换

比如一个视频的编码是MPEG4,转换为H264编码
ffmpeg -i input.mp4 -vcodec h264 output.mp4

修改分辨率

将输入的1920x1080缩小到960x540输出
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

添加图片(可以用于给视频添加logo)

# 将图片添加到视频中,默认在左上角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
# 右上角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
# 左下角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
# 右下角
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

局部打码(可用于一些网站logo打码)

# 语法:-vf delogo=x:y:w:h[:t[:show]]
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

截取画面

# r表示每一秒几帧,-q:v表示存储jpeg的图像质量,一般2是高质量。
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg


如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来
# -ss表示开始时间,-t表示共要多少时间
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg


如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧

视频拼接

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

提取图像的频率,-ss 开始时间,-t 持续时间

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切视频

视频中生成gif图片

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif
// -t参数表示提取前10秒视频
// -s 表示按照 320x240的像素提取


ffmpeg -ss 0 -t 4 -i C:\Users\Yi\Desktop\4.74a8ed67.mp4 -s 1000*660 -r 15 res.gif
-ss 0秒开始
-t  4秒结束

视频导出成多张图片(取帧)

ffmpeg -i output.mp4 -r 30 -f image2 foo-%05d.jpeg

ffmpeg -i video.mp4 frames_%05d.png

帧合并视频

ffmpeg -i frames_%05d.png -vcodec mpeg4 test.mp4

ffmpeg -y -framerate 25 -i D:\video\frames_%05d.png -vcodec mpeg4 test.mp4

ffmpeg  -y -framerate 24.0 -i "D:/Temp/img/img.%04d.png" -c:v libx264 -crf 30 -preset:v ultrafast -pix_fmt yuv420p  -vf "scale=960:-2" "D:/Temp/output.mov"

参数:
y 将所有需要确认的操作默认为yes

-framerate 或 -r , 为帧率,默认25

-i “D:/Temp/img.%04d.png” 为输入图片的命名格式

-c:v 为视频编码格式, libx264表示使用H.264, 这种格式文件体积较小
H.264又有四种画质等级,baseline, extended, main, high
使用 -level 指定,1.0 、 2.0 、 3.0 或 4.0

-vf 为视频过滤器video filter,其中scale为resolution,-2表示保持原有比例,输入图片是720x540的,输出后视频的默认尺寸放大了,变为960x(540*960/720)

–preset的参数主要调节编码速度和质量的平衡,有ultrafast(转码速度最快,视频往往也最模糊)、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢。

-crf:v 为视频质量参数 constant rate factor,0-51,0为无损,51为最糟画质,默认23

-pix_fmt 为像素模式pixel format,最常用格式为yuv420p, 其它yuv444p, rgb555le等

查看视频总帧数

ffprobe test.mp4 -select_streams v -show_entries stream=nb_frames -of default=nk=1:nw=1 -v quiet

获取视频的总时长

ffprobe test.mp4 -select_streams v -show_entries stream=duration -of default=nk=1:nw=1 -v quiet
ffprobe -i input -show_entries format=duration -v quiet -of csv="p=0"

按间隔帧来提取视频中的帧(从第1帧取到第1000帧,隔4帧取一次)

ffmpeg -i test.mp4 -vf "select=between(n\,1\,1000)*not(mod(n\,4))" -vsync 0 image_%05d.jpg

按时间间隔取帧(每0.5秒取一帧)

ffmpeg -i test.mp4 -vf "select=(gte(t\,0.5))*(isnan(prev_selected_t)+gte(t-prev_selected_t\,0.5))" -vsync 0 aaaaaaa_%05d.jpg

查看视频信息

ffprobe -v quiet -show_format -show_streams -print_format json test.mp4

录屏

ffmpeg -f gdigrab -i desktop -q:v 0.01 -vcodec mpeg4 -f mp4 out.mp4
-i 输入设备
-vcodec 视频编码格式
-f 视频封装格式
缺点只能录制视频,不能录制音频

音频相关

使用ffmpeg播放pcm音频

ffplay.exe -ar 16000 -ac 1 -f s16le -i 111.pcm

格式转换

ffmpeg -i input.mp3 output.wav
# 转换过程中也可以指定其他参数
ffmpeg -i null.ape -ar 44100 -ac 2 -ab 16k -vol 50 -f mp3 null.mp3

ffmpeg.exe -ar 16000 -ac 1 -f s16le -i test1.raw test1.mp3
ffmpeg.exe -ar 16000 -ac 1 -f s16le -i test1.raw test1.wav

-i代表输入参数
-acodec aac(音频编码用AAC) 
-ar 设置音频采样频率
-ac  设置音频通道数
-ab 设定声音比特率
-vol <百分比> 设定音量

# wav 文件转 16k 16bits 位深的单声道pcm文件
ffmpeg -y  -i 16k.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm


# 44100 采样率 单声道 16bts pcm 文件转 16000采样率 16bits 位深的单声道pcm文件
ffmpeg -y -f s16le -ac 1 -ar 44100 -i test44.pcm  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm

# mp3 文件转 16K 16bits 位深的单声道 pcm文件
ffmpeg -y  -i aidemo.mp3  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm

// -acodec pcm_s16le pcm_s16le 16bits 编码器
// -f s16le 保存为16bits pcm格式
// -ac 1 单声道
//  -ar 16000  16000采样率

百度文档: https://ai.baidu.com/ai-doc/SPEECH/7k38lxpwf

音频合成

# 直接拼接
ffmpeg -i "concat:input1.mp3|input2.mp3|input3.mp3" -c copy output.mp3
# 或者混合在一起
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT

音视频合成

如果音频比视频长,就会停在最后一帧继续播放音频
ffmpeg -i a.wav  -i a.avi out.avi

截取音频

ffmpeg64.exe -i 124.mp3 -vn -acodec copy -ss 00:00:00 -t 00:01:32 output.mp3

录制命令

# 录制屏幕,输出到d:/out.mp4
ffmpeg -f gdigrab -i desktop -f mp4 d:/out.mp4
# -r设置帧率
此命令用于录制视频,无法录制声音,按q退出

录制音频

# 查看设备
ffmpeg -f dshow -list_devices true -i dummy
在这里插入图片描述
# 录制麦克风
ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -acodec libmp3lame audio.mp3
# 录制系统声音,立体声看不见可能是被禁用了
ffmpeg -f dshow -i audio="立体声混音 (Realtek High Definition Audio)" -acodec libmp3lame audio.mp3

同时录制音频视频

# 录制屏幕和系统声音
ffmpeg -f dshow -i audio="立体声混音 (Realtek High Definition Audio)" -f gdigrab -i desktop -f mp4 d:/out.mp4
# 录制屏幕和麦克风
ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -f gdigrab -i desktop -f mp4 d:/out.mp4

python打包后去除日志框输出

 os.system(
           f'{self.ffmpeg} -y -i {old_path} -vframes 1 '
           f'{os.path.join(self._desktop_path, dir_name)}.jpg > NUL 2>&1')
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐