ffmpeg 常用命令行详解

概述

ffmpeg 是一个命令行音视频后期处理软件

1. 裁剪命令

参数说明

  • -i 文件,orgin.mp3 为待处理源文件

  • -ss 裁剪时间,后跟裁剪开始时间,或者开始的秒数

  • -t 裁剪时间

  • output.mp3 为处理结果文件

    ffmpeg -i organ.mp3 -ss 00:00:xx -t 120 output.mp3
    ffmpeg -i organ.mp3 -ss 360 -t 230 output.mp3

  1. 合成命令

2.1 混合合成

参数说明

  • -i 文件 1.mp3 和 2.mp3 为待合成的两个源文件

  • -filter_complex 过滤器参数

  • amix=inputs 配置输入的整体样本数

  • duration,first:长度取决于第一个文件,longest:长度取决于时间最长文件,shortest:长度取决于时间最短文件

  • dropout_transition:输入流结束时用于体积重新规范化的过渡时间

  • -f mp3 设置导出文件格式

    ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 remix.mp3

2.2 连接合成

参数说明

  • concat 合并文件指令

    ffmpeg -i "concat:Box01.mp3|Box02.mp3" Box.mp3
    ffmpeg -i "concat:headerNew.mp3|006.mp3" -acodec copy demo6.mp3

2.3 淡出效果

参数说明

  • afade 淡入淡出指令

  • 从 st 秒开始,经过 d 秒钟的淡出效果

    ffmpeg -i bgm3.mp3 -filter_complex afade=t=out:st=16:d=4 bgm31.mp3

2.4 合并背景音和视频

首先需要将原视频的声音删除。这里的文件名需要加上英文引号,如果不加的话,会提示No such file or directory。

ffmpeg -i "audio.mp4" -y -f mp4 -an -codec copy -q:v 1 "audio-无声.mp4"

然后将无声视频和音频融合

ffmpeg -i audio-无声.mp4 -i accompaniment.wav -c:v copy -c:a aac -strict experimental audio-消音.mp4

即可获得消去人声的视频。但笔者口语不好,觉得原视频的语速有些快了,故又调整了视频倍速为0.8倍速。

ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=10/8*PTS[v];[0:a]atempo=0.8[a]" -map "[v]" -map "[a]" test-2.mp4

这条指令同时调整视频倍速和音频倍速,setpts=(倍速的倒数)*PTS[v],atempo=(倍速)[a]

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

  1. 转换调整命令

3.1 格式转换

参数说明

  • -i 文件,a.mp3 为待处理源文件

  • -ar 音频抽样率

  • -ac 音频Channel数

  • -f 强制输出格式 例如mp3, wav等

    将a.mp3转化程a.wav,设定抽样率为16000

    ffmpeg -i a.mp3 -ar 16000 -ac 1 a.wav

    将Frozen.mka转化成a.mp3

    ffmpeg -i Frozen.mka -ar 16000 -f mp3 a.mp3

3.2 音量调整

参数说明

  • -i 文件,a.mp3 为待处理源文件

    音量256为原始音量,如果要调整到两倍音量,则设置为512,调整到一半音量,则设为128,下面为减小一半音量的命令

    ffmpeg -i Box.mp3 -vol 128 box3.mp3

    使用dB调整音量

    ffmpeg -i a.mp3 -af volume=-20dB b.mp3

  • dB的换算公式 1.1 dB = 1.1 倍,2 dB = 1.25倍,3 dB = 1.4倍,6 dB = 2 倍,10 dB = 3 倍,20 dB = 10 倍,30 dB = 30 倍。其它就可以用上述数值换算,并不困难。(反过来 -- 6 dB 就是 1/2 = 0.5) 2.在换算时要把握一个原则,dB数值的相加 等于 倍数的相乘。 例如:40 dB = 20dB + 20 dB = 10 * 10 = 100 倍 -20dB谱宽就是信号衰减到十分之一时的频谱带宽。

3.3 升降调

