首页 > FFMPEG转码常用命令研究

FFMPEG转码常用命令研究

ffmpeg简介

官网链接是http://www.ffmpeg.org/上有说明,它是音视频的分离,转换,解码的完全解决方案。 

其中最重要的就是libavcodec库。它被mplayer或者xine使用作为解码器。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。

ffmpeg包括一组软件,ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。两个库文件libavcodec和libavformat。



ffmpeg作为媒体文件处理软件,基本用法如下: 

ffmpeg [global_options] {[input_file_options] -i ‘input_file’} ... {[output_file_options] ‘output_file’} ...

输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。 

大部分常见的格式都能够“通杀”。象常见的各种mpeg,AVI封装的DIVX和Xvid等等

对ffmpeg命令选项的了解,先从下面的命令开始

ffmpeg -h

ffmpeg -h long

ffmpeg -h full

man ffmpeg需要安装ffmpeg的手册页条目

各选项参数的解释,详情参见

http://www.ffmpeg.org/ffmpeg.html



列出几个主要的选项 

-vcodec 视频流编码方式 

-b 视频流码率(默认只有200k,一般都需要手动设置,具体的数值视codec选择而定) 

-r 视频流帧数(一般说来PAL制式通常用25,NTSC制式通常用29) 

-s 视频解析度(分辨率,也要视codec和你的需要而定。通常改变某个视频流的解析度是很耗费CPU的事情。另:具体写法使用“数字x数字”的形式。中间是小写字母“x”,这个用过mplayer的应该都知道) 

-t 处理持续时间。 

-acodec 音频流编码方式 

-ab 音频流码率(默认是同源文件码率,也需要视codec而定) 

-ar 音频流采样率(大多数情况下使用44100和48000,分别对应PAL制式和NTSC制式,根据需要选择)



还有些可能需要用到的选项如 

-vn和-an分别是屏蔽视频流和屏蔽音频流,分别对源文件处理一次即可得到分离的音频和视频 

-author -title分别是设置媒体文件的作者和title 

-f选项是强制使用某种格式 

-target type是使用预置的格式转换(可以转成dvd,vcd或svcd)



除此之外还有些更高级的选项,如设定vbr,或设定high quality,或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦,DV转vcd或dvd啦,网上下载的电影转成vcd或dvd都不一定需要用到它们。 

具体的使用方法在man里面有介绍。简单明了。

-bsf比特流过滤器设置

首先使用ffmpeg -bsfs来查看所有的比特流过滤器,使用下面的命令

ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264

来匹配要复制的视频流,也是就是说,是有条件复制视频流,必须匹配上才复制



-c选项是-codec的缩写

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

意思是encodes all video streams with libx264 and copies all audio streams.



-map选项解读

指定一个或多个输入流作为输出文件的源。每个输入流由input_file_id[:stream_specifier]表示,这两个索引都从0开始计数,-stream_specifier

表示一个负map,参见下面的例子

ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov

选择a.mov中的第三个流,和b.mov中的第7个流,把它们复制到输出文件中

ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT

选择所有的视频流和第3个音频流,把它们复制到输出文件中

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

除了第2个音频流以外,复制其他的流到输出文件中

ffmpeg -i INPUT -map 0 output

复制第一个文件中的所有流到输出文件中

关于ffmpeg hls更详细的官方文档,参见

http://www.ffmpeg.org/ffmpeg-all.html

在页面中搜索“hls”即可

下面是该官方网页给出的一个例子

Segment the input file, and create an M3U8 live playlist (can be used as live HLS source):

 

ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8

-segment_list_flags +live -segment_time 10 out%03d.mkv

下面是我收集的hls版本,并不好用。

ffmpeg -i inputfile.avi -c:v libx264 -c:a libvo_aacenc -hls_time 10 -hls_list_size 0 outputfile.m3u8

ffmpeg -i inputfile.avi -c copy -bsf:v h264_mp4toannexb -map 0 -hls_time 10 -hls_list_size 0 outputfile.m3u8

注意:我测试后,发现hls版本的命令生成的ts片段非常差,几乎不能观看。

目前的ffmpeg版本是支持hls的,直接使用下面的命令也会同时生成ts片段和m3u8文件,每个ts片段是默认2s,这反过来也说明ffmpeg是支持hls的

ffmpeg -i in.nut out.m3u8

对于hls切片来说,下面的命令使我测试过很好用的,特收藏如下

ffmpeg -i 1.mp4 -f segment -segment_time 10 -segment_format mpegts -segment_list list_file.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 output_file-%d.ts

这条命令的限制是:要求生成ts分片的输入视频是视频是h.264编码,音频是aac编码的视频文件,从优酷网上下载的视频片段都是符合这个条件的。

获取ffmpeg最新源码方法

git clone git://source.ffmpeg.org/ffmpeg  ffmpeg

更新本地源码

git pull (--rebase)

git的使用方法详见

http://www.ffmpeg.org/git-howto.html

更多相关:

  • 本篇博客继续在上篇《在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务》 http://blog.csdn.net/tao_627/article/details/18909075 的基础上,搭建基于开源框架的视频直播服务,仍然使用root用户操作。基本框架图示如下: 下面分为几个步骤说明如下...

  • 最近一段时间,一直在学习刘鹏老师的《计算广告学》讲义和网易公开课的视频,下面特此记录如下架构图...

  • CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset 时长:9h 30m 含项目文件 1920X1080 MP4 语言:英语+机译中文字幕 教程大小:4G 标题:Artstation–风格化游戏资产 云桥网络 获qu 教程 信息: 内容: 21个视频=~9.5小时的英语叙述循序...

  • 视频分辨率无损放大软件 Topaz Video Enhance AI 2.3.0 Topaz Video Enhance AI是一款非常好用的视频分辨率放大软件,用户可以通过这款软件将视频的分辨率进行自定义调节,最高能够将其放大至8K分辨率,并提供真实的细节和动作一致性,放大后的视频不会出现模糊的情况。 Windows x64...

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...