- abitscope
- adrawgraph
- agraphmonitor
- ahistogram
- aphasemeter
- avectorscope
- bench
- abench
- concat
- ebur128
- interleave
- ainterleave
- metadata
- ametadata
- perms
- aperms
- realtime
- arealtime
- select
- aselect
- sendcmd
- asendcmd
- setpts, asetpts
- setrange
- settb
- asettb
- showcqt
- showfreqs
- showspatial
- showspectrum
- showspectrumpic
- showvolume
- showwaves
- showwavespic
- sidedata
- asidedata
- spectrumsynth
- split
- asplit
- zmq
- azmq
- amovie
- movie
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
连接音频和视频流,把加入的媒体一个接一个的在一起。这个滤镜用于按段同步视频和音频流。所有的段都必须有相同的流(类型和个数),输出也是相同流(类型和个数)。
- n 设置段的数量,默认为 2
- v 设置输出中视频流数量,则每个段中必须有输入视频流的数量。默认为 1
- a 设置输出中音频流数量,则每个段中必须有输入音频流的数量,默认为 0
- unsafe 激活不安全模式,这时如果段中有不同格式不会失败
滤镜有 v+a
个输出:先是一个视频输出,然后是音频输出。
有 n x (v+a)
:有n段输出,每段都是 v+a
。
相关的流并不总是有相同的时间,由于各种原因还包括不同的编解码帧大小或创作草稿。因此相关同步流(视频和对应音频)要连接,concat
滤镜将选择持续最长的流(视频的)为基准(除最后段的流),在每个流播放时通过让音频流垫长(重复部分)或者静默(截断)来实现视频流连续。
为了让滤镜工作正常,所有段都必须以 0 为时间戳开始。
所有应用的流在所有共同的领域必须有相同的参数,滤镜会自动选择一个通用的像素格式(色彩标注、编码颜色的标准和位深等),以及音频采样率和通道布局。但其他设置如视频分辨率必须由用户显式转换。
不同的帧率是可以接受的,但会导致输出帧率的变化,一定要配置输出文件来处理。
from ffmpeg import input
from tests import data
input_v1 = input(data.V1)
_ = input_v1.concat(input_v1).output(data.TEST_OUTPUTS_DIR / 'concat.mp4').run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i C:\Users\Admin\Videos\FFmpeg\InputsData\v1.mp4 -filter_complex "[0][0]concat=n=2[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\FFmpeg\OutputsData\concat.mp4 -y -hide_banner
[11.9433s]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
修改输入帧显示时间戳(PTS-presentation timestamp)。其中 setpts
对于视频帧,asetpts
对于音频帧。
- expr 指定用于计算时间戳的表达式
表达式常量:
- FRAME_RATE 帧率,仅对于指定了帧率的视频
- PTS 输入的 PTS
- N 对输入视频帧计数或已经消耗的样本计数,不包括音频的当前帧,从 0 开始
- NB_CONSUMED_SAMPLES 采样数(因为音频是按固定频率采样,则一个采样其实就是自然的计时单位——类似帧率),不包括当前帧(仅对音频)
- NB_SAMPLES, S 当前帧中的采样数 ( 仅音频 )
- SAMPLE_RATE, SR 音频采样率
- STARTPTS 第一帧的 PTS
- STARTT 第一帧的按秒时间
- INTERLACED 指示当前帧是否交错
- T 当前帧的按秒时间
- POS 初始位置在文件中的偏移,为当前帧,如果为定义则本值也为定义
- PREV_INPTS 前一个帧的 PTS
- PREV_INT 前一帧按秒时间
- PREV_OUTPTS 前一帧的输出 PTS
- PREV_OUTT 前一帧按秒输出时间
- RTCTIME 时间单位为微秒 -microseconds. 现在被弃用,使用 time(0) 时
- RTCSTART 影片开始时间以微秒为单位
- TB 输入时间戳时基
# Start counting PTS from zero
_ = input(v1).setpts("PTS-STARTPTS").output(testdata_transform / "setpts1.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=PTS-STARTPTS[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts1.mp4 -y -hide_banner
[4.1000s]
[视频对比链接]
# Apply fast motion effect
_ = input(v1).setpts("0.5*PTS").output(testdata_transform / "setpts2.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=0.5*PTS[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts2.mp4 -y -hide_banner
[3.8456s]
[视频对比链接]
# Apply slow motion effect
_ = input(v1).setpts("2.0*PTS").output(testdata_transform / "setpts3.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=2.0*PTS[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts3.mp4 -y -hide_banner
[7.6312s]
[视频对比链接]
# Set fixed rate of 25 frames per second
_ = input(v1).setpts("N/(25*TB)").output(testdata_transform / "setpts4.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=N/(25*TB)[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts4.mp4 -y -hide_banner
[4.6901s]
[视频对比链接]
# Set fixed rate 25 fps with some jitter
_ = input(v1).setpts("1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))").output(testdata_transform / "setpts5.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=1/(25*TB) * (N + 0.05
* sin(N*2*PI/25))[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts5.mp4 -y -hide_banner
[4.8256s]
[视频对比链接]
# Apply an offset of 10 seconds to the input PTS
_ = input(v1).setpts("PTS+10/TB").output(testdata_transform / "setpts6.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=PTS+10/TB[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts6.mp4 -y -hide_banner
[4.4644s]
[视频对比链接]
# Generate timestamps from a "live source" and rebase onto the current timebase
_ = input(v1).setpts("(RTCTIME - RTCSTART) / (TB * 1000000)").output(testdata_transform / "setpts7.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=(RTCTIME - RTCSTART) / (TB * 1000000)[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts7.mp4 -y -hide_banner
[3.7406s]
[视频对比链接]
# Generate timestamps by counting samples
_ = input(v1).setpts("N/SR/TB").output(testdata_transform / "setpts8.mp4").run()
ffmpeg -hwaccel cuda -vcodec h264_cuvid -i testdata\v1.mp4 -filter_complex "[0]setpts=N/SR/TB[tag0]" -vcodec h264_nvenc -map [tag0] C:\Users\Admin\Videos\transform\setpts8.mp4 -y -hide_banner
[3.8506s]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]
[视频对比链接]