【FFMPEG笔记·命令行手册】部分关键概念及常用命令行整理

这篇具有很好参考价值的文章主要介绍了【FFMPEG笔记·命令行手册】部分关键概念及常用命令行整理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


简记FFMPEG的部分关键概念,整理常用命令行手册以备查找。本文并非严格的学术文章,部分词汇按个人标准翻译,请认准英文。

FFMPEG命令行语法格式

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

FFMPEG的部分关键概念

FFMPEG多媒体编解码流程

【FFMPEG笔记·命令行手册】部分关键概念及常用命令行整理

  1. 输入解复用(demux)调用demuxer读取输入文件并获得数据包
  2. 解码(decode)解码器产生未压缩帧(原始视频/PCM音频等)
  3. 滤镜处理(filtering)使用滤镜处理未压缩数据
  4. 编码(encode)
  5. 混流(mux)后输出

以上功能单元(解复用器、混流器、编解码器、滤镜)由以下库提供,可查看相关文档或命令行帮助以获得全部名单及使用方式:

  • libavcodec
  • libavformat
  • libavdevice
  • libavfilter

流拷贝(stream copy)模式

-codec[:stream_specifier] copy指定。若指定流拷贝模式,则跳过编解码与滤镜操作(当然亦无法执行滤镜处理操作),仅执行解复用与混流步骤,常用于修改容器格式或修改容器元数据。优势在于快速、无质量损失。

滤镜(filter)

也译为过滤器,是FFMPEG对各种未压缩流数据操作的基本功能单元的抽象。滤镜为逐流(per-stream)作用,需以流限定符(stream specifier)指定操作对象流。从作用对象分类,滤镜有视频滤镜V、音频滤镜A与字幕滤镜S之分(VAS)。从功能分类,滤镜可分为功能滤镜(filter)、源(source)、汇(sink),后二者可理解为FFMPEG自身提供的输入与输出文件。

滤镜图(filtergraph)

若干(或单一)滤镜链式连接形成的可用图表示其逻辑组合的功能单元,简单地理解为所有应用的滤镜的统称。以输入输出流数或流类型异同可区分两种滤镜图:简单(simple)滤镜图与复杂滤镜图,二者诸多方面有差异。

流(stream)

多媒体容器文件的基本单元,也是FFMPEG的基本处理对象,滤镜与编解码器应用的最小单位。在各种应用场景中,流常被封装于容器文件中,解复用步骤实际就是拆封从而拿到流。流有视频流、音频流、字幕流之分(VAS)。

自动流选择

流选择(stream selection)的一种(另一种是手动流选择,由map选项指定)。输出文件无map选项时自动应用该种流选择方案,其步骤为:

  1. 检查输出文件格式,确定合法的流类型
  2. 对于所有合法的流类型,从全部输入文件的流中对VAS各选择一条流,原则为
    - 视频流:分辨率最高
    - 音频流:声道最多
    - 字幕流:第一条,但是须符合输出文件格式要求的字幕类型(基于文本或图像)
    - 数据或附加流:无法自动选择,必须使用-map选项指定
  3. 满足选择标准的所有流中选择索引最小的那条

流限定符(stream specifier)

对于逐流(per-stream)操作的选项,使用流限定符指定作用的对象流。流限定符的形式为附加于选项名后以分号隔开的字符串,具体形式如下:

  • stream_index
  • stream_type[:additional_stream_specifier]
  • p:program_id[:additional_stream_specifier]
  • #stream_id(i:stream_id)
  • m:key[:value]
  • u

选项

指定参数、选择滤镜、限定对象…选项是FFMPEG命令行的基础。大致分为:

  • 通用选项(Generic options)
  • 主选项(Main options)
  • VAS选项
  • 额外的高级选项(Advanced options)

了解选项需关注以下方面:

  • 最小作用域(Least Range)全局G·输入输出文件F·逐流S
  • 输入?输出?(IO)
  • 参数
  • 功能

时间长度(duration)表示

libavutil库提供支持,建议查看官方文档。总的来说有两种表示方法:

[-][HH:]MM:SS[.m...]
[-]S+[.m...][s|ms|us]

FFMPEG命令行的常见应用整理

帮助查询类

