一些结论

  • 5800h转码h264速度是m3pro的60%,h265则快于m3pro,但视频体积更小。

  • crf越小画质越好,体积越大,对视频转码速度影响不大。

  • 同等画质情况下,h265体积小于h264.

  • ffmpeg h264的crf默认值是23,h265的是28,两者画质近似。

  • 使用显卡转码一定要设置-cq h264可以23 hevc(h265)设置28或者30,不然出来体积太大。

  • 同等画质下cpu转码体积更小。

  • h264显卡速度略快于cpu 1.3x,h265显卡速度是cpu 4倍以上(3070laptop 5800H)。推荐使用显卡。

  • 不计时间成本要最好效果,使用cpu转码h265,crf 22或者21,-preset slower或者veryslow。

  • 英伟达显卡hevc随着cq变大,文件变小,画质变差,通常网课30-32都可以,40开始已经明显变差了。

  • h265视频,码率按照200kbps,60分钟,大小为:200 60 60 / 8 / 1024=87.89MB,所以根据文件大小,就能估算出来码率。

  • 视频大小主要受编码格式影响,容器类型基本没有影响,但mkv比mp4略小可以忽略不记,对于没有字幕的网课视频,通常mp4较好,可以方便剪辑(pr等软件不支持mkv)。如果需要在容器内保存字幕,mkv较好。

推荐命令

音乐转码参数

最好加上音乐转码参数,不然就有可能被转为Vorbis ,影响速度。

1
2
3
4
5
6
7
8
#无损
-c:a flac
#更好的aac格式
-c:a libfdk_aac
#aac
-c:a aac
#只拷贝音乐
-c:a copy

H264-cpu

其他选项

1
2
# 使用gpu解码
-hwaccel cuda

超高清电影

1
2
3
4
#最好效果
ffmpeg -i input.avi -y -c:v libx264 -crf 21 -preset slow output.mkv
#高清
ffmpeg -i input.avi -y -c:v libx264 -crf 22 -preset medium output.mkv

H265-cpu-还需要研究

1
2
#示例:用x265转码,CRF模式,slow预设,音频转为2.0声道128kbps 
ffmpeg -i input.avi -c:v libx265 -crf 22 -preset slow -c:a aac -ac 2 -b:a 128k output.mkv
1
2
3
4
5
#最好效果,太慢了,不推荐
ffmpeg -i input.avi -y -c:v libx265 -crf 22 -preset slow output-1.mkv

#高清
ffmpeg -i input.avi -y -c:v libx265 -crf 25 output-x265normal.mkv

H264-nvenc

1
2
3
4
#默认版本
ffmpeg -i input.avi -y -c:v h264_nvenc ouput-x264-nvenc.mkv

ffmpeg -i input.avi -y -c:v h264_nvenc -qp 22 ouput-x264-nvenc-qp22.mkv

H265-nvenc

1
2
3
4
5
6
7
8
#默认参数 似乎体积会变大(不推荐)
ffmpeg -i input.avi -y -c:v hevc_nvenc ouput-hevc_nvenc.mkv
#比较均衡(推荐)
ffmpeg -i input.avi -y -c:v hevc_nvenc -cq 23 ouput-hevc_nvenc-qp23.mkv
#小体积
ffmpeg -i input.avi -y -c:v hevc_nvenc -cq 26 ouput-hevc_nvenc-qp26.mkv
#体积最小
ffmpeg -i input.avi -y -c:v hevc_nvenc -cq 28 -preset p7 ouput.mkv

纯显卡

1
ffmpeg   -hwaccel cuda -hwaccel_output_format cuda  -i input.avi  -y -c:v hevc_nvenc -cq 28 -c:a libfdk_aac ouput.mkv

自己用过的

  1. 将1:50开始之后的100s内容输出
1
ffmpeg -ss 1:05 -i clannad.mp4 -t 100 -c:v copy -c:a copy output.mp4
  1. 将00:20开始之后的内容输出
1
ffmpeg -ss 00:20 -i clannad.mp4 -c:v copy -c:a copy output.mp4
  1. 字幕加入到视频
1
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv
  1. 烧录像进字幕
1
2
3
ffmpeg -i input.mkv -vf subtitles=subtitles.srt output.mkv
#显卡加速
ffmpeg -c:v h264_cuvid -i input.mkv -vf subtitles=subtitles.srt -c:v h264_nvenc output.mkv
  1. 提取字幕
1
ffmpeg -i input.mkv output.srt
  1. 显卡加速
1
2
ffmpeg -i input.mkv output.mp4
ffmpeg -y -i 002-SpringBoot课程简介.avi -vcodec h264_nvenc 1.mp4
  1. 这个时候可以考虑使用cpu解码而使用显卡加速编码
1
ffmpeg -c:v hevc -i input.mp4 -c:v h264_qsv -b:v 2500k -bufsize 2500k output.mp4
  1. ffplay命令行播放视频
1
2
3
ffplay input.avi
# 播放完自动退出
ffplay -autoexit input.avi
  1. 查看视频信息
1
2
3
4
ffprobe -i input.avi

#也可以 也能查看
ffmpeg -i input.avi

10.转码网课avi,没有压缩过的

1
ffmpeg  -hwaccel cuda -i input.avi  -y -c:v hevc_nvenc -cq 28 -c:a libfdk_aac ouput.mkv

11.纯显卡

1
ffmpeg   -hwaccel cuda -hwaccel_output_format cuda  -i input.avi  -y -c:v hevc_nvenc -cq 28 -c:a libfdk_aac ouput.mkv

硬编码后缀解释

  • qsv:intel显卡的快速视频同步技术(quick sync video)
  • nvenc:nvidia显卡的硬件视频编码器(nvidia hardware video encoder)
  • cuvid:nvdec的旧称,只有解码端。
  • cuda: 同上
  • amf:amd显卡的amf硬件编码器(amd hardware encoder)

