FFmpeg命令行使用小结

文章目录

  • 前言
  • 一、视频
    • [1.1 修改格式转码](#1.1 修改格式转码)
    • [1.2 截取片段](#1.2 截取片段)
    • [1.3 合并多个视频](#1.3 合并多个视频)
    • [1.4 裁剪区域](#1.4 裁剪区域)
    • [1.5 修改分辨率](#1.5 修改分辨率)
    • [1.6 翻转视频](#1.6 翻转视频)
    • [1.7 调整速度](#1.7 调整速度)
    • [1.8 多个视频拼接](#1.8 多个视频拼接)
    • [1.9 添加字幕](#1.9 添加字幕)
    • [1.10 修改文件封面](#1.10 修改文件封面)
    • [1.11 添加文字水印](#1.11 添加文字水印)
    • [1.12 制作画中画](#1.12 制作画中画)
    • [1.13 音视频混合/分离](#1.13 音视频混合/分离)
    • [1.14 视频直播推流](#1.14 视频直播推流)
    • [1.15 m3u8切片](#1.15 m3u8切片)
  • 二、音频
    • [2.1 视频提取音频](#2.1 视频提取音频)
    • [2.2 修改格式转码](#2.2 修改格式转码)
    • [2.3 裁剪音频](#2.3 裁剪音频)
    • [2.4 合并音频](#2.4 合并音频)
    • [2.5 调整音量](#2.5 调整音量)
    • [2.6 调整速度](#2.6 调整速度)
    • [2.7 采样率](#2.7 采样率)
    • [2.8 音频降噪](#2.8 音频降噪)
  • 参考

前言

FFmpeg 是一个强大的开源多媒体框架,被广泛应用于视频编辑、视频转码、流媒体处理、视频直播等领域。

FFmpeg 包含了一系列的库和工具,用于处理和操作音视频文件。这些库包括音视频编解码器、格式转换器、滤镜、封装器等,可以处理几乎所有常见的音视频格式.

ffmpeg 相关命令行语法如下:

bash 复制代码
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... 

一、视频

1.1 修改格式转码

bash 复制代码
# 将mp4格式转化为avi格式
ffmpeg -i input.mp4 output.avi

# 转码不清晰,指定比特率
ffmpeg -i input.mp4 -b:v 20000k output.mp4

1.2 截取片段

bash 复制代码
# 从时间2分钟往后截取30秒
ffmpeg -ss 00:02:00 -t 30 -i input.mp4 -c:v copy -c:a copy  output1.mp4

# 从时间2分钟往后截取到2分30秒
ffmpeg -ss 00:02:00 -to 00:02:30 -i input.mp4 -c:v copy -c:a copy  output2.mp4

上述命令实际测试会发现多 1s,可通过减一秒实现

1.3 合并多个视频

bash 复制代码
# 第一种,先转化为ts,再合并
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

# 第二种, 建一个文件file.txt,内容如下,包含所要合并视频文件名字,注意,每行要以file起始
# file input1.mp4
# file input2.mp4
ffmpeg -f concat -i file.txt -c copy output.mp4

# 上述两种是相同码率分辨率的视频
# 第三种,分辨率如果不同,可用-filter_complex实现
# 下面就是将两个输入文件的视频流分辨率都转为1024x576,然后合并
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]scale=1024:576:force_original_aspect_ratio=1[v0]; [1:v]scale=1024:576:force_original_aspect_ratio=1[v1]; [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map [v] -map [a] output.mp4

# 可去掉音频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]" -map "[outv]" -strict -2 output.mp4
# [0:v] 和 [1:v] 是视频流的输入标签,表示要连接的第一个和第二个视频文件。
# concat=n=2:v=1:a=0[outv] 部分定义了连接的方式:n 表示输入的文件数,v=1表示1个输出视频流,a=0表示0个输出音频流,[outv] 是输出标签。
# -map "[outv]" 用于将输出的视频流映射到输出文件。
# -strict -2 用于确保兼容性。

1.4 裁剪区域

bash 复制代码
# 截图将第20s截取为1张352x240的jpg
ffmpeg -ss 20 -i input1.mp4 -y -f image2 -t 0.001  -s 352x240 output.jpg

# 截取第一帧
ffmpeg -i input1.mp4 -y -f image2 -frames 1 cover_1f.jpg

# 裁剪部分区域视频
ffmpeg -i input1.mp4 -filter:v "crop=w=500:h=500:x=12:y=34" output.mp4

# 抖动裁剪
ffmpeg -i input1.mp4 -filter:v "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" output.mp4

1.5 修改分辨率

bash 复制代码
# 转化视频分辨率为960x540
ffmpeg -i input1.mp4 -vf scale=960:540 output.mp4

# 转化为缩略图大小分辨率
ffmpeg -i input1.mp4 -vf scale=qcif output.mp4

# 长宽都缩小一半
ffmpeg -i input1.mp4 -vf scale=w=iw/2:h=ih/2 output.mp4

1.6 翻转视频

bash 复制代码
# 水平翻转
ffmpeg -i input1.mp4 -vf "hflip" output.mp4

# 垂直翻转
ffmpeg -i input1.mp4 -vf "vflip" output.mp4

1.7 调整速度

bash 复制代码
# 视频加速,2倍速,音频也实现加速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

# 减速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4

1.8 多个视频拼接

bash 复制代码
# 将视频横向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex hstack output.mp4
# 竖向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex vstack output.mp4

# 四宫格
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scale=960:540 [s1]; [1:v]scale=960:540 [s2]; [2:v]scale=960:540 [s3]; [3:v]scale=960:540 [s4]; [s1][s2]hstack[top]; [s3][s4]hstack[bottom]; [top][bottom]vstack" output.mp4

1.9 添加字幕

bash 复制代码
# 内嵌字幕
ffmpeg -i input1.mp4 -i subtitle.ass -c copy -c:s mov_text output.mp4
ffmpeg -i input1.mp4 -vf "ass=subtitle.ass" output.mp4

1.10 修改文件封面

bash 复制代码
# 给视频文件添加封面
ffmpeg -i input1.mp4 -i qizai.jpg -map 1 -map 0 -c copy -disposition:0 attached_pic output.mp4

1.11 添加文字水印

bash 复制代码
# 文字水印,中文需要指定字体文件
ffmpeg -i input1.mp4 -vf "drawtext=text='中文水印':x=10:y=10:fontsize=24:fontcolor=white:fontfile=msyh.ttc" output.mp4

1.12 制作画中画

bash 复制代码
# 实现视频添加视频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[1:v]scale=320:240 [pip]; [0:v][pip]overlay=W-w-20:y=H-h-10" output.mp4

# 左上角添加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=20:10" output.mp4

# 右下角加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=W-w-20:H-h-10" output.mp4

1.13 音视频混合/分离

bash 复制代码
# 混合音频和视频
ffmpeg -i input.mp4 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mp4

# 分离音视频
ffmpeg -i input1.mp4 -vn output.mp3
ffmpeg -i input1.mp4 -an output.mp4

1.14 视频直播推流

bash 复制代码
# rtmp为推流地址
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "${rtmp}"

1.15 m3u8切片

bash 复制代码
# mp4转m3u8
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
# m3u8转mp4
ffmpeg -i output.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4

二、音频

2.1 视频提取音频

bash 复制代码
# 提取音频
ffmpeg -i input1.mp4 -vn -map 0:a:0 -c:a libmp3lame -q:a 2 output.mp3

2.2 修改格式转码

bash 复制代码
# 将wav转为mp3
ffmpeg -i input.wav input.mp3

2.3 裁剪音频

bash 复制代码
# 和视频类似,裁剪
ffmpeg -ss 00:00:10 -i input.mp3 -t 10 output.mp3

2.4 合并音频

bash 复制代码
# 合并音频
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3

2.5 调整音量

bash 复制代码
# 将音量变为2倍
ffmpeg -i input.mp3 -vn -af "volume=2.0" output.mp3

# 减少6分贝
ffmpeg -i input.mp3 -vn -af "volume=-6dB" output.mp3

2.6 调整速度

bash 复制代码
# 2倍速
ffmpeg -i input.mp3 -filter:a "atempo=2.0" -vn output.mp3

2.7 采样率

bash 复制代码
# 修改音频采样率
ffmpeg -i input.mp3 -ar 44100  output.mp3

2.8 音频降噪

bash 复制代码
# 过滤掉200hz及以下频率和过滤掉3000hz及以上频率
ffmpeg -i 1.wav -af "highpass=f=200, lowpass=f=3000"  output.mp3
ffmpeg -i 1.wav -af "highpass=200,lowpass=3000,afftdn" output.mp3

参考

  1. http://ffmpeg.org/ffmpeg.html
  2. https://ffmpeg.org/ffmpeg-filters.html
相关推荐
伊织code1 小时前
SAM 2 (Segment Anything ):图像与视频通用分割模型
sam·图像·视频·模型·segment·anything·分隔
qq_3168377515 小时前
使用ffmpeg 将图片合成为视频,填充模糊背景,并添加两段音乐
ffmpeg·音视频
林鸿群20 小时前
Mediamtx与FFmpeg远程与本地推拉流使用
ffmpeg
unix2linux2 天前
YOLO v5 Series - FFmpeg & (HTML5 + FLV.js ) & ONNX YOLOv5s Integrating
yolo·ffmpeg·html5
Antonio9152 天前
【音视频】FFmpeg解封装
ffmpeg·音视频
Antonio9153 天前
【音视频】FFmpeg内存模型
ffmpeg·音视频
hjjdebug3 天前
全面介绍AVFilter 的添加和使用
ffmpeg·avfilter
邪恶的贝利亚3 天前
基于 FFmpeg 的音视频处理基础原理与实验探究
ffmpeg·音视频
unbeliverpool3 天前
Android audio系统六 AudioEffect音效加载
android·音频
riveting3 天前
明远智睿2351开发板四核1.4G Linux处理器:驱动创新的引擎
linux·运维·服务器·人工智能·功能测试·音频·智能硬件