转码

现今常用的一些编码格式以及它们所支持的容器格式如下:

特别提一点,mkv是个万能的容器格式,下面说的所有编码格式,mkv几乎都能“装”,就不再列出了。

视频编码格式:

h264(又称mpeg-4 avc、mpeg-4 part 10):mp4、flv、avi、mov、wmv、m4v、f4v、3gp、ts

mpeg4(不只一种,这里指mpeg-4 part 2、divx、xvid):mp4、avi、mov、wmv、m4v、3gp、ts

h265(又称hevc、mpeg-h part 2):mp4、avi、mov、ts

vp8:avi、wmv、ts、webm

vp9:mp4、avi、wmv、ts、webm

音频编码格式:(【】左边是视频容器格式,【】右边是音频容器格式,*和^后面再说明)

aac:mp4、flv、avi、mov、wmv、3gp、m4v、f4v、ts【】aac、m4a、wma、ac3

mp3:mp4、avi、mov、wmv、f4v、ts【】mp3、wma、ac3

ac-3:mp4、avi*、mov、wmv、m4v、ts【】ac3、m4a、wma

flac:mp4*、avi*、wmv、ts【】flac、m4a、wma、ac3^

vorbis:mp4、avi*、mov、wmv、ts、webm【】ogg、wma、ac3^

opus:mp4*、ts、webm【】ogg、ac3^

(*的意思是需要进一步使用相应参数,小白不建议)

(^的意思是能转码成功,但很可能播放器不能播放)

(一般听感来说,上述中opus编码格式是有损编码里最好的,其次是vorbis,之后是aac、mp3之类)

(ffmpeg似乎不支持ape容器格式)

对新人来说看到这些庞杂的格式可能很懵,通俗说明一下:“一样容器能装不同菜,一样菜能盛在不同容器”的道理,我们只要找到菜和容器都互相能“接受”的组合就行了。只是视频是一个容器两道菜(画面和声音),音频就一个容器一道菜

反之,上面列的这些,也可以理解为视音频容器格式所支持的编码格式。上期说一个视频有画面和声音,那么画和声就有它俩各自的编码格式,所以对一个现存的视频来说,它的容器格式要同时支持画和声的编码格式;音频就只有声音的编码格式,和它的容器格式互相支持就可以

这里指出两点前提:以原文件的编码为参考,ffmpeg的支持。

虽然有着许多的格式,但目前大多数视频的编码格式是h264和aac,音频的编码格式是mp3或aac。因此,只要不同的容器格式之间能同时支持一样的编码格式,就能够进行“高效转码”。

例如同时支持h264和aac的有mp4、flv、avi、mov、wmv……满足这个前提后,这些容器两两之间都可以任意“高效转码”。可如果像上期说的,只知道容器格式mp4和flv,并不能直接认为它俩可以用“-c copy”“高效转码”。

对于需要转换编码格式的音视频,用ffmpeg的前提是ffmpeg要能支持我们想转的编码格式。ffmpeg就像一个批发中心,但它的货总归还是有限的。

不过对于无需转换编码格式的情况,即便是ffmpeg不支持的编码格式,也能用“-c copy”复制照抄(例如将原视频转码成mkv,可理解为原视频中的编码格式给ffmpeg提供了个“模板”),但是如果ffmpeg不支持最后输出文件的容器格式的话,就不能这样转码。

除了音视频,ffmpeg还可以转码字幕和图像文件:

(直接按“输入→输出”流程即可,例如ffmpeg -i .\input.png output.jpg)

(srt转码ass要注意srt先以记事本打开,另存为将编码改成UTF-8或unicode)

字幕容器格式:srt、ass、ssa之间两两任意互转

图像容器格式:jpg、jpeg、png、bmp、gif、webp之间两两任意互转

-c与-f参数的运用

若要转换编码格式,我们将运用“-c”来使用ffmpeg支持的编解码器。

“-c”参数包括了音视频的全部编解码器,所以以前的“-c copy”是复制音视频编码的意思。当然我们也可以直接用“-c copy”转码音频,没有视频也没关系。

要只对视频里的画面或者声音进行操作的话,我们可以用“-c:v”来限定只处理视频画面,“-c:a”来限定只处理视频里的音频声音,“-c:s”来限定只处理字幕。

经常用的比如“-c:v libx264”,表示将编码格式转换成h264;“-c:a libmp3lame”,表示将编码格式转换成mp3。

这里的“libx264”、“libmp3lame”是编码器的名字(文末再说编码器名怎么得知)。简单形象地说,“容器格式、编码格式、编码器”的一个可行搭配是“avi、(h264、mp3)、(libx264、libmp3lame)”。

我们也可以用“-c:v h264”、“-c:a mp3”来进行上述操作,这样的话不用知道编码器名也可以。如下图:

ffmpeg里的“stream”可以理解为“流”、“轨道”、“通道”。红圈里的是编码格式转换的指示说明,从原来的什么转换成什么。例如上图是,视频编码格式从mpeg4转换成h264,视频里的音频编码格式从aac转换成mp3。

我们还可以通过“-f”参数来进行转码。“-f”,“format,格式”的意思,强制输出什么格式的文件,让ffmpeg自行挑选编解码器进行转码输出。但只是一般情况来说,就像前面说过ffmpeg的支持也是有限的,不支持的话当然也转码输出不了。

这个“-f”可以用来“查询”自己想转的容器格式是有什么编码格式或编码器可以支持。它的用法例如“-f webm”。如下图:

