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
相关推荐
岁月小龙6 小时前
如何让ffmpeg运行时从当前目录加载库,而不是从/lib64
ffmpeg·origin·ffprobe·rpath
蓝天居士12 小时前
ES8388 —— 带耳机放大器的低功耗立体声音频编解码器(4)
嵌入式·音频·es8388
行者记2 天前
ffmpeg命令——从wireshark包中的rtp包中分离h264
测试工具·ffmpeg·wireshark
EasyCVR2 天前
国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案
运维·科技·ffmpeg·音视频·1024程序员节·监控视频接入
hypoqqq2 天前
使用ffmpeg播放rtsp视频流
ffmpeg
cuijiecheng20182 天前
音视频入门基础:FLV专题(24)——FFmpeg源码中,获取FLV文件视频信息的实现
ffmpeg·音视频
QMCY_jason2 天前
黑豹X2 armbian 编译rkmpp ffmpeg 实现CPU视频转码
ffmpeg
苍天饶过谁?2 天前
SDL基本使用
ffmpeg
HZ355722 天前
ffmpeg视频解码
ffmpeg·音视频
runing_an_min2 天前
windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576
c++·windows·ffmpeg·e0029