Windows 软件之 FFmpeg

文章目录

    • 前言
    • 1 FFmpeg 视频处理
      • 1.1 编解码
      • 1.2 其它视频编辑命令
      • 1.3 视频抽帧
    • 2 FFmpeg 音频处理
    • 3 FFmpeg 图片处理
      • 3.1 编解码
      • 3.2 拼接图片
      • 3.3 图片合成视频
    • 附录1:mediainfo.ps1

前言

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

1 FFmpeg 视频处理

为方便测试,我们首先使用 winget install MediaArea.MediaInfo 命令安装一下 mediainfo 命令(可以方便地查看视频信息),然后创建 mediainfo.ps1 文件,并输入附录1中的内容。

这里我以周董稻香 mv 视频为例。视频信息如下:

1.1 编解码

可通过转换分辨率、视频编码转换为 H265 等方式来压缩视频大小。

  • 1)转换编码(压缩)
    ffmpeg -hwaccel cuda -i .\周杰伦-稻香.mp4 -vf scale=720:480 -c:v libx265 -crf 18 .\周杰伦-稻香C.mp4-hwaccel     可选择 cpu 或 gpu 加速-i           输入的视频文件-vf scale    视频分辨率(宽x高)-c:v libx265 选择视频编码为 H265-crf         Constant Rate Factor, 0~51,默认 28,20 以下时视觉上无损
    
  • 2)转换结果:大小减少 20.8%。

当然,原视频分辨率为 720x480,也可以指定为 2560×1440 的 2K 分辨率,不过视频大小就会大大增加了。

  • 参考:https://zhuanlan.zhihu.com/p/582654225

1.2 其它视频编辑命令

# (1)调整视频的分辨率
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
# (2)调整视频的码率
ffmpeg -i input.mp4 -b:v 512k output.mp4
# (3)使用更高效的视频编码格式
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
# (4)截取前 10 秒视频
ffmpeg -i input.mp4 -ss 00:00:00 -to 00:00:10 -c copy output.mp4# (5)视频合并(fps、分辨率不同的视频合并会出现问题)
# 5.1 创建文件 1.txt 后输入以下内容(有多少视频就输入多少行):
file '视频名'
# 5.2 命令行执行以下命令进行合并
ffmpeg.exe -f concat -safe 0 -i .\1.txt -c copy -y '1.mp4'# (6)将图片设置为视频封面
ffmpeg -i input_video.mp4 -i input_image.png \-map 0 -map 1 \-c copy -c:v:1 png \-disposition:v:1 attached_pic \output_video.mp4
  • 参考:
    • https://blog.csdn.net/xindoo/article/details/130186891
    • https://www.zhihu.com/question/323211391

1.3 视频抽帧

# (1)抽取视频关键帧(IPB)
ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png# (2)抽取视频场景转换帧
ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr %03d.png# (3)均匀抽帧:-r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧。
ffmpeg -i video.mp4 -r 1 -q:v 2 -f image2 ./%08d.000000.jpg# (4)抽取指定时间帧
ffmpeg -ss 00:00:30 -i video.mp4 -vframes 1 0.jpg   # 耗时短(使用关键帧进行索引)
ffmpeg -i video.mp4 -ss 00:00:30 -vframes 1 0.jpg   # 耗时长# (5)抽帧制作缩略图
ffmpeg -i video.mp4 -vf 'fps=1/95:round=zero,scale=480x360,tile=8x6' M%03d.jpg# -vf 表示指定过滤器。多个过滤器用 ',' 隔开;一个过滤器的多个参数使用 ':' 分开# fps=1/95 表示 95 秒输出一张图# round=zero 表示时间戳向 0 取整# scale=480x360 表示图片分辨率大小# tile=5x5 表示将截图使用 8x6 组合起来

制作缩略图:ffmpeg -i .\周杰伦-稻香C.mp4 -vf ‘fps=1/11:round=zero,scale=720x480,tile=5x4’ M%03d.jpg

也可以使用 PotPlayer 来创建缩略图:右键 -> 视频 -> 图像截取 -> 创建缩略图

  • 参考:
    • FFmpeg视频抽帧那些事:https://zhuanlan.zhihu.com/p/85895180
    • FFmpeg 制作视频预览缩略图:https://zhuanlan.zhihu.com/p/570453447
    • https://www.coder.work/article/3458321

2 FFmpeg 音频处理

# 1 提取音频 mp3
ffmpeg.exe -i .\周杰伦-稻香.mp4 -vn -c:a libmp3lame -q:a 1 .\周杰伦-稻香.mp3# 2 音频格式由 mp3 转换为 ogg
ffmpeg.exe -i .\周杰伦-稻香.mp3 .\周杰伦-稻香.ogg

