ffmpeg 是一个非常强大的音视频转换工具,目前还在摸索学习阶段,本文记录一下目前用过的几条命令。
ffmpeg 音视频格式转换
基础命令
# 获取帮助
ffmpeg -help
# 支持的格式
ffmpeg -formats
# 支持的解码
ffmpeg -decoders
# 支持的编码
ffmpeg -encoders
# 支持的协议
ffmpeg -protocols
# 隐藏开头的广告信息
ffmpeg -hide_banner
# 精简格式输出
ffmpeg -loglevel quiet
自动将 VOB 格式视频转换为 mp4 格式,并将音量调高两倍
ffmpeg -i 1.vob -af "volume=2" 1.mp4;
使用 libx265 编码格式将 avi 视频转换为 mp4 视频
ffmpeg -i 1.avi -c:v libx265 -preset medium -crf 22 -c:a copy 1.mp4;
-
-c:v libx265
使用 libx265 编码 -
-preset medium
预设画质为medium
-
-crf 22
设置画质等级 -
-c:a copy
直接拷贝音频
以下20条命令收集自网络,点此查看原文
提取视频中的音频
# 该命令从输入视频中提取音频并将其保存为 AAC 格式。
ffmpeg -i input.mp4 -vn -acodec copy output.aac
转换视频为 GIF
ffmpeg -i input.mp4 -vf "scale=320:-1:flags=lanczos,palettegen" -y palette.pngffmpeg -i input.mp4 -i palette.png -filter_complex "scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" -y output.gif
提取视频帧
# 该命令从输入视频中提取每秒钟的一帧,并将这些帧保存为 PNG 格式的图像文件。
ffmpeg -i input.mp4 -r 1 -f image2 output-%03d.png
提取某一帧
# 该命令从输入视频中提取第30秒的一帧,并将这些帧保存为 PNG 格式的图像文件。
ffmpeg -i input.mp4 -ss 00:00:30 -frames:v 1 output-30.png
调整视频大小
# 该命令将输入视频的分辨率调整为 640x360 并将输出保存为 MP4 格式。
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
添加水印
# 该命令在输入视频的左上角添加一个水印,并将输出保存为 MP4 格式。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
调整音频音量
# 该命令将输入音频的音量调整为原来的 2 倍,并将输出保存为 MP3 格式。
ffmpeg -i input.mp3 -af "volume=2" output.mp3
压缩视频
# 该命令将输入视频压缩为分辨率为 640x? 的视频,并使用 H.264 编码器进行编码。压缩质量由 CRF 参数控制,值越小压缩质量越高。Preset 参数控制编码速度,值越小编码速度越快,但压缩质量可能会降低。
ffmpeg -i input.mp4 -vf "scale=640:-1" -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4
添加字幕
# 该命令将输入视频与字幕文件结合,将字幕文件编码为 mov_text 格式,将输出保存为 MP4 格式。
ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4
旋转视频
# 该命令将输入视频逆时针旋转 90 度,并将输出保存为 MP4 格式。
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
修改视频的帧率
# 该命令将输入视频的帧率修改为 30 帧每秒,然后使用 H.264 编码器进行编码。
ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4
裁剪视频
# 该命令从输入视频的第 10 秒开始裁剪,裁剪时长为 20 秒,然后将裁剪后的视频保存为 MP4 格式。
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4
合并多个视频文件
# 该命令将多个 MP4 格式的视频文件合并为一个文件,并将其保存为 MP4 格式。
ffmpeg -f concat -safe 0 -i list.txt -c copy -y output.mp4
#-f concat是指合并
#-safe 为了避免权限报错
#-c copy 一定要指定,不然会重新封装,数据文件就会变大。
# list.txt 的文件内容格式:
file '1.mp4'
file '2.mp4'
file '3.mp4'
分离视频的音频和视频流
# 该命令将输入视频的音频流和视频流分别保存为 MP3 和 MP4 格式的文件。
ffmpeg -i input.mp4 -vn audio.mp3ffmpeg -i input.mp4 -an -vcodec copy video.mp4
合并音频和视频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
# 如果视频中已经包含了音频,这个时候还可以替换视频中的音频,使用下面命令行。
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental-map 0:v:0 -map 1:a:0 output.mp4
拼接音频文件
# 该命令将两个 MP3 格式的音频文件拼接为一个文件,并将其保存为 MP3 格式。
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3
裁剪音频
# 该命令从输入音频的第 30 秒开始裁剪,裁剪时长为 2 分钟,然后将裁剪后的音频保存为 MP3 格式。
ffmpeg -i input.mp3 -ss 00:00:30 -t 00:02:00 -acodec copy output.mp3
ffmplay 音视频文件播放
播放 1.mp4 文件
ffmplay 1.mp4
播放控制快捷键:
- 退出播放:q键、ESC键
- 全屏切换:f键(进入或退出全屏)
- 暂停:p键、空格键
- 静音切换:m键
- 改变音量:9键减少音量、0键增加音量
- 循环切换音频流:a键
- 循环切换视频流:v键
- 循环切换字幕流:t键
- 循环切换节目:c键
- 循环切换过滤器或显示模式:w键
- 逐帧播放:s键
- 快进后退10秒:left键(←)后退10秒,right键(→)前进10秒;
- 快进后退60秒:down键(↓)后退60秒,up键(↑)前进60秒;
命令参数
参数 | 含义 |
---|---|
-x width-y height |
强制显示宽高,用于调整窗口大小 |
-video_size size |
设置帧尺寸,仅适用于没有包含帧大小的视频 |
-pixel_format format |
设置像素格式 |
-fs |
以全屏模式启动 |
-an |
禁用音频 |
-vn |
禁用视频 |
-sn |
禁用字幕 |
-ss pos |
设置开始播放的位置 pos 可以是数字,比如 -ss 100 表示从100秒的位置开始播放 pos 也可以是hour:min:second 的格式,比如 -ss 00:01:50 表示从1分50秒的位置开始播放 |
-t duration |
设置播放视频的长度,即持续时间 duration 的格式与上面的 pos 相同 |
-bytes |
设置按字节进行定位拖动 |
-seek_interval interval |
自定义左右键拖动间隔,以秒为基本单位,默认为10秒 |
-nodisp |
关闭图形化显示窗口,不显示视频 |
-noborder |
设置无边框窗口 |
-volume vol |
设置起始音量 |
-f fmt |
强制使用设置的格式进行解析 |
-window_title title |
设置窗口标题,默认为输入文件名 |
-loop number |
设置播放循环次数 |
-showmode mode |
设置显示模式,默认为0 显示视频 0 显示视频 1 显示音频波形 2 显示音频频谱 |
-vf filtergraph |
设置视频滤镜 |
-af filtergraph |
设置音频滤镜 |
高级命令参数 | |
-stats |
统计信息包括现实流持续时间、编解码参数、流的当前位置等 |
-sync type |
设置同步类型 type 分为audio 、video 和external 等类型 |
-ast index |
播放流索引为index 的音频流 |
-vst index |
播放流索引为index 的视频流 |
-sst index |
播放流索引为index 的字幕流 |
-autoexit |
设置视频播放完毕自动退出 |
-codec:media_specifier codec_name |
强制使用设置的多媒体解码器 -codec:v h264_qsv 表示强制视频采用h264_qsv进行解码 |
-acodec codec_name |
强制使用设置的音频解码器进行音频解码 |
-vcodec codec_name |
强制使用设置的视频解码器进行视频解码 |
-scodec codec_name |
强制使用设置的字幕解码器进行字幕解码 |
-infbuf |
不限制输入缓冲区大小 尽可能快地从输入中读取尽可能多的数据,禁用时需采用 -noinfbuf
|
ffprobe 音视频信息查看
查看 1.mp4 文件信息
ffprobe -i 1.mp4
网友评论