音视频ffmpeg命令大全


ffmpeg信息查询命令

命令参数 内容
-version 显示版本
-buildconf 显示编译配置
-formats 显示可用格式(muxers+demuxers)
-muxers 显示可用复用器
-demuxers 显示可用解复用器
-codecs 显示可用编解码器(decoders+encoders)
-decoders 显示可用解码器
-encoders 显示可用编码器
-bsfs 显示可用比特率filter
-protocols 显示可用的协议
-filters 显示可用的过滤器
-pix_fmts 显示可用的像素格式
-layouts 显示标准声道名称
-sample_fmts 显示可用的音频采样格式
-colors 显示可用的颜色名称

ffmpeg 控制命令

主要参数:

◼ -i 设定输入流

◼ -f 设定输出格式(format)

◼ -ss 开始时间

◼ -t 时间长度

◼ -y 覆盖

音频参数:

◼ -aframes 设置要输出的音频帧数

◼ -b:a 音频码率

◼ -ar 设定采样率

◼ -ac 设定声音的Channel数

◼ -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。

◼ -an 不处理音频

◼ -af 音频过滤器

视频参数:

◼ -vframes 设置要输出的视频帧数

◼ -b 设定视频码率

◼ -b:v 视频码率

◼ -r 设定帧速率

◼ -s 设定画面的宽与高

◼ -vn 不处理视频

◼ -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

◼ -vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。

◼ -vf 视频过滤器

常见的使用场景

使用ffmpeg 提取音视频

//提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p output.yuv
-i 指定文件
-an 不处理音频
-c:v 指定编码方式 rawvideo
-pix_fmt 指定像素格式 yuv420p

//指定分辨率播放原始数据
ffplay -s 638x358 out.yuv

//提取PCM音频数据
ffmpeg -i input.mp4 -vn -ar 44100 -ac2 -f s16le output.pcm
-i   指定文件
-vn  不要视频
-ar 44100  指定音频采样率
-ac2 双声道
-f  指定音频数据的存储格式为s16le signed 16bit littleendile

//播放音频
ffplay -ar 44100 -ac 2 -f s16le out.pcm

视频裁剪/合并命令
//裁剪视频
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 output.ts
-i  输入文件
-ss 开始时间
-t  裁剪时长

//拼接视频
ffmpeg -f concat -i inputs.txt out.flv
-f concat 指定拼接模式
-i 指定拼接文件 inputs.txt存储文件列表
out.flv 指定输出结果
inputs.txt 内容为 'file filename' 格式
//file '1.ts'
//file '2.ts'

保留封装格式
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4 (这里的copy就是代表使用原本的格式)

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 命令提取像素格式

提取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

使用ffmpeg 提取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 转化封装格式

保持编码格式:
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 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 合并视频

将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

以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

使用ffmpeg 将图像与视频互转

//视频转图片
ffmpeg -i input.flv -r 1 -f image2 image-%4d.jpeg
-i 指定文件
-r 指定转出图片的帧率
-f 将输入文件转成什么格式的
image-%4d.jepg(%4d四个数字)

//图片转视频
ffmpeg -i image-%4d.jpeg  output.mp4

截取一张图片
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

音视频录制命令

window平台下的命令

//Windos平台下的使用方法
//windows下不能使用avfoundation来执行操作
//需要使用dshow来操作 dshow需要提前安装,下载地址如下:
//链接:https://pan.baidu.com/s/1vwtHNjYS23jrLOUC4zGh-Q
//提取码:2y9m

//查看支持的设备列表信息
ffmpeg -list_devices true -f dshow -i dummy

//录制桌面视频
ffmpeg -f dshow -i video="screen-capture-recorder" screen_capture.mp4
ffplay screen_capture.mp4
//这里发现一个问题,直接用windows自带播放器播放会出现播放失败问题
//用ffplay播放正常,可能是编码格式的问题

//录制音频(设备列表可以通过指令查询)
ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" audio-out.aac
ffplay audio-out.aac

//同时录制音视频
ffmpeg -f dshow -i video="screen-capture-recorder":audio="麦克风 (Realtek(R) Audio)" full-out.mp4
ffplay full-out.mp4
//这里采用windows自带的播放器也会播放失败