批量转换批处理见:
audio-converter.bat: https://gitee.com/luyaocf/dev_ops_scripts.git
官方说明:https://ffmpeg.org/ffmpeg.html#Audio-Options

3 FFmpeg 图片处理

3.1 编解码

  • 1)批量转换编码
# ffmpeg -i in.jpg -vf scale=width:height out.pngset a=!cd!
for /f "delims=" %%i in ('dir /b /s "%a%\*png*"') do (echo %%~nxi   %%~ni_c.pngffmpeg -i %%~nxi -vf scale=iw/2:ih/2 %%~ni_c.png
)

3.2 拼接图片

ffmpeg -i 1.jpg -i 2.jpg -filter_complex vstack out.jpg
  • 参考:https://juejin.cn/post/7229636745578627130

3.3 图片合成视频

ffmpeg -r 1 -f image2 -i '(%d).jpg' -c:v libx265 -vf scale=-1:1280 -crf 17 -y o.mp4
  • -r 调整帧率:默认 25 帧,即每秒拼接 25 张图片。

  • -b:v 4M 调整视频码率:码率指每秒播放的数据量(bit)。如果图片比较大,则生成的视频较大;改变码率会影响到视频清晰度;h265 编码可以用更小的码率生成 h264 同等的视频质量。

  • -crf 调整视频质量:用来平衡视频质量和文件大小的参数。取值范围 0~51,默认 23,建议 17~28。

  • -c:v libx265 调整视频的编码格式:默认 h264。可以使用 h265 生成更小的。

    • 可以使用 -c:v libvpx 或 -c:v libvpx-vp9 生成 v8 和 v9 编码的 webm 文件(默认低质量)
  • -vf scale=宽x高 调整视频分辨率:将宽或高设置为 -1 可以将其等比例缩放。

  • 参考:https://blog.csdn.net/xindoo/article/details/121451318

附录1:mediainfo.ps1