这说明vp9和opus是webm容器格式支持的编码格式。

(在一些时候,用“-f”参数转码完的视频质量会不好,这个以后再说)

转码思路流程

①先用命令行ffprobe .\input.mp4

查看文件的编码格式,如下图:

红圈表示该视频的画面(video)编码格式是h264,声音(audio)编码格式是aac

另外,一般查看文件属性也可以知道其编码格式

②确定自己想转的容器或编码格式

③用“ffmpeg -formats”命令行

查询ffmpeg支持哪些容器格式。如下图

demuxing是“解封装”的意思,muxing是“封装”的意思,

就像容器格式又称封装格式

转码也可以看作是封装

解封装就可以看作是转码的相反操作

还有,用“ffmpeg -codecs”命令行

查询ffmpeg支持哪些编码格式及编解码器名。如下图

decoder指解码器名,encoder指编码器名,以此类推

④输入相应命令行进行转码

ffmpeg转码常用容器、编码格式与解编码器的搭配总结,-c与-f参数的运用相关推荐

  1. FFMPEG转码常用命令研究

    ffmpeg简介 官网链接是http://www.ffmpeg.org/上有说明,它是音视频的分离,转换,解码的完全解决方案.  其中最重要的就是libavcodec库.它被mplayer或者xine ...

  2. FFmpeg学习之八(FFmpeg源码编译)

    FFmpeg学习之八(FFmpeg源码编译) Mac下 FFmpeg源码编译 安装 1. 使用终端安装FFmpeg 2. 手动编译 2.1 编译环境 - Xcode 2.2 安装依赖库 2.3 安装F ...

  3. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )

    文章目录 一.FFmpeg 简介 二.FFmpeg 相关术语 1.容器 2.媒体流 3.数据帧 4.数据包 5.编解码器 6.复用 7.解复用 博客资源 一.FFmpeg 简介 FFmpeg 是 &q ...

  4. 【华为云技术分享】Docker容器+Phoronix-Test-Suite测试X86和ARM的ffmpeg转码性能

    [摘要] 如何使用phoronix-test-suite跑ffmpeg转码性能测试,主要测试X86和ARM的.中间使用Docker容器方便操作过程. Phoronix Test Suite是一款性能测 ...

  5. FFmpeg入门详解之82:FFmpeg转码器Java版之ava编码

    创建数据库:db_webavtc 创建数据表:avcategory(素材类别) id int primary key, pid int , cname varchar(255), cmemo varc ...

  6. ffmpeg转码生成的m3u8格式详解

    目录 一.ffmpeg转码生成的单码率和多码率的文件列表 二.Master Playlist主列表(name.m3u8) 1. 单码率(video_single_bitrate.m3u8 ) 2. 多 ...

  7. 【网络通信 -- 直播】FFMPEG 简介与常用命令总结

    [网络通信 -- 直播]FFMPEG 简介与常用命令总结 [1]FFMPEG 简介 FFmpeg,项目的名称来自 MPEG 视频编码标准,"FF"代表"Fast Forw ...

  8. [总结]FFMPEG命令行工具之ffprobe详解

    目录 0 前言 1 语法 Synopsis 2  描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opt ...

  9. FFmpeg编解码常用API和数据结构

    一.简述 本文主要介绍FFmpeg 编程中用到的基础知识,包含常见音视频概念,常用API函数,常用结构体,解封装流程,解复用器流程以及注册等. 二.常见音视频概念 容器/文件( Conainer/Fi ...

最新文章

  1. 关于maya与max互导FBX出现错误的解决方案。
  2. 数据库基准测试:database bencnmark --生成大量随机测试数据
  3. web漏洞扫描器原理_web应用防火墙对于网站防护有多重要!
  4. 暑假周报告(第三周)
  5. win8--PPTP教程
  6. 如何给腾讯云域名申请免费的SSL证书
  7. Fiori Elements value help的工作原理
  8. 【深度学习】empty() received an invalid combination of arguments - got (tuple, dtype=NoneType, device=None
  9. 《成语玩命猜》两个弓
  10. L4Linux的版本比较
  11. matlab实现卷积编码与viterbi译码
  12. python如何写日志_python写日志
  13. 30 分钟快速入门 Docker 教程
  14. 该怎么选择便宜和贵的SSL证书
  15. SQL,从熟练到掌握
  16. Nvme驱动补丁 解决Usb3.0/3.1驱动和磁盘控制器WIN7蓝屏方案
  17. 全网最全精析破解 Springboot+Jpa 对数据库增删改查
  18. 怎么给电脑安装window7系统呢
  19. html2canvas导出照片样式乱,html2canvas生成图片(图片样式和显示样式不一致)
  20. 运用计算机考试ppt,计算机一级考试的ppt word excel分别用的是哪个版本的??

热门文章

  1. 挖矿是不是DeFi发展的一段弯路?
  2. python 安装包 tar.gz 转 whl
  3. 基于最小二乘法和SVM从天气预报中预测太阳能发电量(Matlab代码实现)
  4. JAVA知识点:跳转语句
  5. python函数var是求什么_copula函数及其Var计算的Python实现
  6. 【数据挖掘】-KNN算法+sklearn代码实现(六)
  7. 吉客云与金蝶云星空对接集成分页查询出库单连通采购退货新增(JackYun-采购退料OK)
  8. 操作系统安全---实验三:Windows7操作系统安全
  9. Android基础(二) 文件的读写及数据存储
  10. FFA-Net:文章理解与代码注释