基本上所有的Intel 电脑都支持qsv方式。

各种剪视频方式对比

MP4

1
2
3
4
5
6
7
8
9
10
速度测试:
ffmpeg -y -i 动态代理-01-日常生活中代理例子.avi 1.mp4
cpu:15.2x

ffmpeg -y -i 动态代理-01-日常生活中代理例子.avi -vcodec h264_nvenc 1.mp4
h264_nvenc:23.8x

使用 NVDEC 和 NVENC 进行全硬件转码:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i 动态代理-01-日常生活中代理例子.avi -c:v h264_nvenc 1.mp4
cuda:24.5x

mkv(比较快)

1
2
3
4
5
6
7
8
9
10
速度测试:
ffmpeg -y -i 动态代理-01-日常生活中代理例子.avi 1.mkv
cpu:36.8x

ffmpeg -y -i 动态代理-01-日常生活中代理例子.avi -vcodec h264_nvenc 1.mkv
h264_nvenc:81.4x

使用 NVDEC 和 NVENC 进行全硬件转码:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i 动态代理-01-日常生活中代理例子.avi -c:v h264_nvenc 1.mkv
cuda:83.6x

不同格式速度

1
2
3
4
5
ffmpeg  -y  -i 动态代理-01-日常生活中代理例子.avi -vcodec h264_nvenc 1.mp4
mp4:23.8x

ffmpeg -y -i 动态代理-01-日常生活中代理例子.avi -vcodec h264_nvenc 1.mkv
mkv:82.3x

文件大小

1
2
mkv:10044kb
mp4:23108kb

看起来mkv更好点 速度更快,体积更小。

硬件加速命令
1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -s 1920x1080 output.mp4
常用命令参数解释
  • -hwaccel cuvid:使用cuvid进行硬件加速
  • -c:v h264_cuvid:使用h264_cuvid进行解码
  • -c:v h264_nvenc:使用h264_nvenc进行编码(nvidia硬件加速x265)
  • -b:v 2000k:比特率,值越大约清晰。
  • -s 1920x1080:分辨率
  • -b:v 3500K :视频平均比特率为 3500K
  • -bufsize 6000K:缓存区大小 6000K,建议设定为 当前码率帧率5,也许这里的2pass是针对缓冲区的,缓存未来5s
  • -maxrate 5000K:最大码率为 5000K,每帧的最高码率不超过这个数值
  • -preset slow:预设方案是 slow,slow已经是最好的选项了
  • -pix_fmt p010le:输出的像素格式是 p010le 也就10bit,只有新的硬件支持,例如:970m不支持,1070可以支持

控制台播放视频:

ffmpeg -i badapple.mp4 -pix_fmt rgb24 -f caca /dev/stdout

相关信息

视频压制

视频的压制主要有 CRF(Constant Rate Factor,恒定率系数)与二压(2Pass)两种常用的方法,以及定限码率压制这种相对不常用的方法(不太推荐)

码率选择

难对“合适”的码率作出一个精确的定义。在这里,我只简单引用一下 Youtube 码率建议表供大家参考:

  • 表中码率的推荐值基于 H.264 编码。
  • 表中推荐高帧率视频使用同规格低帧率 1.5 倍的码率,而 HDR 使用 SDR 1.25 倍的码率。
规格 帧率 推荐码率(SDR) 推荐码率(HDR)
8K 24~30 80 - 160 Mbps 100 - 200 Mbps
48~60 120 - 240 Mbps 150 - 300 Mbps
4K (2160p) 24~30 35 - 45 Mbps 44 - 56 Mbps
48~60 53 - 68 Mbps 66 - 85 Mbps
2K (1440p) 24~30 16 Mbps 20 Mbps
48~60 24 Mbps 30 Mbps
1080p 24~30 8 Mbps 10 Mbps
48~60 12 Mbps 15 Mbps
720p 24~30 5 Mbps 6.5 Mbps
48~60 7.5 Mbps 9.5 Mbps

Youtube 的音频码率推荐则为单声道 128 Kbps、环绕声 384 Kbps 以及 5.1 声道 512 Kbps.

基本命令

基本示例

1
ffmpeg  -y  -i input.avi -vcodec h264_nvenc  output.mp4

输出文件直接指定即可

