• ffmpeg时间有关的操作


    1. 音频和视频的时长

      1-1. 使用 -t 参数设置时长,单位是秒

        比如:ffmpeg  -i  music.mp3  -t  180  music_3_minutes.mp3

      1-2. 设置帧的数量

        音频选项audio:-aframes  number 或者 -frames:a  number 

        数据选项data:-dframes  numebr 或者 -frames:d  number

        视频选项video:-vframes  number 或者 -frames:v  number

          比如:ffmpeg  -i  video.avi  -vframes  15000  video_10_minutes.avi

    2. 延迟设置

      使用 -ss参数实现(ss即seek from start)。它的值可以是秒数或者HH:MM:SS格式的时间

        比如视频延迟10秒的处理:ffmpeg -i input.avi -ss 10 output.mp4

    3. 从媒体文件提取指定的部分

      结合-ss参数和-t参数,可以实现提取文件的指定部分。

        比如提取文件的第五秒:ffmpeg -i video.mpg -ss 240 -t 60 clip_5th_minute.mpg  //-ss 240表示延迟4分钟开始, -t 60表示提取60秒

      3-1. 多个输入流之间的延迟处理

        如果希望某个输入流延迟输出,可以使用 itsoffset(input timestamp offset) 参数和 -map参数 实现。

        注意:一些格式比如AVI, FLV, MOV, MP4等等由于头部的不同导致有些时候 itsoffset 参数不起作用。

        下面例子是让 音频延迟1秒,然后和视频合并,如下:

          ffmpeg -i input.avi -ss 1 audio.mp3
          ffmpeg -i input.avi -i audio.mp3 -map 0:v -map 1:a video.mp4 

      3-2. 一个文件的多条媒体流的延迟处理

        比如一个文件有音频流和视频流但是它们不同步,假设音频快5秒,则同步处理如下:

          ffmpeg -i input.mov -map 0:v -map 0:a -itsoffset 5 -c:a copy -c:v copy output.mov  //-map 0:v表示第一个输入的视频流,不做处理。-map 0:a -itsoffset 5表示第一个输入的音频流,延迟5秒开始

        比如是视频流快5秒,则同步处理如下:

          ffmpeg -i input.mov -map 0:v -itsoffset 5 -map 0:a -c:a copy -c:v copy output.mov

      3-3. 多个文件的延迟处理

        比如有两个文件作为输入,一个音频文件,一个视频文件,要让音频延迟3秒开始,则处理如下:

          ffmpeg -i v.mpg -itsoffset 3 -i a.mp3 -map 0:v:0 -map 1:a:0 output.mp4  //-map 0:v:0表示第一个输入的所有视频流的第一条视频流,-map 1:a:0表示第二个输入的所有音频流的第一条音频流

      3-4. 限制处理时长

        使用 -timelimit参数限制处理的时长,值为秒数。

        比如说编码10分钟后就退出,如下:

          ffmpeg -i input.mpg -timelimit 600 output.mkv  //600表示秒数,即10分钟

      3-5. 最短的那条流决定了编码时长

        默认情况下,编解码处理是处理完所有媒体流才会结束的,也就是最长的那条流决定处理的时长。可以使用 -shortest参数指定最短的那条流决定处理时长。

        比如要合并video.avi 和 audio.mp3,音频audio.mp3时长比视频video的短,现在要处理完音频即退出,如下:

          ffmpeg -i video.avi -i audio.mp3 -shortest output.mp4  //添加-shortest参数

    4. 时间戳和时间基线

      设置时间戳,使用 -timestamp参数。它的值形式如下:

        1)now  //当前时间

        2)YYYY-MM-DD 或者 YYYYMMDD 格式的日期,不指定则当前日期

        3)HH:MM:SS[.m...] 或者 HHMMSS[.m...] 格式的时间,不指定则当前时间

        4)在日期和时间之间可以添加T和t字母,也可以不添加

        5)如果最后以Z或者z结束的表示UTC时间,否则是本地时间

        比如下面是时间戳是有效的:2010-12-24T12:00:00, 20101224t120000z, 20101224120000

        又比如,ffmpeg获取视频流的信息如下:

          Stream #0:0, 1, 1/25: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46),yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc

          tbr、tbn、tbc的介绍如下:

            

            tbc是用于给定流的AVCodecContext里的编解码基线。thn用于所有的AVStream里的基线。tbr是猜测的基线,和帧率的值一样。

    5. 编码时间基线的设置

      进行流copy时,给编码器指定时间基线,使用 -copytb参数实现,它有3个可选值:1(解封装器demuxer 的时间基线),0(解码器decoder的时间基线),-1(自动选择,这是默认值)

      比如给输出指定编码时间基线为 解封装器的时间基线,如下:

        ffmpeg -i input.mp4 -copytb 1 output.webm

    6. 修改音频和视频的播放速度

      6-1. 改变视频速度

        使用 setpts 滤镜实现。setpts即(set presentation timestamp),setpts的介绍如下:

          

          每一个视频帧都有一个带有时间戳的头部,两个连续的帧之间的时差是1/fps。比如帧率fps为25,则时差为1/25=0.04秒,这个值就是PTS。如果想改变播放速度,就是改变PTS的值了。

          比如播放速度加快3倍,修改如下:

            ffplay -i input.mpg -vf setpts=PTS/3

          比如播放速度是原本的3/4,修改如下:

            ffplay -i input.mpg -vf setpts=PTS/(3/4)

      6-2. 改变音频速度  

        使用 atempo 滤镜实现。 atempo 滤镜的介绍如下:

          

          tempo的取值范围为 0.5 ~ 2.0 ,小于1.0表示减速,大于1.0表示加速,默认是1.0

          比如要让音频加速2倍,如下:

            ffplay -i speech.mp3 -af atempo=2

          比如要让音频减速一半:

            ffplay -i speech.mp3 -af atempo=0.5

      6-3. 通过时间戳去同步音频数据

        使用asyncts滤镜实现。asyncts的介绍如下:

          

          比如要同步music.mpg的数据,如下:

            ffmpeg -i music.mpg -af asyncts=compensate=1 -f mpegts music.ts  //compensate=1表示开启数据伸缩用以匹配时间戳。如果不开启的话,需要拉伸的地方使用静音填充

  • 相关阅读:
    类加载器加载class文件
    多线程用到的概念知识点
    3年工作经验你的程序员应该具备的技能
    面试题
    正则表达式(一)
    Servlet(五)----ServletContext对象
    Servlet(四)----HTTP、Response、servletContent
    JDBC(三)----Spring JDBC(JDBCTemplate)
    JDBC(四)----数据库连接池
    JDBC(三)----JDBC控制事务
  • 原文地址:https://www.cnblogs.com/yongfengnice/p/7156952.html
Copyright © 2020-2023  润新知