分享

FFmpeg视频合并、视频转码、音视频提取、压制字幕等常用命令合集

 雅藏轩 2024-05-20 发布于河北

第一章:概述

FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group),为开源的影音多媒体处理框架,Ffmpeg功能强大无比,可以进行影音的解码、编码、编码转换、混合、抽取、串流和滤镜,无论影音格式是从哪个地方出来的,从过去到现在的影音格式它几乎都能够支持。

 

第二章:命令

命令行语法:

ffmpeg [全局参数] [输入文件参数] -i [输入文件] [输出文件参数] [输出文件]

注意:每个部分之间都有英文空格。

 

1、使用ffmpeg将mkv软字幕转换为mp4

转换为mp4格式 使用以下命令将mkv文件转换为mp4格式,并嵌入软字幕:

ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text output.mp4

其中,input.mkv为输入文件名,output.mp4为输出文件名。

 

或者

ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text output.mp4

其中,input.mkv为输入文件名,output.mp4为输出文件名

-c:v copy 表示视频流直接复制

-c:a copy 表示音频流直接复制

-c:s mov_text 表示字幕流以mov_text格式封装

 

软硬字幕差异对比

如果那个有内封字幕的文件拥有两个以上的字幕轨,可以使用以下指令,利用si视频滤镜参数来选择要用第几个字幕轨:

ffmpeg -i 输入的影音文件路径

-vf "subtitles='输入的含内封字幕的视频文件路径'

:si=第几个字幕轨(从0开始数)" 输出的影音文件路径

如果字幕来源是SRT,利用force_style视频滤镜参数,我们可以另外设置字幕的字体和字体大小。

 

像这样:

ffmpeg -i 输入的影音文件路径

-vf "subtitles='输入的字幕文件路径'

:force_style='FontName=字体名称,

FontSize=字体大小'" 输出的影音文件路径

 

例如要使用思源黑体作为字幕字体,并将字体大小设置为17的话,可以套用以下指令:

ffmpeg -i 输入的影音文件路径

-vf "subtitles='输入的字幕文件路径'

:si=1:force_style='FontName=Noto Sans CJK TC Regular,FontSize=17'

输出的影音文件路径

 

force_style视频滤镜参数常用的选项如下:

FontName:字体名称。

FontSize:字体大小。

Alignment:以数值来表示字幕的对齐方式,如下所示。

左            中            右

上 5          6           7

中 9          10          11

下 1          2            3

 

Bold、Italic、Underline、Strikeout:分别是粗体、斜体、底线、删除线。0为禁用;-1为激活。

PrimaryColour:主体颜色。

Outline:边框厚度。

OutlineColor:边框颜色。

Shadow:阴影距离。

BackColour:阴影颜色。

MarginL:字幕距离左边的距离,右对齐时无效。

MarginR:字幕距离右边的距离,左对齐时无效。

MarginV:字幕距离底部或顶部的距离,中对齐时无效。

颜色的格式为&HAABBGGRR,其中的AA为透明度;BB为蓝色;GG为绿色;RR为红色,以十六进制表示(00~FF)。例如不透明的红色为&H000000FF。

  

2、将mkv软字幕烧录成硬字幕

烧录为硬字幕 使用以下命令将mkv软字幕烧录为mp4硬字幕:

ffmpeg -i input.mkv -vf subtitles=input.mkv output.mp4    

其中,input.mkv为输入文件名,output.mp4为输出文件名

其他参数说明,-vf subtitles=input.mkv 表示使用input.mkv中的字幕流作为硬字幕

 

3、将mov转换成mp4

ffmpeg -i input.mov -c:v copy -c:a copy output.mp4

其中,input.mov是要转换的MOV文件名,output.mp4是你可自定义的输出MP4文件名

-c:v copy 表示视频流直接复制

-c:a copy 表示音频流直接复制

 

4、视频码率转换

ffmpeg -i input.mp4 -b:v 64k -bufsize 64k output.mp4

其中,input.mp4为输入文件名,output.mp4为输出文件名。

-b:v清晰度参数,可以控制视频的码率,码率越高,视频的清晰度也就越高。使用此参数要注意,设置过高会增加视频的文件大小以及视频的传输成本,设置过低则视频会出现模糊、马赛克等现象。-bufsize size 为设置码率控制缓冲区大小。

 

5、视频压缩(音频压缩/视频压缩)

压缩音频 

ffmpeg -i input.mp3 -ab 128 output.mp3

其中,input.mp4为输入文件名,output.mp4为输出文件名。

压缩视频

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

6、视频录制

录制视频保存在本地磁盘

ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -f h264 -r 30 ~/Downloads/test.h264

录制桌面

ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/room

录制桌面和麦克风

ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/live/room

录制桌面和麦克风,并打开摄像头拍摄

ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:2016/rtmplive/room

 

7、视频片段截取