参数

  • -i:输入文件。示例:input.mp4

  • -y:自动覆盖输出文件,不询问。

  • -n:不覆盖输出文件,如果存在则退出。

  • -b bitrate:视频/音频比特率,单位kbps。

  • -b:a:用于设置音频流的比特率。比特率是指在单位时间内传输的比特数,通常以 kbps(千比特每秒)为单位。比特率越高,音频质量通常越好,但文件大小也会增加。示例:128k

  • -b:v:设置视频的目标码率为2500 kbps。示例:5000k,5M。

  • -c:a:指定音频编码器(例如 aac)。例如:copy(只复制不转码),aac(ffmpeg内置编码器),libfdk_aac(更优秀的aac编码器,官方没有libfdk_aac),ac3(DVD/BD中常用编码,也是aac),flac(无损压缩的音频编码),libopus(在低码率下表现优异),libmp3lame(mp3编码器)。

  • -c:v:指定视频编码器。例如:H.264(AVC) : libx264(cpu),h264_amf(AMD显卡),h264_nvenc(nvidia显卡),h264_qsv(intel核显)。H.265(HEVC) : libx265(cpu),hevc_amf(AMD显卡), hevc_nvenc(nvidia显卡),hevc_qsv(intel核显)。AV1:libaom-av1/av1_nvenc (av1是 H.265 的免版税竞争者),libvpx/vp8_nvenc /vp9_nvenc (VP8/VP9 :Google 开发的视频编码器,常用于 WebM 格式),

  • -vn:忽略视频流只处理音频。

  • -an:忽略音频流只处理视频。

  • -vbr:音频可变比特率,参数可以取值从 1 到 5,数字越大质量越高。示例:3

  • -crf:视频可变比特率(推荐使用),设置 CRF 值(视频质量),范围是 0(无损)到 51(最差)。h264中推荐使用19-23,推荐21。示例:21。

  • -bufsize :设置缓冲区大小为2500 kbps,确保视频平稳输出。示例:2500k。

  • -hwaccel:用于启用硬件加速解码。选项:cuvid/nvdec (nvidia解码器),cuda (CUDA),qsv(intel核显),dxva2 (使用 Windows DirectX Video Acceleration),不指定默认是cpu。

  • -t duration:限定输入或输出时长,单位秒或时分秒格式。

  • -to position:限定输出时长,单位秒或时分秒格式。

  • -ss position:定位输入文件起始位置,单位秒或时分秒格式。

  • -s size:指定视频尺寸大小,如360x240。最好是成倍数调整。

  • -r fps:指定视频帧率。最好是成倍数调整

  • -ar samplerate:音频采样率,如44100。

  • -ac channels:音频通道数,如2。

  • -reset:视频时间基准点重置。

  • -shortest:按最短流长度进行处理。

  • -copyinkf/-copyts:复制输入文件元数据及时间戳。

  • -map:映射输入文件流到输出文件指定位置。

  • -video_track_timescale:视频时间基数。

  • -vsync cfr/vfr:视频同步模式。

  • -profile:编码规范,如baseline/main/high等。

  • -preset/tune:编码优化预设。-preset 选项用于控制编码速度与压缩效率之间的平衡。通常,预设值可以让你在编码速度和输出视频质量之间做出选择。值越低,压缩效率越高,但编码时间越长;值越高,编码速度越快,但压缩效率可能较低。常见的 -preset 选项包括:

    -tune 选项用于根据视频内容的特性进一步优化编码器的设置。常见的 -tune 选项包括:

  • -qscale:固定尺寸编码,0-31值越低质量越高。

  • -async:异步音视频处理。

  • -filter_complex:添加视频过滤器处理链。

  • -timecode/dump_extradata:时间码/编码参数嵌入。

  • -metadata:元数据设置。

  • -stats:统计信息。

  • -hls_playlist:HLS播放列表生成。

  • -〜ignore_unknown:忽略未知的流类型。

  • -aspect:设置视频的屏幕高宽比。

    1
    2
    3
    4
    5
    通常使用的宽高比是:
    16:9
    4:3
    16:10
    5:4
  • -threads:指定转码时用的cpu核心数量,模型为所有。推荐不设置。

  • -hwaccel :后面可以选择解码器。例子:cuda

  • -cq:英伟达转码推荐 28。
    -cq 参数在 hevc_nvenc(和 h264_nvenc)编码中用于控制恒定质量。它的工作原理类似于 CRF,但具体实现和调整范围有所不同。
    在大多数情况下,-cq 模式会更推荐一些,因为它能够保证恒定的视觉质量,可以通过简单地调整 QP 值来控制输出质量和文件大小。如果你对比特率限制有更严格的要求,可以尝试使用 -rc:v vbr_hq 模式,并结合合适的目标比特率和最大比特率设置。

  • 1

libx264 与 libx265 的 CRF 取值没有一一对应的公式。除了上文所述的无损参数均为 CRF=0、libx264 CRF=23 对应 libx265 CRF=28,其余 CRF 值并不存在对应关系。

英伟达显卡参数

-pq 注重感知质量,通过优化视觉效果来提升视频质量。

-cq 注重恒定质量,通过动态调整比特率来保持一致的视觉质量。

X264参数

preset

medium:默认的

veryslow:压片组常用

二压(2Pass)

通常只在强制要求文件大小时使用二压。

例子:

1
2
3
4
5
6
7
# 对于 H.264 二压,使用 -pass 参数。请注意首行行尾的续行。
ffmpeg -y -i video.mp4 -c:v libx264 -b:v 2600k -pass 1 -an -f null NUL && `
ffmpeg -i video.mp4 -c:v libx264 -b:v 2600k -pass 2 -c:a aac -b:a 128k out.mp4

# 对于 H.265 二压,则应使用 -x265-params 参数。同样,请注意首行行尾的续行。
ffmpeg -y -i video.mp4 -c:v libx265 -b:v 2600k -x265-params pass=1 -an -f null NUL && `
ffmpeg -i video.mp4 -c:v libx265 -b:v 2600k -pass 2 -c:a aac -b:a 128k out.mp4

检查FFmpeg支持的硬件加速选项

1
ffmpeg -hwaccels

cuda
dxva2
qsv
d3d11va

列出可用的编码器

1
ffmpeg configure -encoders

列出可用的解码器

1
ffmpeg configure -decoders

查看FFmpeg支持的通信协议

1
ffmpeg configure -protocols

查看HEVC编码器用法

1
ffmpeg -h  encoder=hevc_nvenc

实际测试

  • 测试文件input.avi 98171kb (视频58522k,音频39649k)视频:tscc 音频:pcm 都是未压缩的
  • 5800h 8核心16线程 32GB DDR4 3070laptop 固态硬盘
  • ffmpeg6.1.1

仅提取视频

仅复制视频

1
ffmpeg -i input.avi -c:v copy -an ouput-copy.mkv

速度:无限大

大小:58522k

cpu压缩H264

1
ffmpeg -i input.avi -an -y -c:v libx264 ouput—libx264.mkv

速度:27.2x

大小:20353k

nvidia压缩H264

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc ouput—h264_nvenc.mkv

速度:61.1x

大小:34407k