//查看视频/音频录制支持的参数列表
ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
ffmpeg -f dshow -list_options true -i audio="麦克风 (Realtek(R) Audio)"

//指定具体的视频录制参数
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -pixel_format yuv420p -i
video="screen-capture-recorder" output.mp4
-f dshow 使用dshow录制
-video_size 采用的分辨率是1920x1080
-framerate 30 采用的帧率是30
-pixel_format yuv420p 像素格式为yuv420p
-i video="screen-capture-recorder"指定录制设备

Linux平台下的指令

//首先安装x11grab,安装方法自行检索
//录制视频
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0,0.0 output.mp4
-video_size 1920x1080 分辨率是1920*1080
-framerate 25 帧率是25
-i 0.0,0.0从屏幕左上角开始录制
ffplay output.mp4

//同时录制音频和视频
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0,0.0 -f pulse -ac 2 -i default output.mkv
-f pulse 使用pulse录制音频
//还可以指定alsa 录制音频
ffplay output.mkv

Mac平台下的指令

//MAC平台下的使用方法
//avfoundation是MAC下的采集源,windows下不可以使用
//录制屏幕
ffmpeg -f avfoundation -i 1 -r 30 raw_output.yuv    
-f avfoundation:指定使用avfoundation采集数据源
-i:指定从哪儿采集数据 索引1代表着屏幕
-r:指定录制的帧率
raw_output.yuv 指定原始数据输出的文件名称

//原始数据必须指定数据格式才能播放
ffplay -s 1920*1080 -pix_fmt uyvy422 raw_output.yuv
-s:指定分辨率是1920*1080
-pix_fmt:指定数据格式为uyvy422
raw_output.yuv:输入数据的文件名称

//查询支持的设置列表
ffmpeg -f avfoundtaion -list_devices true -i ""

//录制音频
ffmpeg -f avfoundation -i :0 out_audio.wav
-i :0 指定录制的音频输入设备
out_audio.wav :指定输出的音频文件名称

//播放音频
ffplay out_audio.wav

提取音视频命令
//多媒体格式转换
ffmpeg -i input.mp4 -vcodec copy -acodec copy output.flv
-i:输入文件
-vcodec copy:视频编码处理方式
-acodec copy:音频编码处理方式

//抽取视频信息
ffmpeg -i input.mp4  -an -vcodec copy output.h264
ffplay out.h264

//抽取音频信息
ffmpeg -i input.mp4 -acodec copy -vn output.aac
ffplay out.aac

推流/拉流命令

//直播推流
ffmpeg -re -i output.mp4 -c copy -f flv rtmp://server/live/streamName
-re 保持帧率
-i out.mp4 指定文件
-a 音频 -v 视频 -c 音视频
-f 推出的格式为 flv

//直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
-i 指定流地址
-c copy 音视频流直接拷贝不编码
dump.flv 指定本地文件
//拉取的什么格式存储成什么格式

裁剪视频命令

//视频裁剪
fmpeg -i input.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy output.mp4
crop格式:crop=out_w:out_h:x:y
-i 指定文件
-vf crop 指定视频滤镜,crop 裁剪滤镜
in_w-200宽度减少200
in_h-200高度减少200
-c:v libx264视频编码器为libx264
-c:a copy 不对音频进行处理