以下命令测试环境为CMD(chcp 65001),PowerShell环境需对复杂滤镜图的-filter_complex选项的参数值两侧加引号

# 命令行帮助文档
ffmpeg -h long
# 寻找帮助条目中含字符wma的编解码器
ffmpeg –codecs | findstr wma
# 寻找帮助条目中含字符mkv的格式·容器
ffmpeg –formats | findstr mkv
# 寻找滤镜concat
ffmpeg -filters | findstr concat

流选择示例

对于如下三份文件

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels

input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)

input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)

思考以下的命令会对哪些流产生作用

# 自动流选择
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov
# 自动字幕选择
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
# 无标签滤镜图输出
ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt
# 标签式滤镜图输出
ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

容器格式及编码转换·音视频封装与提取

不涉及编码转换的容器转换较简单,只需注意流选择(直接流拷贝亦可)即可实现容器格式转换、多个音视频文件的封装及指定流的提取

单纯的格式转换

可以指定流拷贝模式对视频、字幕进行快速的格式转换

# 快速视频封装格式转换
ffmpeg –i input.mkv –c copy output.mp4
# 字幕格式转换
ffmpeg –i in.ass out.srt
音视频合成
# 快速合成有声视频
ffmpeg -i AUDIO -i VIDEO_NOAUDIO -c copy OUTPUT
# 为mkv文件加软字幕
ffmpeg –i input.mp4 –i hello.srt output.mkv
# mkv容器的合成
ffmpeg -i A.mp3 -i V.mp4 -i S.srt -c copy output.mkv
指定流的提取

如特定的无声视频、音频流、字幕流、章节信息的提取均可实现

# 强制音频提取并封装为wav
ffmpeg -i INPUT -map 0:a -c:a copy -f wav OUTPUT.wav
# 截取部分音频
ffmpeg -i INPUT -map 0:a -c:a copy –ss START –t DURATION OUTPUT
# 提取无声视频
ffmpeg –i INPUT –map 0:v –c:v copy OUTPUT
# 提取章节信息
ffmpeg –i INPUT –f ffmetadata METADATA.txt 

若转换容器的同时需转换编码,则可以实现对多媒体文件编码的几乎绝对控制,还可利用容器实现一些特殊的操作

音视频流的编码转换
# 音频编码转换
ffmpeg -i INPUT -c:a aac OUTPUT.mp3
# 综合性音视频编码转换·流选择·指定编解码器·限定码率
ffmpeg -vcodec wmv3 -acodec wmav2 –i INPUT.wmv -map 0:v -vcodec libx264 -b:v 6000k -map 0:a -acodec mp3 -b:a 320k OUTPUT.mp4
特殊软件的编码要求

PR 等剪辑软件对于导入文件的格式有严格要求(不支持mkv的导入,某些视频编码格式及像素格式也不接受),可以利用编码及容器转换满足其导入要求

# 编码暨格式转换(适配mkv文件的PR导入)可在此基础添加对码率的调整以减少视频的质量损失
ffmpeg -i input.mkv -c:v libx264 –pix_fmt yuv420p -c:a aac output.mp4
音乐视频的制作

利用loop选项可以实现音频与图片合成视频(歌曲配图片的视频)

ffmpeg -r 2 -loop 1 -i IMG -i MUSIC -s 1080*720 -pix_fmt yuv420p -shortest -c:v libx264 -c:a aac OUTPUT.mp4

音视频参数设置

可设置视频的比特率、帧率

# 设置输出视频的比特率为64kbps
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
# 强制输出24fps帧率
ffmpeg -i input.avi -r 24 output.avi
# 强制输入的帧率为1fps(仅对原始格式生效)输出帧率为24fps
ffmpeg -r 1 -i input.m2v -r 24 output.avi

可设置音频的比特率、采样率、声道数

时间控制

利用通用选项中的时间控制选项可以实现对多媒体文件的裁剪或延迟

# 视频片段截取30s-1min片段
ffmpeg -i INPUT -max_muxing_queue_size 1024 –c copy -ss 30 -t 1:00 OUTPUT
# 音频整体延迟0.5s
ffmpeg -i INPUT -map 0:a -itsoffset 0.5 -map 0:v -c:v copy OUTPUT

