FFMEPG常见命令查询

基本参数

表格1:主要参数

参数 说明
-i 设定输入流
-f 设定输出格式(format) 高于后缀名
-ss 开始时间
-t 时间长度
codec 编解码

表格2:音频参数

参数 说明
-aframes 设置要输出的音频帧数
-f 音频帧深度
-b:a 音频码率
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,如果用copy表示原封不动的复制音频流
-an 不处理音频
-af 音频过滤器

表格3:视频参数

参数 说明
-pix_fmt 提取像素格式
-vframes 设置要输出的视频帧数
-framerate 视频帧率(更多用于与 FFmpeg 的过滤器配合使用,特别是在处理视频时需要指定帧率的场景。)
r 显式地设置输出视频的帧率
-b 设定视频码率
-s 指定视频分辨率->直接处理原始视频帧或图像序列
video_size 某些特定的 FFmpeg 过滤器或输出格式中更常见,尤其是在处理封装格式(如 MP4、AVI 等)时。
-b:v 视频码率
-vn 不处理视频
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-vcodec 设定视频编解码器,如果用copy表示原封不动的复制视频流
-vf 视频过滤器
-vbsf 用于指定视频比特流过滤器(video bitstream filter)。比特流过滤器主要用于在不进行实际解码和重新编码的情况下对视频数据流进行处理和修改。这可以包括修复损坏的数据流、重新组织数据包、或者执行其他比特流级别的操作。

实战基本参数

提取音视频

  • 保留封装格式
    • 音频
      ffmpeg -i .\test.mp4 -acodec copy -vn audio.mp4

注解:只有音频 视频显示波形

    • 视频
      ffmpeg -i .\test.mp4 -vcodec copy -an video.mp4

无声音

  • 提取视频()

第一要查看输入视频的编解码协议

第二要查看编解码协议的编解码器
ffmpeg -codecs |findstr h264(windows 系统)一般最右边括号里面选一个就行 一般第一个
ffmpeg -codecs |grep h264(linuxs系统)

    • 保留格式(查看编码)
      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_copy.aac
    • 强制格式
      ffmpeg -i .\test.mp4 -acodec aac -vn test.aac

封装命令

  • 保持编码格式
    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:v 400k output_bvflv
  • 修改音频码率:
    ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
  • 修改音视频码率:
    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

一个视频质量由码率 分辨 帧数决定 音频为 音频采样率(一般由决定音频帧) 音频码率 音频深度(分辨率) 通道数

提取和播放数据

提取YUV
  • 提取3秒数据,分辨率转为320x240
    ffmpeg -i test.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
提取PCM

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_f16le.pcm

RGB和YUV之间的转换

ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb

播放YUV数据

ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv

播放RGB数据

ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb

播放PCM数据

ffplay -ar 48000 -ac 2 -f s32le 48000_2_s32le.pcm

过滤器参数

裁剪和拼接 (推荐用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

  • 拼接(用字符串)
    (1)ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4
    (2)ffmpeg -f concat -i list.txt -codec copy out_ts2.mp4
    这个txt文件为

file '1.ts'

file '2.ts'

file '3.ts'

对于音视频参数不一样的情况

视频分辨率可以不同,但是编码格式需要统一。

音频编码格式需要统一,音频参数(采样率/声道等)也需要统一。

图片和视频
  • 单独帧情况(关于动图 后缀名你设置)
    ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

-i:指定输入文件。

-y:覆盖输出文件。

-f image2:指定输出格式为图片。

-ss:指定起始时间(00:00:02 表示从视频的第2秒开始)。

-vframes 1:指定截取1帧。

-s:指定输出图片的分辨率(640x360)

    • (关于动图 后缀名你设置)
      你得额外指定-t -r 后缀名为.git
      ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 test.gif
  • 多帧
    ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

-t 5:指定处理视频的时长(5秒)(持续时长)。不指定 就是整个视频

-s 640x360:指定输出图片的分辨率。

-r 15:指定帧率(每秒15帧)。

frame%03d.jpg:指定输出文件名格式,%03d 表示帧编号,从001开始 C语言的风格

  • 多帧转为图片
    ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

-f image2:指定输入格式为图片序列。

图片裁剪

基本语法:crop=ow:oh:x:y :keep_aspect

ow(output width):指定输出视频的宽度。

oh(output height):指定输出视频的高度。

x:裁剪区域左上角的 X 坐标(相对于输入视频的左上角)。

y:裁剪区域左上角的 Y 坐标(相对于输入视频的左上角)。

keep_aspect 是一个可选参数,用于保持原始视频的宽高比。
ffmpeg -i input.mp4 -filter:v "crop=640:360:640:360" output.mp4

这个命令会从原始视频的中间位置(640, 360)开始裁剪出一个 640x360 的视频区域。

文字水印
  • ffmpeg -i input.mp4 -vf "drawtext=fontsize=100/fontfile=FreeSerif.ttf/text='hello world'/fontcolor=green:box=1:boxcolor=yellow"

-i input.mp4:指定输入文件是 input.mp4。

-vf:指定对视频帧应用的视频滤镜(video filter)。

drawtext=fontsize=100:设置文本水印的字体大小为 100。

fontfile=FreeSerif.ttf:指定用于文本水印的字体文件是 FreeSerif.ttf。这个字体文件需要在你的系统中可用,或者提供它的完整路径。

text='hello world':设置文本水印的内容为 'hello world'。

fontcolor=green:设置文本水印的颜色为绿色。

box=1:指定为文本水印绘制一个边框。

boxcolor=yellow:设置文本水印边框的颜色为黄色。

图片水印

ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark] overlay=10:10[out]" output.mp4

