【持续更新】FFmpeg常用命令小结

本文提供FFmpeg工具套件的详细使用教程,涵盖视频信息查看、抽帧保存、帧数计算、FPS转换、编解码器支持、加水印、去水印、图片视频合并、视频截取、尺寸调整等常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FFmpeg工具套件

在这里插入图片描述

常用命令

1. 查看视频信息

ffmpeg -i input.mp4

或者

ffprobe -i input.mp4

输出信息如下:

ffmpeg version 4.2.3 Copyright © 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.59)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.3 --enable-shared
–enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags=-fno-stack-check --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘video.mp4’:
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100 Duration: 00:00:16.93, start: 0.000000, bitrate: 1107 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x1280 [SAR 1:1 DAR 9:16], 970 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
(default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler

2. 视频抽帧保存成图片

ffmpeg -i input.mp4 ./input/out-%03d.png
ffmpeg -i input.mp4 -q:v 2 -f image2 ./input/%03d.jpeg

注:需先创建指定的文件夹

3. 计算视频总帧数

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mp4

4. 视频fps转化(转为24,总时长不变)

ffmpeg -i input.mp4 -r 24 -y output.mp4

5. 列出支持的编解码器

ffmpeg -decoders
ffmpeg -encoders

6. 列出支持的gpu编解码器

ffmpeg -decoders | grep cuvid
ffmpeg -encoders | grep nvenc

7. 加水印

ffmpeg -i input.mp4 -c:v libx264 -b:v 4000k -c:a copy -vf "movie=logo.png,scale= 60: 30[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " -y output.mp4

ffmpeg -i input.mp4 -c:a copy -vf "movie=logo.png,scale= 120: 60[watermark];[in][watermark] overlay=x=10:main_h-overlay_h-10[out] " -y output.mp4

在视频左下角添加图片水印:

ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=x=10:y=main_h-overlay_h-10’ output.mp4

在视频右下角添加图片水印:

ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' output.mp4
ffmpeg -i input.mp4 -vf “movie=logo.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] “ output.mp4

利用GPU编码加水印:

ffmpeg -i input.mp4 -c:a copy -vf "movie=logo.png[watermark];[in][watermark] overlay=x=15:main_h-overlay_h-15[out] " -c:v h264_nvenc -y output.mp4

ffmpeg -i input.mp4 -c:a copy -vf "movie=logo.png,scale=w=2/3*iw:h=2/3*ih[watermark];[in][watermark] overlay=x=15:main_h-overlay_h-15[out] " -c:v h264_nvenc -y output.mp4

注:
-i :一般表示输入
input.mp4:这里表示要处理的视频源
-vf:滤镜相关,视频裁剪,水印等等操作都需要它完成
logo.png: 要添加的水印图片地址
overlay:水印参数
main_w-overlay_w-10:水印在x轴的位置,也可以写成x=main_w-overlay_w-10
main_h-overlay_h-10:水印在y轴的位置
-filter_complex:相比-vf, filter_complex适合开发复杂的滤镜功能,如同时对视频进行裁剪并旋转。参数之间使用逗号隔开。
main_w:视频宽度
overlay_w: 要添加的图片水印宽度
main_h : 视频高度
overlay_h:要添加的图片水印宽度

8. 实现2秒后logo从左到右移动

ffmpeg -i input.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)'” output.mp4

9. 实现每隔10秒交替出现logo

ffmpeg -y -t 60 -i input.mp4 -i logo1.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10” output.mp4

10. 去水印

ffmpeg -i Mojito.mp4 -vf delogo=x=950:y=10:w=300:h=100:show=0 out.mp4

其中x/y/w/h是水印方框坐标,show=0是不显示水印处理边框

11. 从图片序列合并视频

图片路径保存在list_of_output_files.txt中

ffmpeg -y -loglevel error -f concat -safe 0 -i list_of_output_files.txt -vcodec copy output.mp4

图片格式统一,均在同一个文件夹中

ffmpeg -r 24 -pattern_type glob -i 'output/*.jpg' -c:v libx264 output.mp4

12. 合并视频

横向合并视频

(Cpu) ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack -y output.mp4
(Gpu) ffmpeg -c:v h264 -i input1.mp4 -c:v h264 -i input2.mp4 -lavfi hstack -c:v h264_nvenc -y output.mp4

纵向合并视频

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi vstack -y output.mp4

合并多个视频

如果希望合并多个视频,可以使用下面命令行:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4

其中input=3表示希望合并的视频的个数。

13. 转码

GPU转码h264视频(h264_cuvid)到h264(h264_nvenc)

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -y output-gpu.mp4

