技术宅学会几招FFmpeg

2023-11-15

有些时候,我需要对某个视频文件做一些简单的处理。也或者是受亲戚朋友的委托吧(又不好意思推辞,因为人家觉得你是搞技术的,这点小事应该能轻松搞定)。但是,我犯不着为这点事去安装一个笨重的多媒体软件。我也不想去网上随便找个免费的小工具,怕它不干净。总之,我不想安装没有足够信誉的软件。不过,国外的开源软件还是可以信一信的,比如FFmpeg。矫情吧?

FFmpeg都是命令行的,用起来肯定不方便。但是,这对技术宅应该不成问题。下面,我就罗列一些比较实用的使用方法吧。

FFmpeg的下载与安装

FFmpeg是开源的。但我们不必去下载它的源代码。下载已经编译好的exe/dll即可。可以到Download FFmpeg,然后点击“Windows Builds”,再根据你当前的机器是32位还是64位来决定下载哪个包。我的机器跑的是Win 7,所以我选择了“Download FFmpeg git-7c210c4 64-bit Shared”。如果你英文不好,也可以直接去我的网盘下载:FFmpeg_免费高速下载|百度网盘-分享无限制

下载完成之后,解压到硬盘上,假设路径为E:\OpenSrc。启动一个控制台程序,然后执行DOS命令进入FFmpeg工具的bin目录,如下:

应用场景1:格式转换

我想把用iPhone拍的.MOV文件转成.avi文件。最简单了,可以执行下面的命令:

ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output.avi

意思是,把D:\Media目录下的源文件IMG_0873.MOV(视频:h.264,音频:aac)转换成output.avi(编码格式自动选择为:视频mpeg4,音频mp3),目标文件仍然保存到D:\Media目录下。问题来了:我想自己指定编码格式,怎么办呢?一种方法是,通过目标文件的扩展名(.flv、.mpg、.mp4、.wmv等)来控制,比如:

ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output2.flv

另一种方法是通过-c:v参数来控制,比如我想输出的视频格式是H.265(警告:编码时间会比较长哦)。命令行如下:

ffmpeg -i D:\Media\IMG_0873.MOV -c:v libx265 D:\Media\output265.avi

注:可以先用ffmpeg -encoders命令查看一下所有可选的编码格式。

不再深究了,我们继续。我发现源文件的图像帧尺寸是1920x 1080,我不需要这么大——能有720 x 480就够了。于是,就要用上-s参数了。为了保证图像缩放后的质量,最好加上码率参数-b:v。如下:

ffmpeg -i D:\Media\IMG_0873.MOV -s 720x480 -b:v 1500k D:\Media\output2.avi

还可以更简单一点,使用-target参数匹配行业标准,参数值可以是vcd、svcd、dvd、dv、dv50等,可能还需要加上电视制式作为前缀(pal-、ntsc-或film-)。如下:

ffmpeg -i D:\Media\IMG_0873.MOV -target pal-dvd D:\Media\output2dvd.avi

又来一个问题:我发现用手机拍的视频中,有些是颠倒的,我想让它顺时针旋转90度。这时候,可以使用-vf参数加入一个过滤器,如下:

ffmpeg -i D:\Media\IMG_0873.MOV -vf "rotate=90*PI/180" D:\Media\output3.avi

注:如果想逆时针旋转90度,90前面加个负号就可以了。

如果我只需要从源视频里截取一小段,怎么办呢?比如从第2秒的地方开始,往后截取10秒钟。命令行可以这样:

ffmpeg -ss 2 -t 10 -i D:\Media\IMG_0873.MOV D:\Media\output4.avi

注:这种情况下,-ss和-t参数必须放在-i前面,表示是限定后面跟着的输入文件的。

应用场景2:视频合成

我发现,用手机拍的视频有时候背景噪音比较大。怎么把噪音去掉,换成一段美妙的音乐呢?使用FFmpeg也能轻易做到。

第一步:把源文件里的音频去掉,生成一个临时文件tmp.mov

ffmpeg -i D:\Media\IMG_0873.MOV -vcodec copy -an D:\Media\tmp.mov

注:-vcodeccopy的意思是对源视频不解码,直接拷贝到目标文件;-an的意思是将源文件里的音频丢弃。

