ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南

2023-11-17

ffmpeg 合并转换文件

有许多开源工具可用于编辑,调整和将多媒体准确地转换为您所需的内容。 诸如AudacityHandbrake之类的工具非常出色,但有时您只想快速将文件从一种格式更改为另一种格式。 输入FFmpeg。

FFmpeg是处理多媒体文件的不同项目的集合。 在许多其他与媒体相关的项目中,它经常在幕后使用。 尽管它的名字,它与运动图像专家组或它创建的无数种多媒体格式无关。

在本文中,我将通过命令行工具ffmpeg使用FFmpeg,这只是FFmpeg项目的一个很小的部分。 它在许多不同的操作系统上都可用,并且默认情况下包含在某些操作系统中。 可以从FFmpeg网站或大多数软件包管理器中下载。

FFmpeg是一个功能强大的工具,几乎可以完成多媒体文件所能想象的任何事情。 在本文中,我们有兴趣使用它来转换文件,因此我们不会深入研究其整个功能集。 在考虑使用FFmpeg之前,首先需要快速了解媒体文件的确切含义。

媒体文件

在非常高的层次上,媒体文件被分解为一个容器及其流。 这些流包括实际的AV组件,例如电影的音频或视频,并使用特定的媒体编码或编解码器进行编码 。 每个编解码器都有自己的属性,优点和缺点。 例如, FLAC编解码器适用于高质量无损音频,而Vorbis旨在与MP3竞争文件大小,同时提供更好的音频质量。 这意味着FLAC格式的文件将比Vorbis音频流大得多,但听起来会更好。 两者在本质上都不比另一个更好,因为每个人都在尝试做不同的事情。

容器是流的包装。 它提供了媒体播放器和工具可以交互的单个界面。 一些容器非常先进,并允许任何类型的流,包括单个容器内的多个视频和音频流。 容器中的流不必只是音频或视频。 不同的容器将允许不同的流,例如字幕,章节信息或其他元数据。 这完全取决于容器设置为允许的范围。

这是媒体文件的抽象表示,并跳过了容器之间的许多差异。 许多要求某些流和元数据,或者对所允许的编解码器或内容施加限制。 这种解释足以使您理解本文。 要了解更多信息,请单击上面的链接。

请注意,视频和音频编码可能需要很长时间才能运行。 使用FFmpeg时,您应该准备好适应一段时间。

基本转换

在转换音频和视频时,令大多数人震惊的是选择正确的格式和容器。 幸运的是,FFmpeg的默认设置非常聪明。 通常,它会自动选择正确的编解码器和容器,而无需进行任何复杂的配置。

例如,假设您有一个MP3文件,并希望将其转换为OGG文件:


ffmpeg -i input.mp3 output.ogg 

此命令获取一个名为input.mp3的MP3文件,并将其转换为一个名为output.ogg的OGG文件。 从FFmpeg的角度来看,这意味着将MP3音频流转换为Vorbis音频流并将其包装到OGG容器中。 您不必指定流或容器类型,因为FFmpeg会为您解决。

这也适用于视频:


ffmpeg -i input.mp4 output.webm 

由于WebM是定义明确的格式,因此FFmpeg会自动知道它可以支持的视频和音频,并将流转换为有效的WebM文件。

根据您选择的容器,此方法并非总是有效。 例如,诸如Matroska之类的容器旨在处理您希望放入其中的几乎所有流,无论它们是否有效。 这意味着命令:


ffmpeg -i input.mp4 output.mkv 

可能会导致文件具有与input.mp4相同的编解码器,可能不是您想要的文件。

选择编解码器

因此,当您想使用Matroska这样的容器(可以处理几乎所有流)但又影响输出中的编解码器时,该怎么办? FFmpeg进行救援! 您可以使用-c标志来选择所需的编解码器。

此标志使您可以设置要用于每个流的不同编解码器。 例如,要将音频流设置为Vorbis,请使用以下命令:


ffmpeg -i input.mp3 -c:a libvorbis output.ogg 

可以执行相同的操作来更改视频和音频流:


ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv 