cpu压缩H265

1
ffmpeg -i input.avi -an -y -c:v libx265 ouput—libx265.mkv

速度:9.22x

大小:24747k

nvidia压缩H265

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc ouput—hevc_nvenc.mkv

速度:56.9x

大小:37532k

cpu压缩av1

1
ffmpeg -i input.avi -an -y -c:v libaom-av1 ouput—libaom-av1.mkv

速度:0.402x

大小:?

速度极慢,有问题

nvidia压缩av1

1
ffmpeg -i input.avi -an -y -c:v av1_nvenc  ouput—av1_nvenc.mkv

速度:

大小:

不支持

cpu压缩vp9

1
ffmpeg -i input.avi -an -y -c:v libvpx-vp9  ouput—libvpx-vp9.mkv

速度:1.36x

大小:31584k

nvidia压缩vp9-不支持

结论

目前来说显卡和cpu对vp9和av1支持都不够好,高压缩比推荐h265,低压缩比推荐h264。并且需要修改预设。

常用编码器与参数 — FFmpeg 教程 文档 (wklchris.github.io)

仅提取音频

仅复制音频

1
ffmpeg -i input.avi -c:a copy -vn ouput.pcm

速度:无限大

大小:39180k

仅提取音频转为libfdk_aac

1
2
3
4
ffmpeg -i input.avi -c:a libfdk_aac -vbr 3 -vn output-libfdkaac.m4a

#推荐
ffmpeg -i input.avi -c:a libfdk_aac -vn output-libfdkaac.m4a

速度:291x

大小:5421k

仅提取音频转为aac

1
ffmpeg -i input.avi -c:a aac -vn output-aac.m4a

速度:59.5x

大小:8603k

ac3-同aac

flac

1
ffmpeg -i input.avi -c:a flac -vn output-flac.flac

速度:2350x

大小:16804k

libopus

1
ffmpeg -i input.avi -c:a libopus output.opus

速度:278x

大小:8016k

MP3-32kbps

1
ffmpeg -i input.avi -c:a libmp3lame -vn output-aac.mp3

速度:285x

大小:3555k

结论

通常来说libfdk_aac比aac更好。推荐使用libfdk_aac,如果需要无损可以使用flac。

测试不同参数H264-cpu-仅提取视频

默认模式

1
ffmpeg -i input.avi -an -y -c:v libx264 ouput—libx264.mkv

速度:27.2x

大小:20353k

Bitrate(ABR 平均比特率模式)-不推荐

1
ffmpeg -i input.avi -an -y -c:v libx264 -b:v 2000k ouput—libx264-bv2000k.mkv

速度:29x

大小:56549k

CQP(恒定量化模式)-独显推荐

1
2
3
4
5
6
#-q:v 值越小效果越好,22一般观感较好,推荐19-23,默认22

#qp
ffmpeg -i input.avi -an -y -c:v libx264 -qp 21 ouput—libx264-qp21.mkv

ffmpeg -i input.avi -an -y -c:v libx264 -qp 23 ouput—libx264-qp23.mkv

速度:26.6x

大小:20353k

恒定率系数(CRF)-cpu推荐

系数 -crf:对于常见的 8 bit H.264 视频, -crf 参数可以从 0(无损)到 51(最差压缩)取值,而默认值是 23。一般地,我们只选择 17~28 之间的数值:从视觉观感上,17 已经很接近无压缩的结果,更小的 crf 值徒增文件体积罢了。

22的观感已经不错了,对速度影响不大。

1
ffmpeg -i input.avi -an -y -c:v libx264 -crf 22 ouput—libx264-crf22.mkv

速度:29.3x

大小:21524k

推荐:-crf 22

测试-preset

默认是medium,速度:29x,大小20353k

slow,速度:21.2x,大小19803k

slower,速度:17.1x,大小17963k

veryslow,速度:9.51x,大小16180k

1
2
3
4
5
6
7
8
#默认medium

#slow
ffmpeg -i input.avi -an -y -c:v libx264 -preset slow ouput—libx264-preset-slow.mkv
#slower
ffmpeg -i input.avi -an -y -c:v libx264 -preset slower ouput—libx264-preset-slower.mkv
#veryslow
ffmpeg -i input.avi -an -y -c:v libx264 -preset veryslow ouput—libx264-preset-veryslow.mkv

结论:对速度和大小都有影响。根据情况选择。

测试不同参数H264-nvidia-仅提取视频

对h264_nvenc来说 -crf是无效的。

默认

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc ouput—h264_nvenc.mkv

速度:61.2x

大小:34407k

CQP(恒定量化模式)-独显推荐

默认:0,自动,看起来不用设置。

1
2
3
4
#这个不能用,结果很差。体积很小
ffmpeg -i input.avi -an -y -c:v h264_nvenc -q:v 22 ouput—h264_nvenc-qv22.mkv
#这个看起来还可以
ffmpeg -i input.avi -an -y -c:v h264_nvenc -qp 22 ouput—h264_nvenc-qp22.mkv

-qp 23,速度61.6x,大小15449k

-qp 22,速度61.8x,大小16288k

-qp 20,速度63x,大小18546k

推荐:21-22;

测试-preset

说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
default         0            E..V.......
slow 1 E..V....... hq 2 passes
medium 2 E..V....... hq 1 pass
fast 3 E..V....... hp 1 pass
hp 4 E..V.......
hq 5 E..V.......
bd 6 E..V.......
ll 7 E..V....... low latency
llhq 8 E..V....... low latency hq
llhp 9 E..V....... low latency hp
lossless 10 E..V.......
losslesshp 11 E..V.......
p1 12 E..V....... fastest (lowest quality)
p2 13 E..V....... faster (lower quality)
p3 14 E..V....... fast (low quality)
p4 15 E..V....... medium (default)
p5 16 E..V....... slow (good quality)
p6 17 E..V....... slower (better quality)
p7 18 E..V....... slowest (best quality)