第二步:把这个无声的视频文件(tmp.mov)与一个音乐文件(music.mp3)合成,最终生成output.avi

ffmpeg -i D:\Media\tmp.mov -ss 30 -t 52 -i D:\Media\music.mp3 -vcodec copy D:\Media\output5.avi

为了保证良好的合成效果,音乐时长必须匹配视频时长。这里我们事先知道视频时长为52秒,于是截取music.mp3文件的第30秒往后的52秒与视频合成。另外,为了保证音频时长截取的准确性,我们这里没有使用-acodec copy,而是让音频重新转码。

还有一种情况:我们希望在一段视频上叠加一张图片。可以简单实现如下:

ffmpeg -i D:\Media\IMG_0873.MOV -i D:\Media\logo.png -filter_complex 'overlay' D:\Media\output6.avi

应用场景3:视频播放

格式转换或合成之后,我们需要试着播放一下。播放器的选择很多。这里顺手用ffplay工具也行:

ffplay -i D:\Media\output6.avi

应用场景4:获取视频信息

有时候,我只是想看看这个视频文件的格式信息。可以用ffprobe工具:

ffprobe -i D:\Media\IMG_0873.MOV

其他应用

FFmpeg的功能非常强大。关键是要理解各种参数的意义,并且巧妙搭配。必要的话,就把在线文档完整读一遍吧:ffmpeg Documentation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

