下载m3u8

sudo ffmpeg -i https://xxx.xxx.com/xxx/index.m3u8 -c copy output.mp4

合并文件

  1. 先将文件转换成mpg格式:

    sudo ffmpeg -i 1.mp4 -qscale 4 1.mpg

    sudo ffmpeg -i 2.mp4 -qscale 4 2.mpg

  2. 在合并文件:

    sudo ffmpeg -i "concat:1.mpg|2.mpg" -c copy output.mpg

  3. 再将mpg格式转换回mp4:

    sudo ffmpeg -i output.mpg -y -qscale 0 -vcodec libx264 output.mp4

更优的合并方案

上述方案有缺点,速度过慢,且合并文件太大,也可以采用下面的方案

  1. 先将文件转换成ts格式:

    sudo ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts

    sudo ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts

  2. 合并文件同时转换成mp4:

    ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

给视频加黑边

sudo ffmpeg -i invideo.mpg -vf pad=width:height:x:y:black output.mpg

  • width: 输出的视频的宽
  • height: 输出的视频的高
  • x: 输入视频的左上角点的位置的x轴
  • y: 输入视频的左上角点的位置的y轴

ffmpeg常用命令行参数解释

  • -c:指定编码器

  • -c copy:直接复制,不经过重新编码(这样比较快)

  • -c:v:指定视频编码器

  • -c:a:指定音频编码器

  • -i:指定输入文件

  • -an:去除音频流

  • -vn: 去除视频流

  • -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast,
    veryfast, faster, fast, medium, slow, slower, veryslow。

  • -y:不经过确认,输出时直接覆盖同名文件。

ffmpeg常用命令

  • 查看文件的元信息:

    ffmpeg -i input.mp4 [-hide_banner],加上-hide_banner可以去掉冗余信息

  • 转换编码格式:

    ffmpeg -i [input.file] -c:v libx264 output.mp4(转换成264编码)

    ffmpeg -i [input.file] -c:v libx265 output.mp4(转换成265编码)

  • 转换容器格式:

    ffmpeg -i input.mp4 -c copy output.webm(只是转一下容器,内部的编码格式不变,所以使用-c copy指定直接拷贝,不经过转码,这样比较快)

  • 调整码率:

    1
    2
    3
    4
    ffmpeg \
    -i input.mp4 \
    -minrate 964K -maxrate 3856K -bufsize 2000K \
    output.mp4

    指定码率最小为964K,最大为3856K,缓冲区大小为 2000K

  • 改变分辨率:

    1
    2
    3
    4
    ffmpeg \
    -i input.mp4 \
    -vf scale=480:-1 \
    output.mp4

    从 1080p 转为 480p

  • 提取音频:

    1
    2
    3
    4
    ffmpeg \
    -i input.mp4 \
    -vn -c:a copy \
    output.aac

    -vn表示去掉视频,-c:a copy表示不改变音频编码,直接拷贝

  • 添加音轨:(将外部音频加入视频,比如添加背景音乐或旁白)

    1
    2
    3
    ffmpeg \
    -i input.aac -i input.mp4 \
    output.mp4
  • 截图:

    1
    2
    3
    4
    5
    ffmpeg \
    -y \
    -i input.mp4 \
    -ss 00:01:24 -t 00:00:01 \
    output_%3d.jpg

    从指定时间开始,连续对1秒钟的视频进行截图

    1
    2
    3
    4
    5
    ffmpeg \
    -ss 01:23:45 \
    -i input \
    -vframes 1 -q:v 2 \
    output.jpg

    (指定只截取一帧,-vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间,1为质量最高)

  • 裁剪:(截取原始视频里面的一个片段,输出为一个新视频)

    1
    2
    ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
    ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

    可以指定开始时间(start)和持续时间(duration),也可以指定结束时间(end)

  • 为音频添加封面:

    1
    2
    3
    4
    5
    ffmpeg \
    -loop 1 \
    -i cover.jpg -i input.mp3 \
    -c:v libx264 -c:a aac -b:a 192k -shortest \
    output.mp4

    有两个输入文件,一个是封面图片cover.jpg,另一个是音频文件input.mp3。-loop 1参数表示图片无限循环,-shortest参数表示音频文件结束,输出视频就结束