默认是:medium,速度:61.4x,大小34407k:

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc -preset medium ouput—h264_nvenc-medium.mkv

slow,速度:30.8x,大小32326k:

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc -preset slow ouput—h264_nvenc-slow.mkv

p5,速度:45.5x,大小33865k:

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc -preset p5 ouput—h264_nvenc-p5.mkv

p6,速度:42x,大小35268k:

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc -preset p6 ouput—h264_nvenc-p6.mkv

p7,速度:40.4x,大小34406k:

1
ffmpeg -i input.avi -an -y -c:v h264_nvenc -preset p7 ouput—h264_nvenc-p7.mkv

测试不同参数H265-cpu-仅提取视频

默认

1
ffmpeg -i input.avi -an -y -c:v libx265 ouput—libx265.mkv

速度:10x

大小:24747k

恒定率系数(CRF)-cpu推荐

默认:-1,也就是28,越小越好。和h264的23质量差不多。

1
ffmpeg -i input.avi -an -y -c:v libx265  -crf 28 ouput—libx265-crf28.mkv

速度:10x

大小:24747k

1
ffmpeg -i input.avi -an -y -c:v libx265  -crf 22 ouput—libx265-crf22.mkv

速度:10x

大小:36493k

5800h转码h264速度是m3pro的60%,,但视频体积更小。

crf越小画质越好,体积越大,对视频转码速度影响不大。

同等情况下,h265体积小于h264.

测试-preset

默认是:medium,速度:10x,大小:24747k

1
ffmpeg -i input.avi -an -y -c:v libx265 -preset medium ouput—libx265-medium.mkv

slow,速度:,5.17x 大小20149k:

1
ffmpeg -i input.avi -an -y -c:v libx265 -preset slow ouput—libx265-slow.mkv

veryslow,速度:0.826x,大小17033k:

1
ffmpeg -i input.avi -an -y -c:v libx265 -preset veryslow ouput—libx265-veryslow.mkv

veryslow,太慢了。

推荐:不修改或者slow。

测试不同参数H265-nvidia-仅提取视频

默认

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc ouput—hevc_nvenc.mkv

速度:57.5x

大小:37532k

测试-cq -可以用22

高质量-cq 在 18-24 之间

中等质量-cq 在 24-28 之间

低质量-cq 在 28-35 之间

15:和默认的很接近

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 15 ouput—hevc_nvenc-cq15.mkv

速度:*x

大小:36448k

21

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 21 ouput—hevc_nvenc-cq21.mkv

速度:53.5x

大小:27258k

23

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 23 ouput—hevc_nvenc-cq23.mkv

速度:55x

大小:24473k

28

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 28 ouput—hevc_nvenc-cq28.mkv

速度:55x

大小:18219k

35

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 35 ouput—hevc_nvenc-cq35.mkv

速度:

大小:18219k

41

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 41 ouput—hevc_nvenc-cq41.mkv

速度:

大小:18219k

50

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -cq 50 ouput—hevc_nvenc-cq50.mkv

速度:

大小:18219k

CQP(恒定量化模式)- qp

默认:0,自动,看起来不用设置。

0,速度:57x,大小:57692k

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -qp 0 ouput—hevc_nvenc-qp0.mkv

17,速度:57x,大小:22865k

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -qp 17 ouput—hevc_nvenc-qp17.mkv

22,速度:63x,大小:17183k

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -qp 22 ouput—hevc_nvenc-qp22.mkv

28,速度:57x,大小:12117k,这个和h264的23类似。

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -qp 28 ouput—hevc_nvenc-qp28.mkv

测试-preset

默认是:medium(p4),速度:57.7x,大小37532k:

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset medium ouput—hevc_nvenc-medium.mkv

slow,速度:18.2x,大小29566k:

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset slow ouput—hevc_nvenc-slow.mkv

p5,速度:46.4x,大小37127k:

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p5 ouput—hevc_nvenc-p5.mkv

p6,速度:24.4x,大小28895k:

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p6 ouput—hevc_nvenc-p6.mkv

p7,速度:21.9x,大小28489k:

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p7 ouput—hevc_nvenc-p7.mkv

混合-preset—qp 28

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p7 -qp 28 ouput—hevc_nvenc-p7-qp28.mkv

速度:21.7x

大小:9652k

混合-preset-p7-cq 28

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p7 -cq 28 ouput—hevc_nvenc-p7-cp28.mkv

速度:21.8x

大小:14697k

混合-preset-p5-cq 28

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc -preset p5 -cq 28 ouput—hevc_nvenc-p5-cp28.mkv

速度:46.7x

大小:17896k

M3Pro测试对比-新的文件110124k

默认

55.1x 5.8MB

-c:v libx264

51x 5.8MB

默认crf23

-c:v libx264 crf22

51.1x 6.2MB

-c:v libx265

8.89x 4.7MB

-c:v libx265 crf28

8.81x 4.7MB 默认是crf28

-c:v libx265 crf26

8.8x 5.4MB

-c:v libx265 crf28 slow

6.45x 4.6mb

-c:v libx265 crf28 veryslow

1.43x 4.3MB

对比人r9000p-2021 默认

1
ffmpeg -i input.mp4 -an out.mkv

34x 5596k

r9000p-2021 -c:v libx264

1
ffmpeg -i input.mp4 -an -crf 22 out-libx264-crf22.mkv

34.7x 6071k

r9000p-2021 -c:v libx265 crf28

1
ffmpeg -i input.mp4 -an -c:v libx265 -crf 28 out-libx265-crf28.mkv

10.9x 4592k

r9000p-2021 -c:v libx265 crf26

