第一章:概述 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、筛选档案,修剪和串联文件,批量下载油管视频。 |
|