这将使Matroska容器具有VP9视频流和Vorbis音频流,与我们之前制作的WebM基本相同。

ffmpeg -codecs命令将打印FFmpeg知道的每个编解码器。 该命令的输出将根据您安装的FFmpeg的版本而变化。

更改单个流

您所拥有的文件经常会以比您所希望的更多的方式正确地保存,而只有一个流格式错误。 重新编码正确的流可能非常耗时。 FFmpeg可以帮助您解决这种情况:


ffmpeg -i input.webm -c:v copy -c:a flac output.mkv 

此命令将视频流从input.webm复制output.mkv ,并将Vorbis音频流编码为FLAC。 -c标志确实非常强大。

更换容器

前面的示例可以应用于音频和视频流,从而使您可以从一种容器格式转换为另一种容器格式,而无需执行任何其他流编码:


ffmpeg -i input.webm -c:av copy output.mkv 

影响质量

现在我们有了编解码器的句柄,下一个问题是:我们如何设置每个流的质量?

最简单的方法是更改​​比特率,这可能会或可能不会导致不同的质量。 人类的视听能力并不像我们想的那么清晰。 有时更改比特率会对主观质量产生巨大影响。 其他时候,它可能什么也没做,只是更改文件大小。 有时,很难尝试一下就很难判断会发生什么。

要设置每个流的比特率,请使用-b标志,该标志的工作方式与-c标志类似,只是您设置了比特率而不是编解码器选项。

例如,要更改视频的比特率,可以这样使用:


ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv 

这将从input.webm复制音频( -c:a copy )并将视频转换为比特率为1M / s( -b:v )的VP9编解码器( -c:v vp9 ),所有捆绑在一起一个Matroska容器( output.mkv )。

影响质量的另一种方法是使用-r选项调整视频的帧频:


ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv 

这将创建一个新的Matroska,并复制音频流,并将视频流的帧速率强制为每秒30帧,而不是使用输入的帧速率( -r 30 )。

您还可以使用FFmpeg调整视频的尺寸。 最简单的方法是使用预定的视频大小:


ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv 

这会将视频在输出中修改为1280x720,但是您可以根据需要手动设置宽度和高度:


ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv 

这将产生与先前命令完全相同的输出。 如果要在FFmpeg中设置自定义尺寸,请记住,width参数( 1280 )位于高度( 720 )之前。

调整帧速率和比特率是影响媒体质量的两种粗糙但有效的技术。 如果这些值非常低,那么将这些值设置得很高将无法提高其质量。

更改这些设置对于快速减少高质量流以减小文件大小最有效。 调整视频的大小并不能提高质量,但是可以使其更适合平板电脑而不是电视。 将640x480视频的大小更改为4K不会改善它。

更改文件的质量是非常主观的事情,这意味着没有一种可以每次使用的方法。 最好的方法是进行一些更改,并测试它对来说看起来还是听起来更好。

修改流

通常,您的文件几乎是完美的,只需要修剪掉几部分即可。 使用显示您正在更改的工具可以更轻松地完成此操作,但是如果您确切知道要修剪的位置,则可以在FFmpeg中轻松进行:


ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv 

这将复制视频和音频流( -c:av copy ),但会修剪视频。 -t选项将剪切时间设置为10秒,而-ss选项将视频的开始点设置为修剪,在这种情况下为一分钟( 00:01:00 )。 您不仅可以精确到几小时,几分钟和几秒钟,还可以精确到毫秒(如果需要)。

提取音频

有时您并不真正在乎视频,而只是想要音频。 幸运的是,这在带有-vn标志的FFmpeg中非常简单:


ffmpeg -i input.mkv -vn audio_only.ogg 

此命令仅从输入中提取音频,将其编码为Vorbis,然后将其保存到audio_only.ogg中 。 现在您有了隔离的音频流。 您也可以以相同方式使用-an-sn标志来去除音频和字幕流。

用它制作GIF

最近,动画GIF(因为我不是怪物所以用硬g表示)卷土重来。 我个人认为GIF是您可以选择的最差的视频格式。 它的压缩质量和大小都很糟糕; 在颜色,帧速率和容器元数据方面有非常严格的限制; 并且不支持音频。 尽管如此,它还是很受欢迎。 那么,如何将视频剪辑制作成动画GIF?