滤镜·字幕渲染

# 为视频文件加硬字幕
ffmpeg –i input.mp4 –vf subtitles=sub.ass output.mp4

滤镜·实用视频操作

使用滤镜可以实现对视频的缩放、裁剪、旋转、拼接、倍速播放、加水印等操作

# 改变4K60fps视频的分辨率与帧率同时尽量保持画质
ffmpeg -i 4K60fpsINPUT -vf scale=1920:-1 –r:v 24 –vb 6000k -acodec copy 1080p24fpsOUTPUT
# 将16:9长宽比视频的纵横比改为4:3,同时改变分辨率,可能失真
ffmpeg -i 16:9INPUT -vf scale=960:720,setdar=4/3 -acodec copy 4:3OUTPUT
ffmpeg -i 16:9INPUT -vf scale=960:720,setsar=1:1 -acodec copy 4:3OUTPUT
# 视频的时间(30s至1min)与空间裁剪(坐标(12,34)处的100x100像素大小的图像)
ffmpeg -i INPUT -vf crop=100:100:12:34 -ss 30 -t 30 OUTPUT
# 右上贴图或加水印
ffmpeg -i INPUT -i logo.png -filter_complex overlay=W-w:0 OUTPUT
# 跑马灯(将duration替换为相应的时间)
ffmpeg -i INPUT -i IMG -filter_complex [0:v][1:v]overlay=x='if(lte(t,duration),-w+(W+w)/2/duration*t,(W-w)/2)':y=(H-h)/2 -t duration OUTPUT
# 准确连接音视频
ffmpeg -t 00:00:05.90 -i INPUT -t 00:01:57.80 -i INPUT -filter_complex [0:0][1:0]concat=n=2:v=0:a=1[outa] -map [outa] -b:a 320k OUTPUT
# 音视频2倍速播放
ffmpeg -i INPUT –filter_complex [0:v]setpts=2.0*PTS[v],[0:a]atempo=0.5[a] –map [v] –map [a] OUTPUT

广义视频源·录屏直播

实际上,输入输出文件不仅可为本地多媒体文件,也可为设备源(如屏幕,需提前安装设备驱动)甚至互联网URL,由此便可实现本地录屏、直播推流与录制、下载m3u8流媒体文件等多种操作

# 录屏
ffmpeg -f dshow -rtbufsize 800M -framerate 25 -i video=VIDEO_DEV -f dshow -rtbufsize 60M -i audio=AUDIO_DEV1 -f dshow -rtbufsize 60M -i audio=AUDIO_DEV2 -filter_complex amix=inputs=2 -pix_fmt yuv420p -c:v h264 -c:a pcm_s16le -s 1920*1080 -b:v 2200k -preset ultrafast 录屏文件地址
# 直播推流屏幕
ffmpeg -f gdigrab -i desktop -f dshow -i audio=AUDIO_DEV0 -r 20 -vcodec libx264 -preset ultrafast -acodec aac -ac 2 -ar 44100 -ab 128k -pix_fmt yuv420p -f flv 推流目的地址
# 直播录制
ffmpeg -i 直播源 OUTPUT
# 直播录制1小时
ffmpeg -t 01:00:00.00 -i 直播源 OUTPUT
# 下载m3u8流视频
ffmpeg –i URL.m3u8 –c copy OUTPUT

其实,滤镜中的源(source)也可以产生不同的音视频以供多种目的文章来源地址https://www.toymoban.com/news/detail-407420.html

# 裁剪99s的计时器
ffmpeg -ss 00:00:01 -t 99 -f lavfi -i testsrc -vf crop=61:52:224:94 timer.mp4
# 为图片或视频配置绿幕背景
ffmpeg -i INPUT -vf color=c=green:s=480x360[bgd];[bgd][0:v]overlay=(W-w)/2:(H-h)/2 -t 10000ms OUTPUT