ffmpeg -ss 00:00:02 -i input.mp4 -t 6.5 -c copy cut.mp4

ffmpeg -ss 00:00:02 -i input.mp4 -to 00:00:10 -c copy cut.mp4

其中,input.mp4为输入文件名,cut.mp4为输出文件名

-c copy表示是拷贝的方法

 

8、视频截图

ffmpeg -ss 00:00:05 -i input.mp4 -vframes 1 -q:v 5 -f image2 pic-%03d.jpeg

其中,input为输入文件名

-ss 00:00:05 从第五秒开始

-vframes 1 只截取1帧

-q:v 5 图片质量1-5

 

9、提取视频中的纯视频或纯音频

提取视频

ffmpeg -i input.mp4 -an output.mp4

其中,input.mp4为输入文件名,output.mp4为输出文件名。

提取音频

ffmpeg -i input.mp4 -vn output.mp3

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

10、视频比例转换

ffmpeg -i input.mp4 -aspect 21:9 output.mp4

将原视频转换成21比9,生成新视频

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

11、视频容器转换

ffmpeg -i input.mp4 output.avi

将mp4转换为avi

其中,input.mp4为输入文件名,output.avi为输出文件名。

 

12、分辨率转换

ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4

将原视频转换成480p视频文件

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

13、获取视频信息

ffmpeg -i input.mp4

 

14、帧率转换

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

将原视频转换为24帧视频

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

15、视频倍速

视频5倍速播放指令示例

ffmpeg -i input "setpts=PTS/5" output.mp4

音频2倍速播放指令示例

fmpeg -i input.mp4 -filter:a "atempo=2.0" output.mp4

音视频同时2倍速指令示例

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

其中,input.mp4为输入文件名,output.mp4为输出文件名。

 

16、修改视频的帧率和分辨率

ffmpeg.exe -r 60 -i input.mp4 -s 1920x1080 -crf 12 output.mp4

将文件input.mp4转成一个帧率60分辨率1080p的视频,这里要指定crf,否则画质质量可能很差,此命令会改变视频的时间长度。

ffmpeg.exe -i video.mp4 -s 1920x1080 -r 24 -crf 12 output.mp4

如果把 -r 放后面,不会改变视频时间长度,如上指令,把60帧的改为24帧。

其中,input.mp4为输入文件名,output.mp4为输出文件名。

-crf表示压缩质量相关参数,越小画质越好,但文件越大。

 

第三章:总结

在媒体处理上,市面上有很多软件可以选择,在众多软件里面 FFmpeg 是比较独特的一款,直接选择 FFmpeg 硬核命令行工具的朋友相对较少,大多时候只是被集成在各样的软件里,如果单独拿出来使用,不少人会觉得有点懵和抗拒的。

 

它通常被称为媒体转码或流媒体的瑞士军刀。我们可以使用 FFmpeg 来执行很多功能。代码是用 C 语言编写的,并针对最佳性能进行了优化。它的命令很容易运行。一旦你熟悉了这些概念,就可以非常灵活地使用所有过滤器和选项来满足你的需求。

 

FFmpeg 支持广泛的代码、格式、设备和协议,这使其成为转码引擎的理想选择。与许多已停产的项目不同,20 多年来它仍在积极开发 。有一个庞大的开发人员、用户和贡献者社区,他们不断开发新功能和修复程序。

 

FFmpeg 已被用于 YouTube 和 iTunes 等视频平台的核心处理。我们大多数人都使用像 VLC 这样的媒体播放器来播放视频文件。VLC 使用 FFmpeg 库作为其核心。一些视频编辑器和移动应用程序也在幕后使用 FFmpeg。

 

FFmpeg 提供了丰富的功能,可以进行视频的解码、编码、转码、剪辑、拼接、滤镜效果、截图、生成缩略图等操作。它还支持流媒体的传输和转发,可以通过网络实时播放或推送音视频数据。同时FFmpeg 是一个底层的多媒体处理框架,对于开发人员来说,它提供了丰富的 API,可以在自己的应用程序中直接调用 FFmpeg 的功能,实现自定义的音视频处理需求。

FFmpeg 是一个功能强大、灵活易用的多媒体处理工具,被广泛应用于音视频处理、流媒体服务、音视频编解码等领域。

 

1、支持视频编码h264 / h265 / NVENC / QuickSync / ProRes。

2、支持音频编码MP3 / AAC / AC3 / FLAC / WAV。

3、可以批量处理多文件,批量编码成千上万个媒体文件。

4、完成媒体文件编码之后支持自动关闭,并运行后续脚本。

5、支持用户自定义设置媒体编码的优先级。

6、拖放,流映射和复用,可以批量下载M3U8网址。

8、支持FFmpeg A / V编码向导,让您轻松使用。

9、筛选档案,修剪和串联文件,批量下载油管视频。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多