1
ffmpeg -i input.mp4 -an -c:v libx265 -crf 26 out-libx265-crf26.mkv

10.7x 5294k

r9000p-2021 -c:v libx265 crf24

1
ffmpeg -i input.mp4 -an -c:v libx265 -crf 24 out-libx265-crf24.mkv

10.7x 6144k

r9000p-2021 -c:v libx265 crf26 slow

1
ffmpeg -i input.mp4 -an -c:v libx265 -crf 26 -preset slow out-libx265-crf26-slow.mkv

6.36x 5262k

3070默认-h264_nvenc

1
ffmpeg -i input.mp4 -an -c:v h264_nvenc out-h264_nvenc.mkv

42.8x 15254k

3070-h264_nvenc-cq23

1
ffmpeg -i input.mp4 -an -c:v h264_nvenc -cq 23 out-h264_nvenc-cq23.mkv

42.7x 7816

3070-hevc_nvenc

1
ffmpeg -i input.mp4 -an -c:v hevc_nvenc out-hevc_nvenc.mkv

39.6x 18695k

3070-hevc_nvenc-cq28

1
ffmpeg -i input.mp4 -an -c:v hevc_nvenc -cq 28 out-hevc_nvenc-cq28.mkv

38.8k 6166k

总结:

5800h转码h264速度是m3pro的60%,h265则快于m3pro,但视频体积更小。

crf越小画质越好,体积越大,对视频转码速度影响不大。

同等情况下,h265体积小于h264.

使用显卡转码一定要设置-cq h264可以23 hevc(h265)设置28或者30,不然出来体积太大。

同等画质下cpu转码体积更小。

h264显卡速度略快于cpu 1.3x,h265显卡速度是cpu 4倍以上。推荐使用显卡。

其他测试

测试不同容器对结果影响

mp4

1
2
3
ffmpeg -i input.mp4 -an -c:v hevc_nvenc -cq 28 out-mp41.mp4
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 28 out-mp42.mp4
ffmpeg -i input3.mp4 -an -c:v hevc_nvenc -cq 28 out-mp43.mp4

mkv

1
2
3
ffmpeg -i input.mp4 -an -c:v hevc_nvenc -cq 28 out-mkv1.mkv
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 28 out-mkv2.mkv
ffmpeg -i input3.mp4 -an -c:v hevc_nvenc -cq 28 out-mkv3.mkv

mp4: 6194k mkv:6166k

mp4: 20045k mkv:19972k

mp4: 605642k mkv:605274k

结论:视频大小主要受编码格式影响,容器类型基本没有影响,但mkv比mp4略小可以忽略不记,对于没有字幕的网课视频,通常mp4较好,可以方便剪辑。

测试帧数减半对画质影响

30

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 30 out-30.mkv

6.88x 17402k

15

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 30 -r 15 out-15.mkv

13.3x 12262k

结论:速度x2,且体积变小很多,可以考虑。

测试英伟达h265不同cq视频画质

cq 26

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 26 out-26.mkv

13.1x 23271k

cq 28

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 28 out-28.mkv

13.1x 19972k

cq 30

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 30 out-30.mkv

13.1x 17402k

cq 32

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 32 out-32.mkv

13x 15174k

cq 36

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 36 out-36.mkv

13x 11553k

cq 40

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 40 out-40.mkv

13x 8574k

cq 44

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 44 out-44.mkv

13x 6483k

cq 50

1
ffmpeg -i input2.mp4 -an -c:v hevc_nvenc -cq 50 out-50.mkv

13x 4041k

结论:随着cq变大,文件变小,画质变差,通常网课30-32都可以,40开始已经明显变差了

提取不同格式音频

默认的见过的音乐格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
352 kb/s (pcm_s16le (native) -> vorbis (libvorbis)) 44.2kbits/s
352 kb/s (pcm_s16le (native) -> aac (native)) 69 kb/s
352 kb/s (pcm_s16le (native) -> aac (libfdk_aac)) 48 kb/s



96 kb/s (wmav2 (native) -> vorbis (libvorbis)) 77.0kbits/s
96 kb/s (wmav2 (native) -> aac (native)) 128 kb/s
96 kb/s (wmav2 (native) -> aac (libfdk_aac)) 128 kb/s


320 kb/s (mp3 (mp3float) -> vorbis (libvorbis)) 106.0kbits/s
320 kb/s (mp3 (mp3float) -> aac (native)) 128 kb/s
320 kb/s (mp3 (mp3float) -> aac (libfdk_aac)) 128 kb/s



1744 kb/s (flac (native) -> vorbis (libvorbis)) 114.2kbits/s
1744 kb/s (flac (native) -> aac (native)) 128 kb/s
1744 kb/s (flac (native) -> aac (libfdk_aac)) 139 kb/s

m4a默认

aac (native) bitrate= 77.5kbits/s speed=58.4x

bitrate= 129.3kbits/s speed=43.9x

ogg 默认:

vorbis 77.4kbits/s speed=76.4x

vorbis 44.2kbits/s speed= 231x

总结

vorbis 的码率会随输入自动变化

aac好像默认是大部分情况是128kbps,也会随输入自动选择码率,但是有可能输出码率大于输入的。

aac自动选择的码率往往大于vorbis

测试-hwaccel_output_format cuda

默认的cq约为11

不加

1
ffmpeg -hwaccel cuda -i input.mp4 -an -y -c:v hevc_nvenc ouput—hevc_nvenc.mkv

速度:13.3x

大小:99222kB

1
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -an -y -c:v hevc_nvenc ouput—hevc_nvenc-cuda-hwaccel_output_format.mkv

速度:13.3x

大小:99222kB

不加-cq 28

1
ffmpeg -hwaccel cuda -i input.mp4 -an -y -c:v hevc_nvenc -cq 28 ouput—hevc_nvenc.mkv