如果您想制作不含音频的视频,则使用-an标志(类似于我们上面的操作)比创建动画GIF更好,但是有很多地方支持不支持其他视频格式的GIF 。 对于所有这些:


ffmpeg -i input.mkv output.gif 

此命令创建与输入文件相同尺寸的GIF。 这通常是个坏主意,因为GIF相对于其他视频格式的压缩效果不佳(以我的经验,GIF的大小约为源视频的八倍)。 使用-s选项将GIF调整为较小的尺寸可能会有所帮助,尤其是在输入源非常大的情况下,例如高清视频。

其他工具

尽管FFmpeg是大多数AV任务的必备工具,但它并非对所有功能而言都是完美的。 与FFmpeg结合使用的一些工具可以使一切变得简单。

从YouTube抓取视频

将内容上传到YouTube ,丢失原始源视频并仅保留YouTube版本非常容易。 检索YouTube视频副本的最简单方法是什么?

Youtube-dl是一个漂亮的小工具,可用于从YouTube和其他一些视频流服务中获取视频。 使用起来超级简单:


youtube-dl https: // www.youtube.com / watch ? v =2m5nW9CQLJ0 

此命令通过指定的URL下载视频并将其保存在本地。

Youtube-dl有几个选项可以控制下载视频的质量和格式,但是我发现使用上面的命令更容易。 它将最高质量的音频和视频下载到单个文件中,然后使用FFmpeg将它们转换为所需的格式。

获取有关媒体的信息

有时,您需要知道的只是媒体容器中的内容。 尽管有几种工具可以做到这一点,但我首选的是MediaInfo 。 MediaInfo显示媒体容器内每个不同流的所有信息,以及输入文件的元数据。 这为您提供了您可能想知道的所有信息,并且可能提供了许多您不想要的东西。

运行命令mediainfo inputFile.mkv以人类可读的形式显示有关输入文件的信息列表。

和更多...

这仅仅是FFmpeg可以做的事情的表面。 幸运的是,FFmpeg的文档和该项目的其他工具非常好,值得一看。 它会教您有关这只狗可以做的许多不同技巧的一切。

如果您想使用带有图形界面的多媒体转换工具,那么Handbrake是一款非常出色的工具,可在Linux,Mac OS X和Windows上使用。 手制动在引擎盖下使用FFmpeg(以及其他工具)。

翻译自: https://opensource.com/article/17/6/ffmpeg-convert-media-file-formats

ffmpeg 合并转换文件

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

ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南 的相关文章

