ffmpeg学习三:《FFmpeg Basics》读书笔记(下)

一.格式转换

格式转换是ffmpeg工具用的最多的地方了。我们可以使用-f选项,在输出文件之前指定输出文件的格式。

1-1媒体格式

1-1-1文件格式
媒体格式是能够存储音视频数据的特殊的文件类型。如果一个文件中存储了多个流,那么它就称之为容器。我们可以使用ffmpeg -formats命令来查看ffpmeg支持的媒体格式。
1-1-2媒体容器
媒体容器是一个特别封装过的文件,其特殊的格式用来存放多个流以及他们的元数据(metadata)。因为音视频可以被很多的算法进行编解码,那么,媒体容器则提供了简单的方法来将多个流存储在一个文件中。有些容器只能存储音频流,有些容器只能存储图像,但是大多数容器可以存储音频,视频,元数据,字幕等多个流。
如果容器发生了改变,但是编解码器保持不变,这种情况下我们可以使用-c copy或者-c:a copy 或者-c:v copy选项来标示:

ffmpeg -i input.avi -q 1 -c copy output.mov

1-2转码(Transcoding)和格式转换(conversion)

我不确定这个翻译恰不恰当…
Transcoding是使用mmpeg工具,利用输入文件到生成输出文件的过程,这个过程可能包含了格式的转换,也可能没有包含格式转换,知识同一种格式的视频中的一些数据发生了改变。
关于转码,还是看图吧:
这里写图片描述

1-3编解码器(codec)

codec这个名字来源于**co**der-**dec**oder,编解码器表示一个设备或者软件工具,使用特定的算法,对音频或者视频文件进行压缩或者解压缩的过程。ffmpeg已经定义了很多的编解码器,我们可以使用一下命令查看:

  • ffmpeg -codecs …显示所有的编解码器
  • ffmpeg -decoders …仅显示解码器
  • ffmpeg -encoders …仅显示编码器
    在命令行中,我们可以使用-c or -codec选项来指定使用的编解码器,语法格式如下:
-codec[:stream_specifier] codec_name

输入文件和输出文件都可以指定编解码器。如果输出文件包含了多个流,那么每个流都可以指定编解码器,如果我们指定了输出文件的格式,但是没有指定编解码器,那么,ffmpeg就会使用默认的编解码器。

1-4覆盖同名输出文件

如果指定名字的输出文件已经存在,那么ffmpeg就会询问你的意见,你看一选择yes或者no来决定要不要覆盖同名文件。如果想避免这个过程,我们可以直接使用-y或者-n选项来指定要不要覆盖同名文件,比如:

ffmpeg -y -i input.avi output.mp4

这样,如果存在output.mp4文件,就会直接覆盖它。

1-5格式转换中使用的通用的选项

通用选项可以用于设备,容器,以及编解码器。

二.时间的操作

多媒体处理包括了改变输入文件的时长,设置一个延时,选择输入文件的一部分等。这些操作都可以介绍一个指定的时间,时间格式如下:
这里写图片描述
HH指小时,MM指分钟,SS或者S指的是秒,m指的是毫秒

2-1音视频文件的时长

使用-t选项可以指定音视频文件的时长。比如:

ffmpeg -i music.mp3 -t 180 music_3_minutes.mp3

这样就把music_3_minutes.mp3的时长改为了3分钟。

2-2设置帧数

通过设置帧数,自然而然的就设置了时长,可用的选项如下:
audio: -aframes number or -frames:a number
data: -dframes number or -frames:d number
video: -vframes number or -frames:v number
举例:

ffmpeg -i video.avi -vframes 15000 video_10_minutes.avi

2-3设置从起始位置开始的延迟

使用-ss选项,指定延迟的秒数即可,举例:

ffmpeg -i input.avi -ss 10 output.mp4

2-4提取指定文件的特定部份

通过组合使用-ss和-t,即可提取媒体文件的特定部分。-ss限定延时,-t限定时长,这样不就提取出从ss开始的时长为t的部分媒体数据了吗?
举例:

ffmpeg -i video.mpg -ss 240 -t 60 clip_5th_minute.mpg

2-5输入流之间的延迟

通常有两种情况,一种是一个流需要延迟输出,另一种是两个流都需要延迟输出。我们可以使用-itsoffset (input timestamp offset)来创建一个延迟,同时使用-map来选择指定的流。需要注意的是,AVI, FLV, MOV, MP4有着不同的数据头,-itsoffset选项对这几种格式不起作用。我们可以创建一个延迟的流,并把这个流保存到文件中,然后合并两个文件:

ffmpeg -i input.avi -ss 1 audio.mp3
ffmpeg -i input.avi -i audio.mp3 -map 0:v -map 1:a video.mp4</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值