-i input.mp4:指定输入文件为 input.mp4。

-vf:指定对视频帧应用的视频滤镜链。

movie=logo.png[watermark]:加载名为 logo.png 的图片文件,并将其引用名称设置为 watermark。

in\]\[watermark\] overlay=10:10\[out\]: \[in\]:表示输入视频流。 \[watermark\]:表示加载的图片水印。 overlay:指定将水印叠加到视频流上。 =10:10:设置水印的起始位置,x 坐标为 10,y 坐标为 10。 \[out\]:指定叠加后的视频流名称。

ffplay -i input.mp4 -vf " movie=logo.png[watermark];[in][watermark]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*0.7[out]"

movie=logo.png[watermark]:加载 logo.png 图片文件,并将其引用名称设置为 watermark。

in\]\[watermark\]overlay=x=mod(50*t,main_w):y=abs(sin(t))*0.7\[out\]: in:表示输入视频流。 watermark:表示上面加载的图片水印。 overlay:将水印图片叠加到视频流上。 x=mod(50*t,main_w):设置水印的 x 坐标,使其在视频宽度内按时间 t (以秒为单位)进行周期性移动。mod(50* t,main_w) 表示水印每 50 秒移动一个视频宽度的距离。 y=abs(sin(t))\*0.7:设置水印的 y 坐标,使其根据正弦函数 sin(t) 的值在视频高度的 0.7 倍范围内上下波动。 out:指定叠加后的输出视频流。

  • 画中画
    ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20[out]"

-i input.mp4:指定输入文件是 input.mp4。

-vf:指定对视频帧应用的视频滤镜链(video filtergraph)。

movie=sub_320x240.mp4[sub]:加载名为 sub_320x240.mp4 的视频文件,并将其引用名称设置为 sub。这个子视频将被用作水印或覆盖层。

in\]\[sub\]overlay=x=20:y=20:将输入视频流(\[in\])和子视频流(\[sub\])进行叠加(overlay)。x=20 和 y=20 参数指定了子视频在主视频上的起始位置,即子视频左上角的 x 坐标为 20,y 坐标为 20。 \[out\]:指定叠加后的视频流名称,用于输出。

相关推荐
tjsoft5 分钟前
asm汇编源代码之文件操作相关
linux·运维·汇编
chian-ocean1 小时前
解密 Linux 线程:多线程编程与资源管理
java·linux·redis
两点王爷6 小时前
docker 运行自定义化的服务-后端
运维·docker·容器
搜搜秀7 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
一个小猴子`7 小时前
FFMpeg视频编码实战和音频编码实战
ffmpeg·音视频
弧襪7 小时前
Ubuntu vs CentOS:Shell 环境加载机制差异分析
linux·ubuntu·centos
只会写Bug的程序员7 小时前
面试之《websocket》
网络·websocket·网络协议
christine-rr8 小时前
【25软考网工笔记】第二章 数据通信基础(1)信道特性 奈奎斯特 香农定理
网络·信息与通信·信号处理·软考
七七powerful8 小时前
使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标
运维