参考自:https://www.cnblogs.com/dwdxdy/p/3240167.html
https://blog.youkuaiyun.com/eydwyz/article/details/109055469
【FFmpeg】FFmpeg常用基本命令
1.分离视频音频流
ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流
2.视频解复用
ffmpeg -i test.mp4 -vcodec copy -an -f m4v test.264
ffmpeg -i test.avi -vcodec copy -an -f m4v test.264
从mp4文件中提取视频流到h264和h265文件中:
ffmpeg -i 2018.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 tmp.264
ffmpeg -i 2018.mp4 -codec copy -bsf: hevc_mp4toannexb -f hevc tmp.265
注释:
-i 2018.mp4: 是输入的MP4文件
-codec copy: 从mp4中拷贝
-bsf: h264_mp4toannexb: 从mp4拷贝到annexB封装
-bsf: hevc_mp4toannexb: 从mp4拷贝到annexB封装
-f h264: 采用h264格式
-f hevc: 采用hevc格式
tmp.264: 输出的文件
tmp.265: 输出的文件
3.视频转码
ffmpeg -i test.mp4 -vcodec h264 -s 352*278 -an -f m4v test.264 //转码为码流原始文件
ffmpeg -i test.mp4 -vcodec h264 -bf 0 -g 25 -s 352*278 -an -f m4v test.264 //转码为码流原始文件
ffmpeg -i test.avi -vcodec mpeg4 -vtag xvid -qsame test_xvid.avi //转码为封装文件
//-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制
4.视频封装
ffmpeg -i video_file -i audio_file -vcodec copy -acodec copy output_file
5.视频剪切
ffmpeg -i test.avi -r 1 -f image2 image-%3d.jpeg //提取图片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频
//-r 提取图像的频率,-ss 开始时间,-t 持续时间
6.视频录制
ffmpeg -i rtsp://192.168.3.205:5555/test -vcodec copy out.avi
7. 视频解码为YUV序列
如下图所示,工程目录下有video.mp4这个MP4文件,下面我们介绍把它转为YUV文件的方法。

在命令提示符cmd.exe中进入当前工程所在目录(ffmpeg.exe和video.mp4所在目录),然后输入命令:
ffmpeg -i video.mp4 -ss 00:00:20 -t 10 -s 640x272 -pix_fmt yuv420p video1.yuv
ffmpeg.exe -i 0009-20170515_142251.ts -frames 1 -r 1 -f rawvideo image.yuv
该命令的作用是把所在路径下的video.mp4文件从第20秒开始,往下10秒,即20~30秒之间,截取这段时间的视频,把它转换为帧宽度为640,帧高度为272,像素格式为yuv420p的YUV文件:video1.yuv。
注:
-i 表示设定输入流
-ss 表示开始时间
-t 表示共要多少时间
-s 设定画面的宽与高
-pix_fmt 设定的像素格式
执行该命令后,我们发现工程目录下会生成video1.yuv文件,如上图所示。
8.YUV序列播放
ffplay -f rawvideo -video_size 1920x1080 -i input.yuv
ffplay -video_size 640x272 -i video1.yuv
注:
-f 播放的文件格式
-i 表示指定的输入文件
-video_size 播放的视频文件的帧宽度和帧高度
9.YUV序列转AVI
ffmpeg -s w*h -pix_fmt yuv420p -i input.yuv -vcodec mpeg4 output.avi
常用参数说明:
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
10. 单图像jpg转yuv
倘若当前目录下有个jpg文件,名为000001_353x500.jpg,可用如下语句将其转换为yuv格式,并将新yuv文件命名为000001_353x500.yuv.
ffmpeg -pix_fmt yuv420p -s 353x500 -i 000001_353x500.jpg 000001_353x500.yuv
这里,-pix_fmt表示pixel format,指定像素格式,这里指定为yuv420p格式;
-s表示size,后以宽x高格式指定图像的宽高大小;
-i表示input,后接输入文件的url;
最后,指定output输出文件的url.
11. 单图像yuv转jpg
倘若当前目录下有个yuv文件,名为000001_353x500.yuv,可用如下命令将其转换为jpg格式,并将新jpg文件命名为000001_353x500.jpg.
ffmpeg -s 353x500 -i 000001.yuv 000001.jpg -y
这里,-s表示size,后接了输入yuv文件的图像大小;
-i表示input文件的url;
然后接output输出文件的url;
最后,-y是一个通用选项,表示当前目录下倘若存在相同输出文件名,则直接替代它。
如果不加-y,遇到输出url已存在一个相同输出文件名文件,命令行会中断当前程序,询问是否覆盖文件:
File '000001_353x500.yuv' already exists. Overwrite? [y/N]
y覆盖,N不覆盖。
12. YUV数据转换
ffmpeg.exe -y -pix_fmt yuv420p -s 1920x1080 -r 30 -i ldr_420.yuv -f rawvideo -pix_fmt yuv444p -s 1920x1080 -r 30 ldr_444.yuv
ffmpeg.exe -i 0009-20170515_142251.ts -frames 1 -r 1 -f rawvideo -pix_fmt nv21 -s 1920x1080 -r 1 1920_1080_NV21.yuv
ffmpeg.exe -i test.mp4 -ss 0:0:10 -frames 1 -r 1 -f rawvideo -pix_fmt nv21 -r 1 1280_720_NV21_2.yuv
常用参数说明:
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
556





