ffmpeg 初探【基本概念】

ffmpeg 中的工具集:

    ffmpeg :超快音视频编码器

    ffplay :简单媒体播放器

    ffprobe:简单多媒体流分析器

视频知识相关:

    媒体:我们能看到的,感知到的,能用来存放信息和传播信息的都可以叫做媒体。

    流媒体:流媒体指的是通过”网络”传输的”媒体“,它还是媒体,只不过是在网络中“流动”的媒体,比如视频流、音频流、文字流等。

    流媒体技术:包含 "网络传输技术" 和 "音视频处理技术"。

    帧率:指1秒钟时间里传输的图片的帧数。

    码率:也被成为比特率,指的是每秒显示的图片数进行压缩后的数据量。

    像素:图片由像素构成,一个像素是一个正方形或者长方形。没有固定大小,取决于硬件支持显示多少像素,不同显示屏显示的一个像素大小是不同的。但是相同点是:对应的像素点,它们的颜色是相同的。

    分辨率:指纵横向上的像素点数,单位是px。

概念

1、容器【视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。】

2、编码格式【视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。】
 常见视频编码格式:H264、H265
 常见音频编码格式:MP3、ACC

3、编码器【编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。】
 常见视频编码器:
	libx264:最流行的开源 H.264 编码器
	NVENC:基于 NVIDIA GPU 的 H.264 编码器
	libx265:开源的 HEVC 编码器
	libvpx:谷歌的 VP8 和 VP9 编码器
	libaom:AV1 编码器
	
 常见音频编码器:
	libfdk-aac
	aac

FFMPEG的使用格式

    ffmpeg {1} {2} -i {3} {4} {5}
解释说明:
1、全局参数
2、输入文件参数
3、输入文件
4、输出文件参数
5、输出文件

注意:如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。

常用命令行参数

-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。

常见用法

    1、查看文件信息
ffmpeg -i fileName
或者ffmpeg -i fileName -hide_banner 只显示元信息

2、转换编码格式
ffmpeg -i hair.mp4 hair.avi

3、提取音频
ffmpeg -i hair.mp4 -vn hair.mp3

4、视频每一帧转换为图片[%03d--表示用三位数值表示,从001开始]

ffmpeg -i qiu.mp4 -vf fps=1  image-%03d.jpg


5、图片合成视频
ffmpeg -f image2  -i image-%03d.jpg out.mp4


6、多个视频片段拼接合成新的视频
ffmpeg -f concat -i fileList.txt  out.mp4

其中 fileList.txt 中的内容为 
file 'v1.mp4'
file 'v2.mp4'

实际应用

1、压缩视频

ffmpeg -i hiar.mp4 -fs 10MB -b:v 1M video.mp4  # 指定尺寸压缩
ffmpeg -i hiar.mp4 -r 25 hiar-25.mp4           # 指定帧速度,默认为25帧每秒

2、按照时间间隔[-segment_time ]切片

ffmpeg -i hiar.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list hiar.m3u8 -segment_time 5 hiar%03d.ts

ffmpeg -i four.mp4 -f segment -segment_list four.m3u8  -segment_time 10 -c copy -bsf:v h264_mp4toannexb -map 0 four-%3d.ts

3、获取封面图[从第二秒开始,提取1帧作为视频封面],-y直接覆盖

ffmpeg -i hiar.mp4 -ss 00:00:02 -y -f image2 -frames 1 hiar_cover.jpg

4、裁剪音频

ffmpeg -ss 00:00:00  -i "I-DO.mp3"  -t 00:03:12 I-DO-0.mp3

5、多个音频合并

  ffmpeg -i "concat:I-DO-0.mp3|I-DO-1.mp3|I-DO-2.mp3" -acodec copy wedding.mp3

6、转换视频编码(将原来编码为MPEG4格式的转换为h264编码)

   ffmpeg  -i four-season-20.mp4  -vcodec h264 four-season-20-h264.mp4

7、本地视频循环推流

    ffmpeg -re -stream_loop -1 -i wedding.mp4 -vcodec copy -acodec aac -f flv rtmp://192.168.1.63:1935/live/wedding?secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc

8、大视频文件切分
若一个1小时30分钟的视频需要分成 3 段,具体分割位置为视频中的 Start~00:30:00,00:31:00~01:00:00,01:01:00~End

    ffmpeg -ss 00:00:00 -i input.mp4 -c copy -t  00:29:59 output_part1.mp4   #  Start~00:30:00
    ffmpeg -ss 00:31:00 -i input.mp4 -c copy -t  00:29:59 output_part2.mp4   #  00:31:00~01:00:00
    ffmpeg -ss 01:01:00 -i input.mp4 -c copy -t  00:29:59 output_part3.mp4   #  01:01:01~End

posted @ 2022-07-12 17:37  XuTingYin  阅读(259)  评论(0)    收藏  举报