# 升半音
ffmpeg -i "mine.mkv" -filter_complex "asetrate=48000*2^(1/12),atempo=1/2^(1/12)" "output.mkv"
# 升全音
ffmpeg -i "mine.mkv" -filter_complex "asetrate=48000*2^(2/12),atempo=1/2^(2/12)" "output.mkv"
# 降半音
ffmpeg -i "mine.mkv" -filter_complex "asetrate=48000*2^(-1/12),atempo=1/2^(-1/12)" "output.mkv"
# 降全音
ffmpeg -i "mine.mkv" -filter_complex "asetrate=48000*2^(-2/12),atempo=1/2^(-2/12)" "output.mkv"

3.4 音频速率调整

改变音频速率最简单的方法是直接调整音频的采样率,但是与此同时,这种方法会改变音频的音色。目前一般采用对原音进行重采样,差值等方法来实现。下面这行命令的倍率调整范围为0.5到2。

ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv

如果想要再快的话,需要更改命令,通过将多个atempo过滤器串接在一起来绕过这个限制。

ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv

3.5 视频速率调整

改变视频的播放速率是通过修改视频的表示时间戳(PTS)来实现的。举个简单的例子,如果在时间戳1和2处显示两个连续帧,我们想要加快视频速度,那么这两个时间戳需要分别变为0.5和1。因此,我们必须把他们乘以0.5。

ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.5*PTS" output.mkv

对视频进行加速时,为了不丢帧,可以利用-r 参数指定输出的fps。 一般来说,视频倍速还需要将视频中的音频也一同倍速,通过混合的过滤图实现,命令如下,

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv

4. 提取命令

4.1 从视频中提取音频

参数说明

-map 提取视频-音频流的序号 -b:a 码率 kb/s -f 强制输出格式 例如mp3, wav等

# 从frozen.mkv中,提取音频文件,保存为audio.1.mp3
ffmpeg -i frozen.mkv -map 0:1 -b:a 64k -f mp3 a.1.mp3
ffmpeg -i frozen.mp4 -q:a 0 -map a audio.mp3
ffmpeg -i frozen.mp4 -vn -codec copy audio.m4a
ffmpeg -i audio.m4a -y -acodec libmp3lame -aq 0 audio.mp3

查看视频,包含的视频流、音频流如下: encoder : libebml v1.2.3 + libmatroska v1.3.0 Duration: 01:42:13.09, start: 0.000000, bitrate: 2954 kb/s Stream #0:0: Video: h264 (High), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 23.98 fps Stream #0:1(eng): Audio: ac3, 48000 Hz, 384 kb/s (default) title : 英语 Stream #0:2(chi): Audio: ac3, 48000 Hz, 384 kb/s title : 台配 Stream #0:3(chi): Audio: ac3, 48000 Hz, 384 kb/s title : 粤语
查看原音视频文件音轨频率

ffmpeg -i "mine.mkv"

命令执行后找到音轨的Stream,频率为48000Hz;

 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 2316x1440, 22449 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2022-08-31T02:15:18.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : H.264
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      creation_time   : 2022-08-31T02:15:18.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]

5. 消音命令

参数说明

  • -i 文件,a.mp3 为待处理源文件

  • -ac 音频Channel数

    ffmpeg -i file.mp3 -af pan="stereo|c0=c0|c1=-1*c1" -ac 1 karaoke.mp3

原文链接 ffmpeg 常用命令行详解 - 掘金

相关推荐
-Mr_X-2 小时前
windows下srs流媒体服务器使用ffmpeg推流
ffmpeg
dvlinker4 小时前
C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
ffmpeg·mingw-w64·msys2·cygwin·开源vlc·vlc编译·vlc裁剪
因我你好久不见18 小时前
springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率
java·spring boot·ffmpeg
cuijiecheng20181 天前
音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
ffmpeg·音视频
cuijiecheng20181 天前
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
ffmpeg·音视频·aac
流氓也是种气质 _Cookie2 天前
uniapp blob格式转换为video .mp4文件使用ffmpeg工具
ffmpeg·uni-app
网络安全queen2 天前
网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读
安全·web安全·ffmpeg
yerennuo2 天前
FFmpeg库之ffmpeg
qt·ffmpeg
韩曙亮2 天前
【FFmpeg】解封装 ① ( 封装与解封装流程 | 解封装函数简介 | 查找码流标号和码流参数信息 | 使用 MediaInfo 分析视频文件 )
ffmpeg·音视频·视频流·mediainfo·解封装·码流
yerennuo2 天前
FFmpeg 框架简介和文件解复用
ffmpeg