FFmpeg常用基本命令

参考自: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 不处理音频

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值