前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
33. 多媒体资源
以下是当前可用多媒体源的说明。
33.1 amovie
这与电影源相同,但默认情况下会选择音频流。
33.2 movie
从电影容器中读取音频和/或视频流。
它接受以下参数:
filename
要读取的资源的名称(不一定是文件;它也可以是通过某种协议访问的设备或流)。
format_name,f
指定要读取的影片的格式,可以是容器的名称或输入设备。如果未指定,则从movie_name
或通过探测猜测格式。
seek_point,sp
以秒为单位指定搜索点。帧将从该搜索点开始输出。使用av_strtod
计算参数,因此数值可以以IS
后缀为后缀。默认值为0
。
streams, s
指定要读取的流。可以指定多个流,用+
分隔。然后,源将以相同的顺序具有尽可能多的输出。具体的语法在(ffmpeg)流说明符
中进行了解释。两个特殊名称dv
和da
分别指定默认(最适合)的视频和音频流。如果过滤器被称为amovie
,则默认为dv
或da
。
stream_index,si
指定要读取的视频流的索引。如果值为-1
,将自动选择最合适的视频流。默认值为-1
。已过时。如果过滤器被称为amovie
,它将选择音频而不是视频。
loop
指定按顺序读取流的次数。如果值为0
,则流将无限循环。默认值为1
。
请注意,当影片循环播放时,源时间戳不会更改,因此它将生成非单调增加的时间戳。
discontinuity
指定帧之间的时间差,超过该时间点,该点被视为时间戳不连续性,通过调整后面的时间戳来删除该时间戳。
它允许在滤镜图的主输入上叠加第二个视频,如下图所示:
input -----------> deltapts0 --> overlay --> output
^
|
movie --> scale--> deltapts1 -------+
33.2.1 示例
-
从
AVI
文件in.avi
开始跳过3.2
秒,并将其覆盖在标有in
的输入顶部:movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
-
从
video4linux2
设备读取,并将其覆盖在标记为in
的输入之上:movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
-
从
dvd.vob
读取第一个视频流和ID
为0x81
的音频流; 视频连接到名为video
的pad
,音频连接到名为audio
的pad
:movie=dvd.vob:s=v:0+#0x81 [video] [audio]
33.2.2 命令行
movie
和amovie
都支持以下命令:
seek
使用av_seek_frame
执行搜索。 语法是:seek stream_index|timestamp|flags
1: stream_index
:如果stream_index
为-1
,则选择默认流,并且时间戳自动从AV_TIME_BASE
单位转换为特定于流的time_base
。
2: timestamp
:AVStream.time_base
单位中的时间戳,如果没有指定流,则为AV_TIME_BASE
单位中的时间戳。
3: flags
:选择方向和搜索模式的标志。
get_duration
以AV_TIME_BASE
为单位获取电影持续时间。
网友评论