FFmpeg(强大的音视频处理工具) - 一些基本实用方法

FFmpeg(强大的音视频处理工具) - 一些基本实用方法

下载安装

官网:ffmpeg.org

下载页面 -> Windows -> Windows builds from gyan.devWindows builds by BtbN

推荐使用第二个Github@BtbN/FFmpeg-Builds,在最新的一个release中,搜索win,下载ffmpeg-master-latest-win64-gpl.zipffmpeg-master-latest-win64-gpl-shared.zip

解压.zip压缩包,将bin目录添加到环境变量,重启cmd终端,输入ffmpeg -version,看到ffmpeg version n5.1-5-gaba74d7843-20220803 Copyright (c) 2000-2022 the FFmpeg developers即说明安装配置成功。

使用

最简单的使用方式为:

格式转换

1
ffmpeg -i input.mp4 output.flv

音视频裁剪

1
ffmpeg -ss 20 -t 10 -i input.mp4 output.mp4

其中,-ss是开始时间,-t是持续时间。

1
ffmpeg -ss 20 -to 30 -i input.mp4 output.mp4

其中,-ss是开始时间,-to是结束时间。

1
ffmpeg -ss 0:0:20 -to 0:0:30 -i input.mp4 output.mp4

其中,20代表20秒,0:0:20代表0时0分20秒。

另外的,若-to-t同时设置,则以-t为准。

特别提醒:

使用ffmpeg进行视频裁剪时,请务必将-ss参数放在-i前面!

虽然先-i和先-ss都能正常裁剪,但是先-i的话,可能会比先-ss慢很多。

1
2
3
4
# 十来秒后才开始裁剪
ffmpeg -i "[DMG&LoliHouse] BOCCHI THE ROCK! - 05 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv" -ss 200 -t 5 output.mp4 -y
# 几乎立刻开始裁剪
ffmpeg -ss 200 -t 5 -i "[DMG&LoliHouse] BOCCHI THE ROCK! - 05 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv" output.mp4 -y

等长分割(批量分割)

1
ffmpeg -i input.mp3 -vn -f segment -segment_time 7 output%03d.mp3

将input.mp3分割为数个7秒的小片段,并命名为output001.mp3、output002.mp3、…。

其中:

  • -acodec copy instructs FFmpeg to copy the audio codec from the input file without re-encoding it, which means the output files will have the same audio quality.
  • -vn tells FFmpeg to extract only the audio stream from the input file and ignore the video stream, as this command does not produce any video output.
  • -f segment sets the output format to segmented files.
  • -segment_time 7 每段7秒

🤫

给视频添加图片文字

所用到素材及结果详见:阿里云盘分享

给视频添加图片

如果想要往某个视频上的某个位置添加一个图片(比如二维码),则可以使用以下命令将0.png添加到0.mp4的左上角(10, 10)的位置:

1
ffmpeg -i 0.mp4 -i 0.png -filter_complex "overlay=10:10" output.mp4

如果想要0.png仅在第5到10秒出现,则可以:

1
ffmpeg -i 0.mp4 -i 0.png -filter_complex "overlay=10:10:enable='between(t,5,10)" output.mp4

给视频添加文字

如果想在0.mp4(130, 320)处添加大小为70华文行楷欢迎来到我的空间,则可以:

1
ffmpeg -i 0.mp4 -i 0.png -vf "drawtext=text='欢迎来到我的空间':fontsize=70:fontcolor=black:x=130:y=320:fontfile=C\\:/Windows/Fonts/STXINGKA.TTF" output.mp4

同时给视频添加图片和文字

ffmpeg中-vf-filter_complex不能同时用于同一个输出流。想要同时往视频中添加图片和文字,可以使用-filter_complex选项来指定所有过滤器:

1
ffmpeg -i 0.mp4 -i 0.png -filter_complex "[0:v][1:v]overlay=180:450,drawtext=text='欢迎来到我的空间':fontsize=70:fontcolor=black:x=130:y=320:fontfile=C\\:/Windows/Fonts/STXINGKA.TTF[outv]" -map "[outv]" output.mp4

合并视频和字幕

假设当前目录下有0.mp40.ass,则可以:

1
ffmpeg -i 0.mp4 -vf "ass=0.ass" -c:a copy output.mp4

假设提示“找不到字体”,则可以

1
ffmpeg -i 0.mp4 -vf "ass=0.ass:fontsdir=/path/to/fonts/" -c:a copy  output.mp4

提取视频中的一段音频并输出为mp3

1
ffmpeg -ss 5 -t 5 -i input.mkv -vn -acodec mp3 output.mp3

使用硬件加速(GPU)

首先确定可用硬件列表:

1
ffmpeg -hwaccels

得到结果:

1
2
3
4
5
6
7
8
9
ffmpeg versioxxx
xxx

Hardware acceleration methods:
cuda
qsv
d3d11va
opencl
vulkan

则说明可以使用cudaqsv等进行硬件加速。

接着只需要:

1
2
# ffmpeg -hwaccel <加速器> -i 输入视频文件 输出视频文件
ffmpeg -hwaccel cuda -i 0.mp4 1.flv

关于如何在Linux上编译安装支持CUDAFFmpeg请查看FFmpeg - 如何在Linux(Ubuntu)上安装支持CUDA的FFmpeg

使用一个视频的格式信息压制另一个视频

首先获取已有视频的格式信息:

1
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,bit_rate,width,height,avg_frame_rate -of default=noprint_wrappers=1 perfect.mkv

得到:

1
2
3
4
5
codec_name=h264
width=1920
height=1080
avg_frame_rate=24000/1001
bit_rate=2183643

接着按照此格式开始压制即可:

1
ffmpeg -i input.mkv -c:v libx264 -b:v 2M -s 1920x1080 -r 24 output.mkv

格式转换时保留内挂字幕

1
ffmpeg -i input.mkv -c:s copy output.mkv

其中-c:s是值字幕,copy是指复制,也可以修改成-c:s ass等。

视频倍速

1
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=PTS/1.5[v];[0:a]atempo=1.5[a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -b:a 192k output.mp4
参数详解
  • ffmpeg:调用FFmpeg程序。

  • -i WeChat_20240521100857.mp4:指定输入文件名为 WeChat_20240521100857.mp4

  • -filter_complex "[0:v]setpts=PTS/1.5[v];[0:a]atempo=1.5[a]":应用复杂滤镜处理:

    • -filter_complex:使用复杂滤镜功能。
    • [0:v]setpts=PTS/1.5[v]:将视频流的时间戳(PTS)按1.5倍速调整。具体含义如下:
      • [0:v]:表示第一个输入文件的视频流。
      • setpts=PTS/1.5:PTS(Presentation Time Stamp,显示时间戳)是FFmpeg用来同步音视频的标记。将时间戳缩短为原来的1/1.5,从而实现1.5倍速播放。
      • [v]:给处理后的视频流命名为[v],供后续使用。
    • [0:a]atempo=1.5[a]:将音频流的速度调整为1.5倍。具体含义如下:
      • [0:a]:表示第一个输入文件的音频流。
      • atempo=1.5:将音频速度调整为1.5倍。FFmpeg中atempo滤镜用于调整音频速度,允许的值范围是[0.5, 2.0],超过范围需要链式使用多个atempo
      • [a]:给处理后的音频流命名为[a],供后续使用。
  • -map "[v]":指定输出文件使用处理后的视频流[v]

  • -map "[a]":指定输出文件使用处理后的音频流[a]

  • -c:v libx264:指定视频编码器为libx264,这是一个常用的高质量H.264编码器。

  • -c:a aac:指定音频编码器为aac,这是一个常用的高质量音频编码器。

  • -b:a 192k:指定音频比特率为192 kbps,确保音频质量。

  • output.mp4:指定输出文件名为 output.mp4

原创不易,转载请附上原文链接哦~
https://blog.letmefly.xyz/2023/07/03/Other-FFmpeg-SomeCommonUsage/


FFmpeg(强大的音视频处理工具) - 一些基本实用方法
https://blog.letmefly.xyz/2023/07/03/Other-FFmpeg-SomeCommonUsage/
作者
Tisfy
发布于
2023年7月3日
许可协议