速度:13x

大小:50594k

加-cq 28

1
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -an -y -c:v hevc_nvenc -cq 28 ouput—hevc_nvenc-cuda-hwaccel_output_format.mkv

速度:13.1x

大小:50594k

结论:hwaccel_output_format 似乎对结果没有影响。

测试和i5-7300对比5800h

1
ffmpeg -i input.avi -an -y -c:v libx264 ouput—libx264.mkv

7300:

速度:10.5x

大小:19552k

5800h:

速度:25.2x

大小:20353k

结论:5800h是7300的2.5倍

测试1050laptop和3070laptop速度对比

1
ffmpeg -i input.avi -an -y -c:v hevc_nvenc ouput—hevc_nvenc.mkv

1050laptop无法运行

结论:

7300核显速度测试

1
ffmpeg -i input.avi -an -y -c:v h264_qsv ouput—h264_qsv.mkv

大小:18766k

速度:26.7x

结论:7300核显还是很快的。

测试显卡解码,显卡转码

1
2
3
4
5
6
#cpu解码
ffmpeg -i input.avi -an -y -c:v h264_nvenc ouput—h264_nvenc-cpu.mkv
#cuda解码 cuvid
ffmpeg -hwaccel cuda -i input.avi -an -y -c:v h264_nvenc ouput—h264_nvenc-cuda.mkv
#纯显卡 解码后不回到内存。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.avi -an -y -c:v h264_nvenc ouput—h264_nvenc-cuda-pure.mkv

cpu解码:

速度:56.4x

大小:34407

cuda解码:

速度:62.3x

大小:34407

纯显卡 解码后不回到内存。

速度:62.9x

大小:34407

结论:对大小没有影响,对速度影响不大,纯显卡可以节省一点cpu,推荐使用cuda/nvdec/cpu。(速度之间差距都是误差)

测试cpu核心影响

1
2
3
4
5
#多线程
ffmpeg -i input.avi -an -y ouput.mkv

#单线程
ffmpeg -i input.avi -an -y -threads 1 ouput2.mkv

多线程:

速度25.8x

单线程:

速度5.84x

大小:单线程略小。

结论:不要修改线程数量,使用默认即可。

使用相同命令重复转码

1
2
3
4
5
ffmpeg  -y  -i input.avi -vcodec h264_nvenc  output.mp4

ffmpeg -y -i output.mp4 -vcodec h264_nvenc output2.mp4

ffmpeg -y -i output2.mp4 -vcodec h264_nvenc output3.mp4

现象:第二次转码速度变快,但是视频体积没有显著缩小(略微缩小),基本没有意义,所有不要这样做,虽然对结果影响不大。

使用最新的ffmpeg然后用nvidia显卡时Driver does not support the required nvenc API version. Required: 12.2 Found: 12.1。

解决:使用不那么新的ffmpeg编译版本。如从7.0.1转到6.1.1。推荐使用稳定版本包括libfdk_aac。

不同容器装相同东西结果

1
2
3
ffmpeg -i input.avi -c:v h264_nvenc -an ouput.mkv

ffmpeg -i input.avi -c:v h264_nvenc -an ouput.mp4

