2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 软件应用 > 其它软件

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

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

官网

  • 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.02.03.04.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-510为无损,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')
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