Home Ffmpeg常见用法【持续更新】
Post
Cancel

Ffmpeg常见用法【持续更新】

由于ffmpeg对我来说不常用,所以基本每次用都得百度一会,而且好用的命令并不多,所以记录一下我用过的命令。

  • 截取mp4
    ffmpeg -ss 1:18 -t 4:07 -accurate_seek -i input.mp4 -codec copy -avoid_negative_ts 1 out.mp4
    其中, -ss 1:18 -t 4:07 表示从从视频的第1:18开始截取4:07的视频

  • 提取音频
    ffmpeg -i input.mp4 -vn -y -acodec copy bt.aac

  • 合并mp4

    1
    2
    3
    4
    
    #转成ts后拼接
    ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
    ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
    ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
    
  • MP4 -> GIF
    ffmpeg -ss 2 -t 10 -i out.ogv -s 649x320 -r 15 out.gif

    其中, -ss 2 -t 12 表示从从视频的第2秒开始转换, 转换时间长度为10秒. -s用于设定大小, -r 用于设定帧数.

    使用默认的ffmpeg转换后的gif图片像素会有抖动,因此需要使用滤镜:

    1
    2
    3
    4
    5
    
    #!/bin/sh
    palette="/tmp/palette.png"
    filters="fps=15,scale=320:-1:flags=lanczos"
    ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette
    ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2
    

    将上述命令保存为a.sh,使用./a.sh input.mp4 out.gif生成更清楚的gif图像,其中scale用来调整尺寸,可自行更改

  • 单张图片和一段音频合成视频
    ffmpeg -r 1 -f image2 -loop 1 -i in.jpg -i in.aac -s 1920x1200 -pix_fmt yuvj420p -t 336 -vcodec mpeg4 out.mp4

    -r 是帧数,因为只有一张图片所以设置为1,我原本用的是15,成品画质极差而且转码时间很长。
    -loop 由于只有一张图片,循环
    -s 分辨率,可随意设置,最好和图片等比
    -t 视频时长 单位秒,必须和音频等长,若短则后面被剪切。若长还不是后面没声音,而是音轨出现漂移时有时无

  • 音视频合并
    分两种情况, 命令不相同

    原视频没有音频
    ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

    原视频有音频,使用新的音频替换视频中的音频
    ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4

This post is licensed under CC BY 4.0 by the author.

Ahk使用教程

Linux使用百度网盘