到了这里,关于【FFMPEG笔记·命令行手册】部分关键概念及常用命令行整理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • csgo部分常用服务器指令与一些绑定指令整理

    【1秒后刷新游戏】mp_restartgame 1  【是否打开自动平衡】mp_autoteambalance 0/1  【最高金钱16000】mp_maxmoney 16000  【死亡竞赛的回合时间60分钟】mp_roundtime 60  【休闲/竞技模式每局时间60分钟】mp_roundtime_defuse 60  【休闲/竞技模式最大局数设为30局】mp_maxrounds 30  【出生金钱为16000】

    2024年02月03日
    浏览(68)
  • conda 常用命令手册

    参考conda-cheatsheet

    2024年02月11日
    浏览(27)
  • [FFmpeg] 常用ffmpeg命令

    去水印  ffmpeg -i water.jpeg -strict -2 -vf delogo=x=300:y=250:w=56:h=18:show=0 no_water.jpeg 打时间戳 ffmpeg -i perf_60Hz_Raw.mp4 -vf \\\"drawtext=fontsize=160:fontcolor=red:text=\\\'%{pts:hms}\\\'\\\" -c:v libx264 -an -f mp4 perf_output.mp4 -y ffmpeg -i perf_8k.mp4 -vf \\\"drawtext=fontsize=160:fontcolor=red:text=\\\'%{pts:hms}\\\'\\\" -c:v libx264 -an -f mp4 perf_outpu

    2024年02月10日
    浏览(37)
  • AutoCAD 2019 常用命令速查手册

    AutoCAD 2019 常用命令速查手册 目 录 3D 命令 … 13 3DALIGN 13 3DARRAY 13 3DCONFIG 13 3DDISTANCE 14 3DDWF 14 3DFACE 14 3DFORBIT 15 3DMOVE 15 3DORBIT 16 3DPAN 16 3DPOLY 17 3DPRINT 17 3DZOOM 17 A 命令 … 18 ABOUT 18 ACISIN 18 ADCENTER 18 ADDSELECTED 19 ADJUST 19 ALIGN 19 ANIPATH 20 ANNORESET 20 ANNOUPDATE 20 APPLOAD 20 ARC 21 ARCHIVE 21 AREA 21 A

    2024年02月02日
    浏览(35)
  • ffmpeg简介及常用命令

    ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种

    2024年02月11日
    浏览(33)
  • FFmpeg- 常用的滤镜命令

    下面来熟悉一下常用的对视频操作的几个命令。这次需要完成的命令也包括在其中。 视频的画面大小的剪切(crop filter) 将输入的视频的帧,以左上角为坐标的原点,剪切成x,y坐标开始的指定大小。 语法: 简单的解释: x,y :是偏移量。 ow,oh :是输出的宽和高。 iw ih :还可以使用

    2023年04月16日
    浏览(42)
  • FFMPEG小白常用命令行

    序列帧转H264视频 ffmpeg -r 60 -f image2 -s 1920x1080 -i fram%d.jpg -vcodec libx264 -crf 25  -pix_fmt yuv420p test.mp4 -vcodec h264  .ffmpeg -r 60 -f image2 -s 1920x1080 -i %04d.jpeg -vcodec h264 test.mp4 %04d 表示用零来填充直到长度为4,i.e 0001…0020…0030…2000 and so on. 如果没有填充,需要相应更改,如 pic%d.png or %d

    2024年02月11日
    浏览(41)
  • 常用 FFmpeg 命令

    视频添加字幕 或:(烧录为 mp4,速度慢) 视频提取字幕 这将下载第一个字幕轨。如果有多个,则使用 0:s:1 下载第二个, 0:s:2 下载第三个,以此类推。可以生成任意所需的格式,改一下扩展名即可。 图片压缩 -q 4 为压缩级别,数字越大压缩级别越高 约束比例压缩 scale=-1:

    2023年04月08日
    浏览(52)
  • ffmpeg 常用命令行详解

    ffmpeg 是一个命令行音视频后期处理软件 参数说明 -i 文件,orgin.mp3 为待处理源文件 -ss 裁剪时间,后跟裁剪开始时间,或者开始的秒数 -t 裁剪时间 output.mp3 为处理结果文件 2. 合成命令 2.1 混合合成 参数说明 -i 文件 1.mp3 和 2.mp3 为待合成的两个源文件 -filter_complex 过滤器参数

    2024年01月20日
    浏览(33)
  • K8S常用命令速查手册

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包