随机推荐

  • 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷 YouTube Twitter及JustinTV几个视频网站的架构或笔记 对于不管是视频网站 门户网站或者其它的网站 在架构上都有一定的参考意义 毕竟成功者的背后总有值得学习的地方 虽然有些文章的发表时间有点久了 但是
  • 将第三方库改为我自己想要的

    将第三方库改为我自己想要的 方法 比较常用的 给出一些例子 React组合方法 高阶组件方法 方法 修改第三方库以适应自己的需求可以通过多种方法实现 下面是一些常见的策略 继承 通过创建继承自第三方库组件或类的子类 你可以重写或扩展其方法
  • Keil警告和错误语句与消除方法笔记

    遇到的keil相关错误 警告内容在这里进行更新 Warning 1 D last line of file ends without a newline 文件最后一行不是新行 解决 保证文件最后一行什么符号也没有 167 D argumen
  • MySQL索引原理B+树

    B 树索引是B 树在数据库中的一种实现 是最常见也是数据库中使用最为频繁的一种索引 B 树中的B代表平衡 balance 而不是二叉 binary 因为B 树是从最早的平衡二叉树演化而来的 在讲B 树之前必须先了解二叉查找树 平衡二叉树 A
  • shader学习笔记(二)纹理采样

    资料参照 Unity Shader入门精要 冯乐乐 第7章 基础纹理 技术美术百人计划 图形 1 3 纹理的秘密 庄懂的技术美术入门课 美术向 直播录屏 第9课 Unity Shader 入门到改行4 最简纹理采样 1 纹理是什么 1 宏观
  • 程序员面试智力题集锦

    1 你让工人为你工作7天 给工人的回报是一根金条 金条平分成相连的7段 你必须在每天结束时给他们一段金条 如果只许你两次把金条弄断 你如何给你 的工人付费 参考答案 day1 给1 段 day2 让工人把1 段归还给2 段 day3 给1
  • 数据挖掘基础一

    一 数据挖掘 又称为数据库中知识发现 Knowledge Discovery from Database 简称KDD 它是一个从大量数据中抽取挖掘出未知的 有价值的模式或规律等知识的复杂过程 数据挖掘的定义过程描述如下图所示 从图中可以看出
  • Hessian4.0.7反序列化BigDecimal类型Bug

    Hessian虽好 bug也不少 今天遇到hessian反序列化bigdecimal类型 传入参数为121 但经序列化后却为0 问题在BigDecimal类型的应该使用BigDecimalDeserializer 在basic没有BigDe
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • X509证书结构解析

    X509证书是采用DER编码的ASN1结构数据 Certificate SEQUENCE tbsCertificate TBSCertificate signatureAlgorithm AlgorithmIdentifier signat
  • 【技术干货】数字电路电平标准

    信号的逻辑电平经历了从单端信号到差分信号 从低速信号到高速信号的发展过程 最基本的单端信号逻辑电平为CMOS TTL 在此基础上随着电压摆幅的降低 出现LVCMOS LVTTL等逻辑电平 随着信号速率的提升又出现ECL PECL LVPEC
  • Qt 实现 360 安全卫士

    作者 一去 二三里 QQ 技术交流群 242790253 个人微信 iwaleon 加我微信 邀请入 500 人微信群 微信公众号 高效程序员 回想起来 这也算是一个有故事的代码 虽然时间比较久远 但还是记忆犹新 那就简单说说吧 也不枉费当
  • codevs代码分类总结

    由于要参加华为软件精英挑战赛 所以需要把以前做过的有关图论的问题翻出来复习一遍 但是关于图论也有很多分类 所以干脆就做一个总结 先对图论的相关题目过一遍 以后如果有时间 把其他分类的题目也过一遍 图论 也不是每个章节都做了题目 Floyd
  • Elasticsearch全文搜索与TF/IDF

    转载 https my oschina net stanleysun blog 1594220 一 TF IDF 1 TF TF Term Frequency 即词频 它表示一个词在内容 如某文章 中出现的次数 为了消除文档本身大小的影响
  • vue如何使用ueditor富文本插件

    UEditor 是由百度 FEX前端研发团队 开发的所见即所得富文本web编辑器 具有轻量 可定制 注重用户体验等特点 开源基于MIT协议 允许自由使用和修改代码 话不多说看流程 一 显示效果如下 二 首先 下载 ueditor npm i
  • Mastercam软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 Mastercam是一款广泛应用于机械加工领域的计算机辅助设计与计算机辅助制造 CAD CAM 软件 它由美国CNC软件公司开发 旨在帮助制造商设计和制造高精度的零部件 以下是Masterca
  • java Fileread用法及注意事项

    关于其创建 还有注意事项 package IOtest test1 import org junit Test import java io File import java io FileReader import java io IOE
  • 对线性代数库Eigen3中eulerAngles函数的理解

    编写程序时有时会遇到在四元数 旋转矩阵 欧拉角之间进行转换的操作 使用eulerAngles函数从旋转矩阵中获得欧拉角 了解其使用方法才能保证转换时不出错 头文件
  • 基于双参数蜜蜂算法解决车辆路径问题(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 群智能起源于自然环境中生物群体经过长期自然
  • ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南

    ffmpeg 合并转换文件 有许多开源工具可用于编辑 调整和将多媒体准确地转换为您所需的内容 诸如Audacity或Handbrake之类的工具非常出色 但有时您只想快速将文件从一种格式更改为另一种格式 输入FFmpeg FFmpeg是处理