技术宅学会几招FFmpeg 的相关文章

  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • FFMPEG:使用具有复杂滤波器的视频滤波器

    我正在使用fluent ffmpeg用于对视频文件执行批量操作的 Node js 库 视频过滤器裁剪 16 9 输入 添加填充并将字幕刻录到填充中 在下一步中 我想使用复杂的滤镜来覆盖图像作为水印 ff input video mp4 ff
  • Ffmpeg 无法正确转换为 ogg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在使用 ffmpeg 在我的网站上转换音频和视频 Ffmpeg 可以正确转换为其他格式 如 mp3 mp4 等 但无法正确转换为 ogg 虽然 f
  • 使用 FFMPEG 添加覆盖并最少重新编码

    FFMPEG 对于剪切视频的一部分非常有用 而无需重新编码视频 我知道也可以使用 FFMPEG 添加叠加图像到视频的某个部分 例如从 10 秒到 20 秒 我的问题是 如果我对图像进行叠加 整个视频是否会因此而重新编码 或者只对相关的持续时
  • Android 中的 FFMpeg jni?

    我已经构建了 Bambuser http bambuser com opensource 提供的 FFMPEG 可执行文件和库 所以我设法构建了 Android 可执行文件和库 如何在 Eclipse 项目中链接这些库并从 Java 调用
  • 如何在google colab中安装ffmpeg包

    我正在尝试使用 Google Colab 来做一些事情 我特别想用ffmpeg打包到从图像创建视频 https stackoverflow com a 44951066 6890234 但 ffmpeg 似乎工作得不太好 这个 在最后一个块
  • FFmpeg 缩放不是平滑中心(而是锯齿形)

    我尝试执行基本操作zoompan https www ffmpeg org ffmpeg all html zoompan with FFmpeg 我有一个输入图像 png 1280x720 并从中创建一个 8 秒的视频 mp4 320x1
  • 为 Android 编译时显示 FFMPEG 错误

    我正在尝试将 ffmpeg 添加到我的 android 项目中 我使用的是 ubuntu 14 04 操作系统 我正在关注此链接 Link https software intel com en us android blogs 2013
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 使用 ffmpeg 将 mp4 转换为 gif 时帧率较低

    我正在使用 ffmpeg 将高质量视频转换为 gif 大多数视频都是 60fps 及以上720p 但是当我使用下面的代码将视频转换为 gif 时 我得到的 gif 输出的 fps 非常低 usr bin env palette tmp pa
  • 使用 mp4box 直播破折号内容

    我正在尝试直播H 264内容到HTML5使用媒体源扩展 API 下面的方法效果很好 ffmpeg i rtsp 10 50 1 29 media video1 vcodec copy f mp4 reset timestamps 1 mov
  • 如何将H264封装到mp4容器中?

    我有一个程序生成一堆原始 H264 帧 并希望将其放入 mp4 容器中进行流式传输 有人知道该怎么做吗 我想我会使用 ffmpeg 然而 这需要商业使用 而且 ffmpeg 似乎只能通过它的 x264 库来做到这一点 它使用 GPL 许可证
  • ffprobe show_frames 用于多个视频

    有什么方法可以在一个文件中同时查看多个视频的帧吗 我知道如何在一个视频中做到这一点 ffprobe show frameshttp myvirtualdirectory myvideo mp4 http myvirtualdirectory
  • 图像序列到视频质量[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在尝试从一系列图像创建视频 当我使用建议的 ffmpeg 方法时 ffmpeg f image2 i image d jpg video mpg
  • ffmpeg 找不到 vcodec h264

    我是 ffmpeg 的新手 正在 Windows 上使用它 我尝试使用 H 264 vcodec h264 转换 avi 文件 收到此错误 未知编码器 h264 使用 acodec 的 mp3 也会出现 未知编码器 错误 有人可以帮我解决这
  • 如何获取视频时长(以秒为单位)? [复制]

    这个问题在这里已经有答案了 如何获取以秒为单位的视频时长 我尝试过的 ffmpeg i file flv 2 gt 1 grep Duration Duration 00 39 43 08 start 0 040000 bitrate 38
  • 输入文件列表以与 Node.js 模块 Fluent-ffmpeg 连接

    版本信息 流利的 ffmpeg 版本 2 1 2 ffmpeg版本 3 4 2 操作系统 Windows 10 要重现的代码 ffmpeg C path to list txt mergeToFile C path to out mp4 C
  • 使用 ImageMagick 有效地将线扫描图像拼接在一起

    我正在寻找线扫描相机的替代品 用于体育计时 或者更确切地说 用于需要确定位置的部分 我发现普通工业相机可以轻松与商业相机解决方案的速度相匹配 每秒 gt 1000 帧 对于我的需求来说 通常计时的准确性并不重要 重要的是运动员的相对位置 我
  • 导入错误:无法导入名称“FFProbe”

    我无法获取ffprobe包 https github com simonh10 ffprobe在 Python 3 6 中工作 我使用 pip 安装它 但是当我输入import ffprobe it says Traceback most

随机推荐

  • Qi v1.2.4 -- WPC官方文档资源下载

    WPC无线充电联盟QI协议1 2 4 zip qi 嵌入式文档类资源 CSDN下载QI协议part1 part2 part3 part4完整版 没有积分可使用链接 链接 httpqi更多下载资源 学习资料请访问CSDN下载频道 https
  • 剑指offer-42翻转单词顺序-左旋转字符串

    先来一道简单题 将字符串左旋 输入abcdefg 输出cdefgab package Leetcode Author YCKJ3803 Date 2021 3 1 16 41 Description public class Zuoxuan
  • Java概述(了解java开发及背景)

    目录 一 java语言背景介绍 Java 语言的三个版本 JavaSE JavaME JavaEE 二 Java跨平台原理 三 JRE和JDK Java 程序开发的三个步骤 编写代码 编译代码 运行代码 JDK JRE 和 JVM 的关系
  • 初学JAVA的变量作用域

    变量的范围是程序中该变量可以被引用的部分 方法内定义的变量被称为局部变量 局部变量的作用范围从声明开始 直到包含它的块结束 局部变量必须声明才可以使用 方法的参数范围涵盖整个方法 参数实际上是一个局部变量 for循环的初始化部分声明的变量
  • 简单springboot及springboot cloud环境搭建

    springboot使用特定的方式 简化了spring的各种xml配置文件 并通过maven或者gradle 完成所需依赖 使用springboot maven插件 可直接输出可运行的jar包 省去了tomcat等容器的部署 使得基于htt
  • 基于Sqli-Labs靶场的SQL注入-29~31关

    目录 Less 29 基于GET 双服务器 单引号 字符型注入 双服务器解析 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less 30 基于GET 双服务器 双引号 字符型注入 Less 31 基于GET 双服务器 双引号加括号 字符型
  • Java Web: JDBC、数据库连接池、Maven

    1 JDBC JDBC 全称Java DataBase Connection Java 数据库连接 在前面我们已经学习过Java和DataBase 数据库 了 JDBC就是使用Java语言操作关系型数据的一套API 本质上就是一个接口 用于
  • java实现 手写体识别_java手写体英文数字识别系统 识别预处理如何实现 采用什么语言比较好...

    展开全部 转载 1 引言 手写体数字识别是文字识别中的一个研究课题 是多年来的研究热点 也是模62616964757a686964616fe4b893e5b19e31333337373638式识别领域中最成功的应用之一 由于识别类型较少 在
  • 微信小程序:横向滚动卡片列表模板

    文章目录 1 前言 2 代码详解 3 样例展示 4 结语 1 前言 在开发微信小程序时 横向可滚动卡片列表是一个必不可缺的页面组件 其不仅美观还可以节省屏幕空间 具体截图如下 2 代码详解 主要用的是scroll x 具体代码如下 wxml
  • 开启win10下Ubuntu子系统的SSH服务 并设置为开机启动

    Win10中安装Ubuntu子系统后默认是没有开启SSH服务的 需要手动配置开启 1 先通过 bash 进入子系统修改配置 vi etc ssh sshd config 备注 输入i 表示键入 按键 ESC 外加 冒号 WQ 退出保存 如果
  • 笔记,后期整理

    VM 虚拟各种系统的工具 安装目录 不要放在C盘 需要下载的镜像Windows NT win7 xp server08R2 server12类Nnix centos 6 7 8 ubuntu 14 16 18 kali安装 win7 1g
  • Android TabLayout控件

    前言 TabLayout是5 0版本出现的控件 显示水平方向的tab页 需要添加Design依赖库 并且使用Theme AppCompat主题 1 TabLayout类 布局文件
  • 程序语言翻译器的设计与实现----算术表达式转换四元式(编译原理)

    此篇博客是将前面的内容进行整合并进一步提升 真正实现一个简单表达式语法的编译器 如果有不了解的地方请查看下面链接 词法分析 LR 1 分析 一 LR 1 分析 二 这里说的程序语言编译器是指将算术表达式部分进行翻译 暂时不包括优化以及目标语
  • Failed to execute /linuxrc. Attempting defaults... 解决方案

    今天想移植个根文件系统 使用的板子是友善之臂的S3C2440 这个很多书上都有介绍 难度倒也不是很大 按照手册一步步的来 移植完之后 烧写到flash里面 发现不能运行 怎么回事 检查了一遍 发现和教材上一样 难道教材有问题 在网上找了移植
  • MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]

    MarshalAs 指示如何在托管代码和非托管代码之间封送数据 简单点说 托管代码是一Microsoft的中间语言 它主要的作用是在 NET Farmework的CLR执行代码前去编译源代码 也就是说托管代码充当着翻译的作用 源代码在运行时
  • 初识网络原理

    目录 局域网 简称LAN 广域网 IP地址 端口号 协议 协议分层 互联网的分层 网络设备的分层 封装和分用 局域网 简称LAN 简单来说就是把两台或多台机器连接在一起 局部组建的一种私有网络 局域网内的主机之间能方便的进行网络通信 而局域
  • Mysql 数据库创建用户,管理用户权限

    一 创建用户 为什么要创建不同的用户呢 因为root用户权限太大 为了安全起见 创建不同的用户 并赋予不同的权限 可以有效保证数据库的安全 1 使用 root 用户登录 Mysql mysql u root p 注意 若 mysql u r
  • 两波形相位差的计算值_连续模式PFC功率MOSFET电流有效值、平均值计算

    中大功率的ACDC电源都会采用有源功率因数校正PFC电路来提高其功率因数 减少对电网的干扰 在PFC电路中 常用的结构是BOOST电路 功率MOSFET工作在开关状态 将输入的电流斩波为和输入正弦波电压同相位的 具有正弦波包络线的开关电流波
  • linux日志清理脚本

    日常日志清理脚本 1 压缩文件 SUFFIX date d yesterday Y m d CURRENT date s echo CURRENT 压缩 FILES data logs shop nohup for file in FILE
  • 技术宅学会几招FFmpeg

    有些时候 我需要对某个视频文件做一些简单的处理 也或者是受亲戚朋友的委托吧 又不好意思推辞 因为人家觉得你是搞技术的 这点小事应该能轻松搞定 但是 我犯不着为这点事去安装一个笨重的多媒体软件 我也不想去网上随便找个免费的小工具 怕它不干净