ouput.mkv 34407k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Input #0, avi, from 'input.avi':
Duration: 00:15:09.73, start: 0.000000, bitrate: 884 kb/s
Stream #0:0: Video: tscc (tscc / 0x63637374), bgr0, 1920x1040, 526 kb/s, 15 fps, 15 tbr, 15 tbn
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 1 channels, s16, 352 kb/s
File 'ouput.mkv' already exists. Overwrite? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (tscc (camtasia) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
Output #0, matroska, to 'ouput.mkv':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: h264 (Main) (H264 / 0x34363248), bgr0(progressive), 1920x1040, q=2-31, 2000 kb/s, 15 fps, 1k tbn
Metadata:
encoder : Lavc60.31.102 h264_nvenc
Side data:
cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A
frame= 6353 fps=392 q=10.0 Lsize= 34406kB time=00:15:09.46 bitrate= 309.9kbits/s speed=56.2x

output.mp4 47148k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Input #0, avi, from 'input.avi':
Duration: 00:15:09.73, start: 0.000000, bitrate: 884 kb/s
Stream #0:0: Video: tscc (tscc / 0x63637374), bgr0, 1920x1040, 526 kb/s, 15 fps, 15 tbr, 15 tbn
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 1 channels, s16, 352 kb/s
File 'ouput.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (tscc (camtasia) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
Output #0, mp4, to 'ouput.mp4':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), bgr0(progressive), 1920x1040, q=2-31, 2000 kb/s, 15 fps, 15360 tbn
Metadata:
encoder : Lavc60.31.102 h264_nvenc
Side data:
cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A
[vost#0:0/h264_nvenc @ 0000028fb3425680] More than 1000 frames duplicated0kbits/s dup=980 drop=0 speed=26.5x
[out#0/mp4 @ 0000028fb468bec0] video:46987kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.343352%
frame=13651 fps=445 q=10.0 Lsize= 47148kB time=00:15:09.80 bitrate= 424.5kbits/s dup=7298 drop=0 speed=29.7x

结论:

MKV 格式的输出output.mkv)在编码过程中没有产生重复帧,文件大小较小,比特率也较低。

MP4 格式的输出output.mp4)在编码过程中产生了大量重复帧,导致文件大小和比特率相对较高。

MKV 更加灵活和宽容时间戳的误差,因此在处理过程中没有产生重复帧,而 MP4 格式可能对时间戳要求更严格,导致在处理过程中产生了大量重复帧。所以更推荐使用mkv格式

下载

很多二进制版本

FFmpeg Binaries (animmouse.com)

不稳定版本包括libfdk_aac

Release 2024-07-14 12:32 4e0e872 · AnimMouse/ffmpeg-autobuild (github.com)

稳定版本包括libfdk_aac

AnimMouse/ffmpeg-stable-autobuild: Automated stable nonfree builds of FFmpeg for Windows using GitHub Actions

官方构建

BtbN/FFmpeg-Builds (github.com)

ffplay命令播放媒体

播放本地文件

ffplay -window_title “test time” -ss 2 -t 10 -autoexit test.mp4

ffplay buweishui.mp3

播放网络流

ffplay -window_title “rtmp stream” rtmp://202.69.69.180:443/webcast/bshdlive-pc

强制解码器

mpeg4解码器:ffplay -vcodec mpeg4 test.mp4

h264解码器:ffplay -vcodec h264 test.mp4

禁用音频或视频

禁用音频:ffplay test.mp4 -an

禁用视频:ffplay test.mp4 -vn

播放YUV数据

ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv

播放RGB数据

ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb

ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb

播放PCM数据

ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

-ar set audio sampling rate (in Hz) (from 0 to INT_MAX) (default 0)

-ac set number of audio channels (from 0 to INT_MAX) (default 0)

ffplay简单过滤器

视频旋转

ffplay -i test.mp4 -vf transpose=1

视频反转

ffplay test.mp4 -vf hflip

ffplay test.mp4 -vf vflip

视频旋转和反转

ffplay test.mp4 -vf hflip,transpose=1

音频变速播放

ffplay -i test.mp4 -af atempo=2

视频变速播放

ffplay -i test.mp4 -vf setpts=PTS/2

音视频同时变速

ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2

ffmpeg命令参数说明

img

ffmpeg命令 提取音视频数据

保留封装格式

ffmpeg -i test.mp4 -acodec copy -vn audio.mp4

ffmpeg -i test.mp4 -vcodec copy -an video.mp4

提取视频

保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264

强制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264

提取音频

保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac

强制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

ffmpeg命令提取像素格式和PCM数据

ffmpeg命令提取像素格式

提取YUV

提取3秒数据,分辨率和源视频一致

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv

提取3秒数据,分辨率转为320x240

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

提取RGB

提取3秒数据,分辨率转为320x240

ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

RGB和YUV之间的转换

ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb

提取PCM

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm

ffmpeg命令转封装

ffmpeg命令转封装

保持编码格式:

ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts

ffmpeg -i test.mp4 -codec copy test_copy2.ts

改变编码格式:

ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

修改帧率:

ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (错误命令)

ffmpeg -i test.mp4 -r 15 output2.mp4

修改视频码率:

ffmpeg -i test.mp4 -b 400k output_b.mkv (此时音频也被重新编码)

修改视频码率:

ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

修改音频码率:

ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

如果不想重新编码video,需要加上-vcodec copy

修改音视频码率:

ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

修改视频分辨率:

ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

修改音频采样率:

ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

ffmpeg命令过滤器

生成测试文件

找三个不同的视频每个视频截取10秒内容

ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4

ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4

如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac

将上述1.mp4/2.mp4/3.mp4转成ts格式

ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts

ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts

ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

转成flv格式

ffmpeg -i 1.mp4 -codec copy 1.flv

ffmpeg -i 2.mp4 -codec copy 2.flv

ffmpeg -i 3.mp4 -codec copy 3.flv

分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter处理

开始拼接文件

以MP4格式进行拼接

方法1:ffmpeg -i “concat:1.mp4|2.mp4|3.mp4” -codec copy out_mp4.mp4

方法2:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4

以TS格式进行拼接

方法1:ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out_ts.mp4

方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4

以FLV格式进行拼接

方法1:ffmpeg -i “concat:1.flv|2.flv|3.flv” -codec copy out_flv.mp4

方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

方法1只适用部分封装格式,比如TS

建议:

(1)使用方法2进行拼接

(2)转成TS格式再进行拼接

测试不同编码拼接

修改音频编码

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

ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out1.mp4 结果第二段没有声音

修改音频采样率

ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts

ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out2.mp4 第二段播放异常

修改视频编码格式

ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts

ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out3.mp4

修改视频分辨率

ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts

ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out4.mp4

注意:

把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格式,比如MP4

视频分辨率可以不同,但是编码格式需要统一

音频编码格式需要统一,音频参数(采样率/声道等)也需要统一

fmpeg命令图片与视频互转

截取一张图片

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp

-i 输入

-y 覆盖

-f 格式 image2 一种格式

-ss 起始值

-vframes 帧 如果大于1 那么 输出加%03d test%03d.jpg

-s 格式大小size

转换视频为图片(每帧一张图):  

ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

图片转换为视频:  

ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

从视频中生成GIF图片

ffmpeg -i test.mp4 -t 5 -r 1 image1.gif

ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif

将 GIF 转化为 视频

ffmpeg -f gif -i image2.gif image2.mp4

参考

ffmpeg可支持的编码器、解码器、封装格式、网络协议_Ternence_Hsu的博客-CSDN博客

FFMPEG命令入门到提高,一篇文章就够了 - 知乎 (zhihu.com)

[FFmpeg] Windows下使用ffmpeg为视频添加字幕_SunrayME的专栏-CSDN博客_ffmpeg添加字幕

使用 FFmpeg 为视频添加字幕 - Hello World (jdjx.run)

FFmpeg 教程 — FFmpeg 教程 文档 (wklchris.github.io)

NVIDIA NVENC编码器 OBS 指南-腾讯云开发者社区-腾讯云 (tencent.com)

NVIDIA FFmpeg Transcoding Guide | NVIDIA Technical Blog

rigaya/NVEnc: NVENCによる高速エンコードの性能実験 (github.com)

https://docs.nvidia.com/video-technologies/video-codec-sdk/11.1/ffmpeg-with-nvidia-gpu/index.html