美文网首页
使用FFmpeg转换视频为webp、gif动图

使用FFmpeg转换视频为webp、gif动图

作者: 许文同学 | 来源:发表于2020-07-03 19:12 被阅读0次

FFmpeg主页:http://ffmpeg.org/

环境:

  • 版本:ffmpeg-20200628-4cfcfb3-win64-static
  • 系统:Win10 家庭版 x64 1909 18363.900
  • CPU:Intel i5-8250U

使用

  • 命令示例(下拉文章有详细使用)
## 将整个视频转为gif
ffmpeg -i C:/ls/video/ls.mp4 -y C:/ls/video/ls.gif
## 将视频的前10s转为webp
ffmpeg -i C:/ls/video/ls.mp4 -t 10 -r 2 -y C:/ls/video/ls.webp
  • 相关参数说明

    • -y 覆盖输出文件而无需询问。

    • -i 输入文件路径(支持URL)

    • -t 持续时间(输入/输出) 90/90.0/90000ms/00:01:30均表示90秒

      • 在输入路径-i参数之前:限制读取的内容持续时间。
      • 在输出路径之前:限制输出的内容持续时间。
    • -ss 起点位置(输入/输出) 90/90.0/90000ms/00:01:30均表示90秒

      • 在输入路径-i参数之前:读取起点位置。
      • 在输出路径之前:输出写入起点位置,在此之前的转换将不写入。
    • -sseof 从结束位前推的起点位置(输入) -90表示结束前的90秒起点位置

    • -vframes 帧数(输出)

      • 指定输出的总帧数
    • -r 帧率(输入/输出) 15即表示15帧每秒

      • 在输入路径-i参数之前:强制以指定帧率解析视频,忽略原时间信息。可理解为变速。
      • 在输出路径之前:设定输出帧率。
    • -s 设置尺寸大小(输入/输出) 480x320表示宽480px*高320px

      • 在输入路径-i参数之前:参阅原文档。
      • 在输出路径之前:设定输出尺寸。
    • -vf 过滤器(输出)

    • -f 指定格式(输入/输出)

      • 强制输入/输出文件格式。不使用则默认由输入内容解析/输出文件名推测。
    • -map_metadata 元数据设置(输出)

      • -map_metadata -1可清空元数据
    • -accurate_seek 启用使用-ss选项(输入)

    • -lossless webp无损开关

  • 技巧

    • 默认输入输出为时间基准对齐
      • 输出帧数/输出帧率 = 输出时长 = 转换部分在原视频的时长
      • 可通过设定输入帧率来改变时间比例
    • -t-vframes 同时使用时,将忽略-vframes

使用示例

  • 组件信息
