FFmpeg滤镜(13)

FFmpeg对音视频倍速处理

常见的倍速播放方式包含跳帧播放与不跳帧播放,两种方式FFmpeg均可支持,跳帧处理方式的用户体验要差些,本文重点介绍不跳帧的倍速播放而非丢帧。


1、atempo音频倍速处理

atempo是在FFmpeg中用来处理倍速的音频处理滤镜,能够控制音频播放速度的快与慢,这个滤镜只有一个参数:tempo,将这个参数的值设置为浮点型,取值范围从0.5到2,0.5则是原来速度的一半,调整为2则是原来速度的2倍速。

  • 半速处理
ffmpeg -i input.wav -filter_complex "atempo=tempo=0.5" -acodec aac output.aac

输出信息如下

Input #0, wav, from 'input.wav':
  Duration: 00:03:43.00, bitrate: 1411 kb/s
    Stream #0:0: Audio: dts (DTS-ES) ([1][0][0][0] / 0x0001), 44100 Hz, 6.1, fltp, 1411 kb/s
Stream mapping:
  Stream #0:0 (dca) -> atempo
  atempo -> Stream #0:0 (aac)
Press [q] to stop, [?] for help
[aac @ 0x7f8af700da00] Using a PCE to encode channel layout "6.1"
Output #0, adts, to 'output.aac':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, 6.1, fltp, 463 kb/s
    Metadata:
      encoder         : Lavc58.35.100 aac
size=   25168kB time=00:07:25.96 bitrate= 462.3kbits/s speed=22.9x    
video:0kB audio:25036kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.524513%

从内容中可以看出,output的总时长是input的2倍,音频效果是源音频速度的一半。

  • 2倍速处理
ffmpeg -i input.wav -filter_complex "atempo=tempo=2.0" -acodec aac output.aac

输出信息如下

Input #0, wav, from 'input.wav':
  Duration: 00:03:43.00, bitrate: 1411 kb/s
    Stream #0:0: Audio: dts (DTS-ES) ([1][0][0][0] / 0x0001), 44100 Hz, 6.1, fltp, 1411 kb/s
Stream mapping:
  Stream #0:0 (dca) -> atempo
  atempo -> Stream #0:0 (aac)
Press [q] to stop, [?] for help
[aac @ 0x7fcf9d81b600] Using a PCE to encode channel layout "6.1"
Output #0, adts, to 'output.aac':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Audio: aac (LC), 44100 Hz, 6.1, fltp, 463 kb/s
    Metadata:
      encoder         : Lavc58.35.100 aac
size=    6301kB time=00:01:51.52 bitrate= 462.8kbits/s speed=17.2x    
video:0kB audio:6268kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.524273%

从以上内容中可以看到,output的总时长是input的二分之一,音频效果比源音频速度快一倍。


2、setpts视频倍速处理

在FFmpeg的视频处理滤镜中,通过setpfs能够控制视频速度的快与慢,这个滤镜只有一个参数:expr,这个参数可用来描述视频的每一帧的时间戳。

  • 半速处理
ffmpeg -re -i input.mp4 -filter_complex "setpts=PTS*2" output.mp4

命令行执行后输出如下信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.19.100
  Duration: 00:00:30.32, start: 0.000000, bitrate: 397 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], 261 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> setpts (graph 0)
  setpts (graph 0) -> Stream #0:0 (libx264)
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.35.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
frame= 1511 fps= 50 q=-1.0 Lsize=    1600kB time=00:01:00.32 bitrate= 217.3kbits/s dup=755 drop=0 speed=1.98x

如上输出内容所示,output的时长是input的duration的2倍,播放效果会看到速度比原视频慢一半的效果,但音频速度不变。

  • 2倍速处理
ffmpeg -i input.mp4 -filter_complex "setpts=PTS/2" output.mp4

命令行执行后FFmpeg输出如下信息

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.19.100
  Duration: 00:00:30.32, start: 0.000000, bitrate: 397 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], 261 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> setpts (graph 0)
  setpts (graph 0) -> Stream #0:0 (libx264)
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.35.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
frame=  380 fps=190 q=-1.0 Lsize=    1112kB time=00:00:30.30 bitrate= 300.7kbits/s dup=0 drop=376 speed=15.2x

如上信息所示,输出的time的时长与输入的duration仍然相同,是因为音频时长没有变,但是视频的时长实际上只有原来的一半,视频的播放速度比源视频快一倍。

15s时视频已经播放完毕
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ### YUV颜色空间 视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张图片。 yuv是一种图片储存格式...
    天使君阅读 8,845评论 0 4
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 10,290评论 0 3
  • 参考ffmpeg常用命令[https://blog.csdn.net/newchenxf/article/deta...
    合肥黑阅读 204,685评论 13 204
  • 这些天,广东的天有点灰。立冬过后,开始有凉意。树上的叶子依然青翠,地上却少了花的色彩。忙完工作争取时间画两朵,让自...
    四丫xmh阅读 2,642评论 8 6
  • R:原文选自《完整的成长》 I:重述 作为陪伴儿童成长的成人,怎样帮助儿童认知情绪并使其情绪成熟、成长呢? 关注和...
    杨舟梅28阅读 2,498评论 0 0

友情链接更多精彩内容