<### 通过 ffmpeg 查看视频信息#># Clear-Variable 	删除变量的值。
# Compare-object 	比较两组对象。
# ForEach-Object 	对输入对象集合中的每个项目执行操作。
# Get-childItem 	在一个或多个指定位置获取项目和子项目。
# Invoke-commands 	在本地和远程计算机上执行命令。
# Set-variable 		设置变量的值。
# Start-Job 		启动 Windows PowerShell 的后台作业。# [Math] | Get-Member -Static   获取 Math 类中的静态方法<### 安装 mediainfo 命令:#  winget search mediainfo#  winget install MediaArea.MediaInfo#># $arg        表示命令行参数集合
foreach($arg in $args) {# Write-Host $arg$param = "
General;                                        \n
Complete name   : '%CompleteName%'              \n
File size       : %FileSize/String4%            
"$param = $param -replace '\r?\n?'mediainfo --Inform=$param "$arg"$param = "
Video;
Codec ID        : %CodecID%                     \n
Codec ID/Info   : %CodecID/Info%                \n
Aspect ratio    : %DisplayAspectRatio/String%   \n
Width           : %Width%                       \n
Height          : %Height%                      \n
Frame rate      : %FrameRate%                   \n
Duration        : %Duration%			        \n
Duration        : %Duration/String1%;           \n
"$param = $param -replace '\r?\n?'mediainfo --Inform=$param "$arg"$duration = mediainfo --Inform="Video;%Duration%"   "$arg"$frame_rt = mediainfo --Inform="Video;%FrameRate%"  "$arg"$frame = [Math]::Floor($duration / 1000 * $frame_rt)Write-Host "Frame           : $frame"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477990.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

MATLAB的addpath和rmpath函数增加或删除路径

在进行MBD建模开发时&#xff0c;模型生成代码时常需要加载一些其他的文件&#xff0c;例如代码生成模版文件cgt文件、模型所涉及的头文件&#xff0c;这个时候可以在模型的回调函数中使用addpath和rmpath函数加载和删除路径&#xff0c;例如设置模型的加载之前的回调函数在模型…

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装&#xff0c;这里用单个文件举例。 在文件工程目录下&#xff0c;自建一个文件夹&#xff0c;里面放上需要封装的verilog文件。 选择第三个&#xff0c;指定路径封装&#xff0c;找到文件所在目录 取个名&#xff0c;选择封装IP的路径 会…

前端速通(CSS)

1.CSS介绍 1.什么是CSS? CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用于控制网页的外观和布局的样式表语言。它与HTML&#xff08;超文本标记语言&#xff09;紧密配合&#xff0c;负责页面元素的样式定义&#xff0c;如字体、颜色、尺…

Android 13 编译Android Studio版本的Launcher3

Android 13 Aosp源码 源码版本 Android Studio版本 Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源) Launcher3IconLoaderLib(图片加载&#xff0c;冲突资源单独新建) 需要值得注意的是&#xff1a; SystemUISharedLib.jar 有kotlin和java下的&#xff0c;在 Lau…

idea添加版权信息

1、添加Copyright Profiles 打开Settings -> Editor -> Copyright -> Copyright Profiles -> 新增 Copyright (c) 【你的版权信息】 【开始年份】-${today.year}. All rights reserved.如&#xff1a; Copyright (c) by cwp 2024-${today.year}. All rights rese…

【计算机网络】多路转接之poll

poll也是一种linux中的多路转接方案(poll也是只负责IO过程中的"等") 解决&#xff1a;1.select的fd有上限的问题&#xff1b;2.每次调用都要重新设置关心的fd 一、poll的使用 int poll(struct pollfd *fds, nfds_t nfds, int timeout); ① struct pollfd *fds&…

【C语言】深入剖析 C 语言中数组与指针的紧密联系及高效应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;例一&#xff1a;指针偏移遍历数组1.1 代码回顾1.2 代码分析1.3 理论扩展&#xff1a;数组与指针的关系1.4 数组与指针的应用场景 &#x1f4af;例二&#xff1a;自定义…

基于SpringBoot的数据结构系统设计与实现(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

算法训练-双指针

双指针 leetcode392. 判断子序列 法一&#xff1a;动态规划 法二&#xff1a;双指针 leetcode876. 链表的中间结点 法一&#xff1a;链表数组 法二&#xff1a;快慢指针 leetcode160. 相交链表 法一&#xff1a;双指针 leetcode167. 两数之和 II - 输入有序数组 法一&…

零基础学指针(上)

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

shell编程之sed

sed 是一种流编辑器&#xff0c;它是文本处理中非常有用的工具&#xff0c;能够完美的配合正则表达式使用&#xff0c;处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为模式空间&#xff0c;接着用sed 命令处理缓冲区中的内容&#xff0c;处理完成 后&…

一文学习开源框架OkHttp

OkHttp 是一个开源项目。它由 Square 开发并维护&#xff0c;是一个现代化、功能强大的网络请求库&#xff0c;主要用于与 RESTful API 交互或执行网络通信操作。它是 Android 和 Java 开发中非常流行的 HTTP 客户端&#xff0c;具有高效、可靠、可扩展的特点。 核心特点 高效…

多目标优化算法:多目标极光优化算法(MOPLO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、极光优化算法 极光优化算法&#xff08;Polar Lights Optimization, PLO&#xff09;是2024年提出的一种新型的元启发式优化算法&#xff0c;它从极光这一自然现象中汲取灵感。极光是由太阳风中的带电粒子在地球磁场的作用下&#xff0c;与地球大气层中的气体分子碰撞而产…

【贪心算法第二弹——2208.将数组和减半的最小操作数】

1.题目解析 题目来源 2208.将数组和减半的最小操作数——力扣 测试用例 2.算法原理(贪心策略) 3.实战代码 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> hash;double sum 0.0;for(auto e : nums){hash.push(e);sum …

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1&#xff09;google浏览器下载Get cookies.txt LOCALLY插件2&#xff09;导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1&#xff09;使用Pycharm(2024.3)进行代码…

深入理解下oracle 11g block组成

深层次说&#xff0c;oracle数据库的最少组成单位应该是块&#xff0c;一般默认情况下&#xff0c;oracle数据库的块大小是8kb&#xff0c;其中存储着我们平常所需的数据。我们在使用过程中&#xff0c;难免会疑问道&#xff1a;“oracle数据块中到底是怎样组成的&#xff0c;平…

2024年12月Gesp七级备考知识点拾遗第一期(图的定义及遍历)

目录 总序言 知识点拾遗​编辑 度数 环 二叉树 图的遍历 深度优先 广度优先 连通与强连通 有什么不同 构成分别至少需要几条边&#xff08;易错题&#xff09;&#xff1f; 无向连通图 有向强连通图 完全图 什么是完全图 无向完全图最少边数 有向完全图最少边…

家庭智慧工程师:如何通过科技提升家居生活质量

在今天的数字化时代&#xff0c;家居生活已经不再只是简单的“住”的地方。随着物联网&#xff08;IoT&#xff09;、人工智能&#xff08;AI&#xff09;以及自动化技术的快速发展&#xff0c;越来越多的家庭开始拥抱智慧家居技术&#xff0c;将他们的家变得更加智能化、便捷和…

图像处理实验报告

实验一 图像处理的MATLAB基础 实验目的&#xff1a;熟悉数字图象处理的基本软件工具和操作 实验内容&#xff1a;Matlab应用复习&#xff0c;矩阵产生、操作&#xff1b;矩阵运算以及字符运算。 1.利用增量产生向量[0,2,4,6,8,10]。 2.利用magic(n)函数产生7维魔鬼矩阵A&am…