ffmpeg version git-2020-06-28-4cfcfb3 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.1 (GCC) 20200621
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 55.100 / 56. 55.100
  libavcodec     58. 93.100 / 58. 93.100
  libavformat    58. 47.100 / 58. 47.100
  libavdevice    58. 11.100 / 58. 11.100
  libavfilter     7. 86.100 /  7. 86.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
  • 测试用源视频信息
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:/ls/video/ls.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp41isom
    creation_time   : 2020-07-03T09:02:48.000000Z
    artist          : Microsoft Game DVR
    title           : 时间_百度搜索 - Google Chrome
  Duration: 00:01:01.49, start: 0.000000, bitrate: 20044 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1048 [SAR 1:1 DAR 240:131], 19787 kb/s, 29.96 fps, 59.94 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2020-07-03T09:02:48.000000Z
      handler_name    : VideoHandler
      encoder         : AVC Coding
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 117 kb/s (default)
    Metadata:
      creation_time   : 2020-07-03T09:02:48.000000Z
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> webp (libwebp_anim))
Press [q] to stop, [?] for help
  • 测试与输出结果
    • 指定输出1帧/秒,总60帧(即控制输出时长为60/1=60s)

      ## 转为webp
      C:\ls\ffmpeg\bin>ffmpeg -i C:/ls/video/ls.mp4 -r 1 -vframes 60 -y C:/ls/video/ls.webp
      Output #0, webp, to 'C:/ls/video/ls.webp':
        Metadata:
          major_brand     : mp42
          minor_version   : 0
          compatible_brands: mp41isom
          title           : 时间_百度搜索 - Google Chrome
          artist          : Microsoft Game DVR
          encoder         : Lavf58.47.100
          Stream #0:0(und): Video: webp (libwebp_anim), yuv420p, 1920x1048 [SAR 1:1 DAR 240:131], q=2-31, 200 kb/s, 1 fps, 1k tbn, 1 tbc (default)
          Metadata:
            creation_time   : 2020-07-03T09:02:48.000000Z
            handler_name    : VideoHandler
            encoder         : Lavc58.93.100 libwebp_anim
      frame=   60 fps=8.7 q=-0.0 Lsize=    1737kB time=00:01:00.00 bitrate= 237.2kbits/s dup=0 drop=1688 speed=8.66x
      video:1737kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
      
      ## 转为gif
      C:\ls\ffmpeg\bin>ffmpeg -i C:/ls/video/ls.mp4 -r 1 -vframes 60 -y C:/ls/video/ls.gif
      [swscaler @ 000001bba461bfc0] No accelerated colorspace conversion found from yuv420p to bgr8.
      Output #0, gif, to 'C:/ls/video/ls.gif':
        Metadata:
          major_brand     : mp42
          minor_version   : 0
          compatible_brands: mp41isom
          title           : 时间_百度搜索 - Google Chrome
          artist          : Microsoft Game DVR
          encoder         : Lavf58.47.100
          Stream #0:0(und): Video: gif, bgr8, 1920x1048 [SAR 1:1 DAR 240:131], q=2-31, 200 kb/s, 1 fps, 100 tbn, 1 tbc (default)
          Metadata:
            creation_time   : 2020-07-03T09:02:48.000000Z
            handler_name    : VideoHandler
            encoder         : Lavc58.93.100 gif
      frame=   60 fps= 10 q=-0.0 Lsize=    3029kB time=00:00:59.01 bitrate= 420.4kbits/s dup=0 drop=1688 speed=9.96x
      video:3029kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000645%
      
    • 以120帧作为1秒时间单位解析原视频(即61.48s*29.96fps/120≈15s) 指定输出4帧/秒,总60帧(即控制输出时长为60/4=15s)

      ## 转为webp
      C:\ls\ffmpeg\bin>ffmpeg -r 120 -i C:/ls/video/ls.mp4 -r 4 -vframes 60 -map_metadata -1 -y C:/ls/video/ls.webp
      Output #0, webp, to 'C:/ls/video/ls.webp':
        Metadata:
          encoder         : Lavf58.47.100
          Stream #0:0: Video: webp (libwebp_anim), yuv420p, 1920x1048 [SAR 1:1 DAR 240:131], q=2-31, 200 kb/s, 4 fps, 1k tbn, 4 tbc (default)
          Metadata:
            encoder         : Lavc58.93.100 libwebp_anim
      frame=   60 fps=8.9 q=-0.0 Lsize=    1735kB time=00:00:15.00 bitrate= 947.7kbits/s dup=0 drop=1692 speed=2.22x
      video:1735kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
      
      ## 转为gif
      C:\ls\ffmpeg\bin>ffmpeg -r 120 -i C:/ls/video/ls.mp4 -r 4 -vframes 60 -map_metadata -1 -y C:/ls/video/ls.gif
      [swscaler @ 000002c9018ff400] No accelerated colorspace conversion found from yuv420p to bgr8.
      Output #0, gif, to 'C:/ls/video/ls.gif':
        Metadata:
          encoder         : Lavf58.47.100
          Stream #0:0: Video: gif, bgr8, 1920x1048 [SAR 1:1 DAR 240:131], q=2-31, 200 kb/s, 4 fps, 100 tbn, 4 tbc (default)
          Metadata:
            encoder         : Lavc58.93.100 gif
      frame=   60 fps= 10 q=-0.0 Lsize=    3056kB time=00:00:14.76 bitrate=1696.1kbits/s dup=0 drop=1692 speed= 2.5x
      video:3056kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000639%
      
    • 读取源视频第6秒开始的10秒钟 指定输出分辨率以定宽640px等比缩放

      C:\ls\ffmpeg\bin>ffmpeg -ss 6 -t 10 -i C:/ls/video/ls.mp4 -vf scale=640:ih*640/iw -map_metadata -1 -y C:/ls/video/ls.webp
      Output #0, webp, to 'C:/ls/video/ls.webp':
        Metadata:
          encoder         : Lavf58.47.100
          Stream #0:0: Video: webp (libwebp_anim), yuv420p, 640x349 [SAR 1047:1048 DAR 240:131], q=2-31, 200 kb/s, 29.97 fps, 1k tbn, 29.97 tbc (default)
          Metadata:
            encoder         : Lavc58.93.100 libwebp_anim
      frame=  300 fps=179 q=-0.0 Lsize=     306kB time=00:00:10.04 bitrate= 249.5kbits/s speed=   6x
      video:306kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
      

相关文章

网友评论

      本文标题:使用FFmpeg转换视频为webp、gif动图

      本文链接:https://www.haomeiwen.com/subject/puleqktx.html