FFmpeg 使用

FFmpeg

下载源码

1
git clone https://git.ffmpeg.org/ffmpeg.git

编译

1
./configure --help
1
2
./configure --list-decoders
./configure --list-filters
1
./configure --prefix=/usr/local/ffmpeg/4.1.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr

ffmpeg n3.3.5-2-g9992aceefe

帮助信息

1
ffmpeg --help

常用命令

基本信息查询命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-version
-demuxers
-muxers
-devices
-codecs
-decoders
-encoders
-bsfs # 显示比特流 filter
-formats
-protocols
-filters
-pix_fmts
-sample_fmts
-layouts # 显示 channel 名称(声道)
-colors

录制命令

录视频命令

1
ffmpeg -f avfoundation -i 1 -r 30 out.yuv

-f:指定使用 avfoundation 采集数据

-i:指定从哪儿采集数据,它是一个文件索引号 ffmpeg -f avfoundation -list_devices true -i ""

-r:指定帧率(15帧)

播放

1
ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv

-s:视频大小

-pix_fmt:视频格式

录音命令

1
ffmpeg -f avfoundation -i :0 out.wav

:0 代表音频设备 [0] Built-in Microphone

1: 代表视频设备 [1] Capture screen 0

播放

1
ffplay out.wav

分解与复用

多媒体格式转换

1
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i:输入文件

-vcodec copy:视频编码处理方式

-acodec copy:音频编码处理方式

1
ffmpeg -i out.mp4 -an -vcodec copy out.h264

-an 不要音频

1
ffmpeg -i out.mp4 -acodec copy -vn out.aac

不能使用

处理原始数据

提取 YUV 数据

1
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

-pix_fmt yuv420p :像素格式

播放

1
ffplay -s 1680x1050 out.yuv

提取 PCM 数据

1
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

-ar :rate 采样率

-ac 2:channel 2

-f s16le:存储方式

播放

1
ffplay -ar 44100 -ac 2 -f s16le out.pcm

滤镜命令

加水印,去水印,画中画

解压缩 decoder,解码后的数据帧。所有的滤镜处理都是对解码后的数据帧进行处理。

1
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

-vf crop=in_w-200:in_h-200 视频滤镜,宽度减少200,高度减少200

-c:v libx264:视频编码

-c:a copy:音频

https://www.cnblogs.com/yongfengnice/p/7095846.html

裁剪与合并

音视频的裁剪与合并

裁剪

1
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts

-ss 开始裁剪

-t 10 裁剪10秒

合并

1
ffmpeg -f concat -i input.txt out.flv

-f concat:对后面的文件进行拼接

-i input.txt:内容为file filename.ts格式

file.txt

1
2
3
file '1.mp4'
file '2.mp4'
file '3.mp4'
1
ffmpeg -f concat -i file.txt -c copy output.mp4

降低分辨率

1
ffmpeg -i input.mp4 -strict -2 -vf scale=-1:720 output.mp4

720p

使用FFmpeg自带的aac音频编码要带上-strict -2

[3][使用] FFmpeg调整文件尺寸 | Sanchi

1
ffmpeg -i "input.mp4" -crf 24 -vf scale=-1:720 output.mp4

-crf 指定刷新率

图片/视频互转

视频转图片

1
ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg

-r 1:帧率,每秒钟转出一张图片

-f image2:转换的格式

%3d:三个数字

图片转视频

1
ffmpeg -i image-%3d.jpeg out.mp4

获取视频信息

1
ffmpeg -i vedio.mp4

从视频中提取音频

从视频文件中提取音频并保存为 mp3

1
2
ffmpeg -i input.mp4 -f mp3 output.mp3
ffmpeg -i 1.mp4 -vn -vcodec copy 1.m4a

如果需要可以在中间加上 -ar 44100 -ac 2 -ab 192 系数,表示采样率 44100 ,通道 2 立体声,码率 192 kb/s.

-vn 跳过视频。

重新编码

Non-monotonous DTS in output stream previous current changing to This may result in incorrect timestamps in the output file

1
ffmpeg -safe 0 -f concat -segment_time_metadata 1 -i file.txt -vf select=concatdec_select -af aselect=concatdec_select,aresample=async=1 out.mp4

比特率不一样,转码再合并

1
2
3
4
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

处理流程

输入文件-(demuxer)解复用->编码数据包-(decoder)->解码后数据帧-(encoder)->编码数据包-(muxer)复用->输出文件

参考

ffmpeg Documentation

ffmpeg合并视频文件 官方文档

video不能播放mp4的问题(一)

ffmpeg 入门笔记

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. FFmpeg
    1. 1.1. 常用命令
      1. 1.1.1. 基本信息查询命令
      2. 1.1.2. 录制命令
        1. 1.1.2.1. 录视频命令
        2. 1.1.2.2. 录音命令
      3. 1.1.3. 分解与复用
        1. 1.1.3.1. 多媒体格式转换
      4. 1.1.4. 处理原始数据
        1. 1.1.4.1. 提取 YUV 数据
        2. 1.1.4.2. 提取 PCM 数据
      5. 1.1.5. 滤镜命令
      6. 1.1.6. 裁剪与合并
        1. 1.1.6.1. 裁剪
        2. 1.1.6.2. 合并
      7. 1.1.7. 图片/视频互转
        1. 1.1.7.1. 视频转图片
        2. 1.1.7.2. 图片转视频
      8. 1.1.8. 获取视频信息
      9. 1.1.9. 从视频中提取音频
    2. 1.2. 处理流程
    3. 1.3. 参考
,