🔔

Hobby Others6:FFMPEG视频转为图片

1. 分离视频音频流

FMPEG视频转为图片

1.1 分离视频流

ffmpeg -i input_file -vcodec copy -an output_file_video 

1.2 分离音频流

ffmpeg -i input_file -acodec copy -vn output_file_audio

2. 剪切视频

  • -r :提取图像的频率
  • -ss :开始时间
  • -t :持续时间
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi

3. 从视频中生成gif图片

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

4. 视频导出成多张图片

  • -r :参数表示按照30帧的速度提取。
  • 帧数越大,提取越多
ffmpeg -i output.mp4 -r 30 -f image2 foo-%05d.jpeg ffmpeg -i D:\视频\2022-07-14.mp4 -r 30 -f image2 D:\视频\temp\dnf-%05d.jpg

5. FFMPEG录制视频

5.1 录制桌面

为了实现对于Window桌面录制,有两种方式进行采集:
  1. DirectShow 设备
  1. gdigrab设备
使用GDI screengrabber可以录制主屏幕的内容
  1. 抓取所有显示设备(双屏幕也可以都抓),CMD终端运行如下命令开始,按Q退出
//Dshow设备 ffmpeg -f dshow -i video="screen-capture-recorder" output.mkv //gdigrab设备 采集整个桌面 ffmpeg -f gdigrab -framerate 30 -i desktop output.mkv
这两个命令默认都是采用x264 进行编码,在本地CPU不是足够高的情况下,录制的视频画面根本看不清楚,这是因为编码效率太低导致;
为了提高录制效果,我们可以采用无损编码+提高编码速度方式进行录制,具体命令如下:
  • libx264rgb需要提前编译好,windows下需要自己编译(可以参考下方报错安装提示)
ffmpeg -framerate 30 -f gdigrab -i desktop -c:v libx264rgb -crf 0 -preset ultrafast output.mkv # 或者 ffmpeg -framerate 30 -f gdigrab -i desktop -c:v libx264rgb -preset:v ultrafast -tune:v zerolatency output.mkv
  1. 抓取指定区域,相对于左上角位置
ffmpeg -f gdigrab -framerate 30 -offset_x 10 -offset_y 20 -video_size 640x480 -show_region 1 -i desktop output2023.mkv
  1. 获取名称为“微信”的窗口
ffmpeg -f gdigrab -framerate 30 -i title=微信 output.mkv
2.FFmpeg操作参数
目录: 1. FFmpeg简介 https://zhuanlan.zhihu.com/p/142593316 2.FFmpeg操作参数 https://zhuanlan.zhihu.com/p/145312133 3.FFmpeg常用操作 https://zhuanlan.zhihu.com/p/145592911 原创《You-Get从入门到实践》 https://zhuanlan.zhihu.com/p/325927078 Homebrew从入门到实践:视频教程 https://zhuanlan.zhihu.com/p/319809242 通过homebrew,在终端安装FFmpeg: 在终端输入: 第一部分:FFmpeg版本、位置、模块等信息(可不看) ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.16) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/ Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/ Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack libavutil 56.
2.FFmpeg操作参数

报错

Unknown encoder 'libx264rgb’

这是在安装ffmpeg时没有安装libx264库导致
安装libx264
git clone https://code.videolan.org/videolan/x264.git
windows下自己编译libx264可以参考:
win10下编译ffmpeg和x264
每次在windows下编译ffmpeg和x264都要折腾半天,c++的编译真是烦人,不提缓慢的编译速度就编译环境配置经常都要浪费很多时间。 距离上次编译ffmpeg和x264已经过去很久了,当初没做笔记现在又重头再来。 这次只编译x64版本,不编译32位版本。 操作系统:win10 64bit vs:vs2017 MSYS2,先从 官网下载x86_64版本安装程序。安装完成之后,先把安装目录下的 msys2_shell.cmd中注释掉的 rem set MSYS2_PATH_TYPE=inherit改成 set MSYS2_PATH_TYPE=inherit ,这是为了将vs的环境继承给MSYS2。 MSYS2可以选择msys或者MinGW-w64环境来编译,不过在msys下使用gcc编译出来的exe和dll依赖 msys-2.0.dll,而MinGW-w64下编译出来的文件不需要依赖这个dll,从程序的运行效率来看,不依赖这个dll的程序的效率应该更高。所以就我个人喜好来说,肯定是选择MinGW-w64来编译,而且我都在两者环境下编译过x264,configure 时在msys下还必须disable掉一些选项,比如-disable-thread --disable-avs 。 pacman是一个软件包管理器,用来在MSYS2中安装软件,但是默认的国外的源下载安装包时非常缓慢,大概只有十几二十KB的速度,而且还容易下载中断出错,所以需要修改为国内源,国内源可以选择中科大的源。 打开这个页面: MSYS2 镜像使用帮助 ,如页面中所说做如下修改: pacman 的配置 编辑/etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加: Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686 编辑/etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加: Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64 编辑/etc/pacman.d/mirrorlist.msys ,在文件开头添加: Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch 然后执行在msys2的shell中执行 pacman -Sy 刷新软件包数据即可。 如果选择 MinGW-w64编译则打开 MSYS2 MinGW 64-bit 快捷方式,在shell窗口中输入: pacman -S mingw-w64-x86_64-toolchain 然后选择全部安装。 而如果选择 msys编译则打开 MSYS2 MSYS 快捷方式,在shell窗口中输入: pacman -S msys2-devel 或者 pacman -S make gcc diffutils pkg-config 然后选择全部安装。 1.
win10下编译ffmpeg和x264