GPU转码mp4v视频(mpeg4_cuvid)到h264(h264_nvenc)

ffmpeg -hwaccel cuvid -c:v mpeg4_cuvid -i input-mp4v.mp4 -c:v h264_nvenc -b:v 2048k -y output-gpu.mp4

CPU转码h264视频(libx264)到h264(libx264)

ffmpeg -i input.mp4 -c:v libx264 -b:v 2048k -vf scale=1280:-1 -y output-cpu.mp4 

从rawvideo到h264,Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_nvenc))

ffmpeg -hwaccel cuvid -i input_rawvideo.mp4 -c:v h264_nvenc -vf scale=720:1280 -y output-gpu.mp4

其他:

ffmpeg -i input.mp4 -c:v libx264 -b:v 2048k -vf scale=1280:-1 -y output-cpu.mp4
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y output-gpu.mp4
ffmpeg -i input.mp4 -c:v h264_nvenc -preset default output-gpu.mp4

14. 截取视频某一部分

ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4
  • -ss:指定从什么时间开始
  • -t:指定需要截取多长时间
  • -i:指定输入视频文件

15. 连接两个和多个同样分辨率的视频片段

# 两个
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex concat=n=2:v=1  output.mp4

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v] [0:a] [1:v] [1:a] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4

# 多个
## 将所有视频名写入video.txt中,例如:
file '1.mp4'
file '2.mp4'
file '3.mp4'
file '4.mp4'
file '5.mp4'

## 执行连接脚本:
ffmpeg -f concat -i video.txt -c copy output.mp4

16. 调整尺寸

ffmpeg -i video_large.mp4 -s 256x256 -c:a copy video_256.mp4

17. 查看支持的转换格式

ffmpeg -pix_fmts

18. 展示帧类型

ffprobe -select_streams v -show_frames -show_entries frame=pict_type test.mp4
或
ffprobe -i test.mp4 -show_frames | grep 'pict_type'

结果示例:

[FRAME]
pict_type=I
[/FRAME]
[FRAME]
pict_type=B
[/FRAME]
[FRAME]
pict_type=B
[/FRAME]
[FRAME]
pict_type=B
[/FRAME]
[FRAME]
pict_type=P
[/FRAME]

19. 拷贝部分流到新的视频中

使用copy:

ffmpeg -i input0.avi -c:v copy -i input1.mp4 -c:a copy output.mkv
  • 注:将input0.avi的Video Stream和input1.mp4的Audio Stream拷贝到output.mkv中。

使用map:

ffmpeg -i input0.mp4 -i input1.mkv -map 0:0 -map 1:3 output.mp4
  • 注:将input0.mp4的Stream 0和input1.mkv的Stream 3拷贝到output.mp4中。
    在这里插入图片描述
    更多map的使用方式见参考资料[10]

20. 对视频左旋90度或者右旋90度

使用CPU编解码做视频旋转

将视频左旋 90 度:

ffmpeg -i test_video.mp4 -vf "transpose=2" output_video_left_rotate.mp4

将视频向右旋转 90 度:

ffmpeg -i test_video.mp4 -vf "transpose=1" output_video_right_rotate.mp4

使用GPU编解码做视频旋转

将视频左旋 90 度:
(以使用7号GPU为例,device_id=7)

ffmpeg -y -hwaccel cuda -hwaccel_device 7 -i test_video.mp4 -c:v h264_nvenc -vf "transpose=2" -y output_video_left_rotate.mp4

将视频向右旋转 90 度:

ffmpeg -y -hwaccel cuda -hwaccel_device 7 -i test_video.mp4 -c:v h264_nvenc -vf "transpose=1" -y output_video_right_rotate.mp4

FFplay

播放一次后自动退出

ffplay -autoexit test.mp4

以指定窗口大小播放

ffplay -x 1280 -y 720 test.mp4

设置窗口标题并循环播放

ffplay -window_title test_window -loop 3 test.mp4

注:‘-loop number’ 为循环播放 ,number为0将一直循环。

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com
在这里插入图片描述

参考资料

[1] FFmpeg官网
[2] 使用GPU硬件加速FFmpeg视频转码
[3] Use FFmpeg to Decode H.264 Stream with NVIDIA GPU Acceleration
[4] 使用ffmpeg给视频添加图片及文字水印
[5] ffmpeg视频剪切与合并
[6] 使用FFmpeg合并音视频
[7] FFmpeg 视频处理入门教程
[8] 知乎 - 如何用ffmpeg合并音频和视频?
[9] FFmpeg之ffplay命令使用
[10] Map – FFmpeg
[11] FFmpeg Wiki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracelessLe

❀点个赞加个关注再走吧❀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值