//播放视频
ffplay output.mp4
  1. 视频淡入淡出

    # 设置5.5秒的黑场,然后开始0.5秒的淡入:
    ffmpeg -i 23.2.mp4 -vf fade=t=in:st=5.5:d=0.5 test_a.mp3
  2. 音频渐强渐弱

    # 时间相关参考上条
    ffmpeg -i 23.2.mp4 -filter_complex afade=t=in:st=0:d=2 test_a.mp3
  3. 音轨替换

    ffmpeg -i 23.2.mp4 -i test_a.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 test23.2.mp4
  4. 画面裁剪

    # crop=目标宽:目标高:目标视频左上角在原视频中横坐标:目标视频左上角在原视频中纵坐标
    ffmpeg -i inputname.mp4 -vf crop=1920:1200:0:0 -threads 5 -preset ultrafast -strict -2 outputname.mp4
  5. 添加硬字幕

    ffmpeg -i test_1280x720_3.mkv -vf subtitles=test_1280x720_3.srt out.mp4
  6. 改变视频对比度和亮度

    ffmpeg.exe -i record.mp4 -vf eq=contrast=0.9:brightness=-0.1 output.mp4
  7. 指定位率

    ffmpeg -i 23.mp4 -b:v 8000k -b:a 192k ober.mp4
  8. 解决问题:”Too many packets buffered for output stream 0:1.”

    ffmpeg -i in.mp4 -max_muxing_queue_size 1024 out.mp4
  9. 画面翻转

    ffmpeg -i input.mp4 -vf "hflip" output.mp4
    ffmpeg -i input.mp4 -vf "vflip" output.mp4
  10. 在视频中插入图片

    # 其中scale是图片大小,overlay是左上角坐标
    ffmpeg -i 04_演示视频.mp4 -strict -2 -vf "movie=black.png,scale=85:20[mask1];[in][mask1]overlay=95:430:enable='between (t,21,28)'" -b:v 300k -acodec copy out.mp4
  11. 在视频中插入多张图片

    ffmpeg -i input.mp4  -strict -2 -vf "movie=1.jpg,scale=456:280[mask1];movie=2.jpg,scale=456:280[mask2];movie=3.jpg,scale=456:280[mask3];[in][mask1] overlay=400:200:enable='between (t,0,12)'[top];[top][mask2] overlay=400:200:enable='between (t,12,32)'[middle];[middle][mask3] overlay=400:200:enable='between (t,32,62)'[out]" output.mp4
  12. 图片转视频

    ffmpeg -ss 0 -t 57 -f lavfi -i color=c=0x000000:s=1280x720:r=5 -i 01.png -filter_complex  "[1:v]scale=1280:720[v1];[0:v][v1]overlay=0:0[outv]"  -map [outv] -c:v libx264 01.mp4
    

ffmpeg -r 25 -minrate 25 -loop 1 -i op_084.png -pix_fmt yuv420p -vcodec libx264 -r:v 25 -minrate:v 25 -preset medium -crf 30 -s 1104x828 -vframes 250 -r 25 -minrate 25 -t 3 op_084_test.mp4


13. 无音频的视频中添加音频
```bash
ffmpeg -i 01.mp4 -i 01.mp3 -c:v copy -c:a copy -strict experimental 01_a.mp4
  1. 连接视频

    ffmpeg -f concat -safe 0 -i filelist.txt -acodec copy -vcodec copy output.mp4
    # filelist.txt 内容类似以下:
    #  file '11.mp4'
    #  file '22.mp4'
  2. 改变音频速度

    ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
  3. 视频转gif,没有明显噪点

    # 注:生成gif后再压缩极为麻烦,如有压缩大小需求,最好对原视频文件做等比缩小、指定更低帧率等操作,再用以下命令转为gif
    # 来源如下:
    ### 版权声明:本文为CSDN博主「没有技术的菜逼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ### 原文链接:https://blog.csdn.net/qq_40212938/article/details/113060064
    

ffmpeg -i “test.mp4” -s 642x358 -vf “[in]scale=642x358,split[split1][split2];[split1]palettegen=stats_mode=single[pal];[split2][pal]paletteuse=new=1” test.gif

```

截取音频:
ffmpeg -i input.wav -ss 00:00:05 -t 00:00:10 output.wav

-ss为开始时间 -t为持续时间

查看音频格式:
ffprobe input.wav

修改音频文件采样率:
ffmpeg -i input.wav -ar 16000 output.wav

多通道变单通道
ffmpeg -i input.wav -ac 1 output.wav

转换格式
ffmpeg -i input.mp3 outpit.wav

提取一个通道并重采样
ffmpeg -i input.wav -ac 1 -ar 16000 output.wav

修改采样精度(位数)
ffmpeg -y -i input.wav -acodec pcm_f32le -ac 1 -ar 16000 -vn output.wav

转换音频格式
ffmpeg -i input.flac output.wav


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录