合肥网站建设服务,使用wordpress搭建博客,有网站教做水电资料吗,上海上市公司100强1 ffmpeg介绍
FFmpeg 是一个非常强大和灵活的开源工具集#xff0c;用于处理音频和视频文件。它提供了一系列的工具和库#xff0c;可以用于录制、转换、流式传输和播放音频和视频。 FFmpeg 主要特点如下#xff1a; 格式支持广泛#xff1a;FFmpeg 支持几乎所有的音频和视…1 ffmpeg介绍
FFmpeg 是一个非常强大和灵活的开源工具集用于处理音频和视频文件。它提供了一系列的工具和库可以用于录制、转换、流式传输和播放音频和视频。 FFmpeg 主要特点如下 格式支持广泛FFmpeg 支持几乎所有的音频和视频格式包括非常流行的格式如 MP4, AVI, MOV, MP3, AAC 等。 转码和处理能力它可以用来转换文件格式调整视频质量和分辨率提取音频合并或分割视频文件等。 流媒体功能FFmpeg 可以用于实时视频流的捕获、编码和转码非常适合直播应用。 命令行工具通过命令行界面用户可以使用一系列的命令和参数来精确控制音视频处理过程。 编程接口FFmpeg 提供了丰富的编程接口开发者可以使用它们来集成音视频处理功能到自己的应用中。 社区和文档有着活跃的开发社区和详细的文档使得用户和开发者可以轻松地学习和使用 FFmpeg。 跨平台兼容性它可以在多种操作系统上运行包括 Windows, macOS, Linux 等。 免费和开源FFmpeg 是完全免费和开源的适用于个人和商业用途。
一个典型的视频转换处理过程 2 ffmpeg使用场景 2.1 查看视频基本信息
ffmpeg -i video01.mp4
显示结果如下
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developersbuilt with gcc 7.3.0 (crosstool-NG 1.23.0.449-a04d0)configuration: --prefix/tmp/build/80754af9/ffmpeg_1587154242452/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho --cc/tmp/build/80754af9/ffmpeg_1587154242452/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc --disable-doc --enable-avresample --enable-gmp --enable-hardcoded-tables --enable-libfreetype --enable-libvpx --enable-pthreads --enable-libopus --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-static --enable-version3 --enable-zlib --enable-libmp3lame --disable-nonfree --enable-gpl --enable-gnutls --disable-openssl --enable-libopenh264 --enable-libx264libavutil 56. 31.100 / 56. 31.100libavcodec 58. 54.100 / 58. 54.100libavformat 58. 29.100 / 58. 29.100libavdevice 58. 8.100 / 58. 8.100libavfilter 7. 57.100 / 7. 57.100libavresample 4. 0. 0 / 4. 0. 0libswscale 5. 5.100 / 5. 5.100libswresample 3. 5.100 / 3. 5.100libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from video01.mp4:Metadata:major_brand : XAVCminor_version : 17506303compatible_brands: XAVCmp42iso6creation_time : 2021-01-24T08:58:52.000000ZDuration: 00:06:22.56, start: 0.000000, bitrate: 305946 kb/sStream #0:0[0x1](und): Video: h264 (High 4:2:2) (avc1 / 0x31637661), yuv422p10le(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 279989 kb/s, 100 fps, 100 tbr, 100k tbn (default)Metadata:creation_time : 2021-01-24T08:58:52.000000Zhandler_name : Video Media Handlervendor_id : [0][0][0][0]encoder : AVC CodingSide data:displaymatrix: rotation of -90.00 degreesStream #0:1[0x2](und): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, 2 channels, s16, 1536 kb/s (default)Metadata:creation_time : 2021-01-24T08:58:52.000000Zhandler_name : Sound Media Handlervendor_id : [0][0][0][0]Stream #0:2[0x3](und): Data: none (rtmd / 0x646D7472), 23756 kb/s (default)Metadata:creation_time : 2021-01-24T08:58:52.000000Zhandler_name : Timed Metadata Media Handlertimecode : 07:34:17:80视频分辨率 1920x1080 时长00:06:33.15 帧率25fps 编码器h264 音频采样率48000HZ 音频编码aac
2.2 调整视频码率和分辨率
ffmpeg -i video01.mp4 -vf scale1080*1920 -r 25 processed_video01.mp4查看转换后的视频信息
ffmpeg -i processed_video01.mp4
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developersbuilt with gcc 7 (GCC)configuration: libavutil 56. 51.100 / 56. 51.100libavcodec 58. 91.100 / 58. 91.100libavformat 58. 45.100 / 58. 45.100libavdevice 58. 10.100 / 58. 10.100libavfilter 7. 85.100 / 7. 85.100libswscale 5. 7.100 / 5. 7.100libswresample 3. 7.100 / 3. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from processed_video01.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf60.11.100Duration: 00:06:22.64, start: 0.000000, bitrate: 1038 kb/sStream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p10le(tv, bt709), 1080x1920 [SAR 1:1 DAR 9:16], 903 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)Metadata:handler_name : Video Media Handlerencoder : Lavc60.26.100 libx264Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)Metadata:handler_name : Sound Media Handler
2.3 提取视频的第一帧
ffmpeg -i video01.mp4 -ss 00:00:01 -vframes 1 output.jpg
查看截取后的图片信息
ffmpeg -i output.jpg
ffmpeg version 2023-09-07-git-9c9f48e7f2-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprintlibavutil 58. 19.100 / 58. 19.100libavcodec 60. 26.100 / 60. 26.100libavformat 60. 11.100 / 60. 11.100libavdevice 60. 2.101 / 60. 2.101libavfilter 9. 11.100 / 9. 11.100libswscale 7. 3.100 / 7. 3.100libswresample 4. 11.100 / 4. 11.100libpostproc 57. 2.100 / 57. 2.100
Input #0, image2, from output.jpg:Duration: 00:00:00.04, start: 0.000000, bitrate: 14454 kb/sStream #0:0: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 1080x1920 [SAR 1:1 DAR 9:16], 25 fps, 25 tbr, 25 tbn
At least one output file must be specified2.4 截取第10帧以后得视频
ffmpeg -i processed_video01.mp4 -vf selectgte(n\, 10) cut_video01.mp4
查看截取后的视频信息
ffmpeg -i cut_video01.mp4
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developersbuilt with gcc 7 (GCC)configuration: libavutil 56. 51.100 / 56. 51.100libavcodec 58. 91.100 / 58. 91.100libavformat 58. 45.100 / 58. 45.100libavdevice 58. 10.100 / 58. 10.100libavfilter 7. 85.100 / 7. 85.100libswscale 5. 7.100 / 5. 7.100libswresample 3. 7.100 / 3. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from cut_video01.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2mp41encoder : Lavf58.45.100Duration: 00:06:22.64, start: 0.000000, bitrate: 1179 kb/sStream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1080x1920 [SAR 1:1 DAR 9:16], 1046 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)Metadata:handler_name : Video Media HandlerStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)Metadata:handler_name : Sound Media Handler
2.5 跳过第一秒截取视频
ffmpeg -i processed_video01.mp4 -ss 3 cut2_video01.mp4 查看处理后的视频
ffmpeg -i cut2_video01.mp4
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developersbuilt with gcc 7 (GCC)configuration: libavutil 56. 51.100 / 56. 51.100libavcodec 58. 91.100 / 58. 91.100libavformat 58. 45.100 / 58. 45.100libavdevice 58. 10.100 / 58. 10.100libavfilter 7. 85.100 / 7. 85.100libswscale 5. 7.100 / 5. 7.100libswresample 3. 7.100 / 3. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from cut2_video01.mp4 :Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2mp41encoder : Lavf58.45.100Duration: 00:06:19.64, start: 0.000000, bitrate: 1179 kb/sStream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1080x1920 [SAR 1:1 DAR 9:16], 1046 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)Metadata:handler_name : Video Media HandlerStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)Metadata:handler_name : Sound Media Handler
At least one output file must be specified
2.6 使用图片文件集合和音频合成视频
ffmpeg -f image2 -i pictures/%06d.png -i audio/audio01.wav -c:a aac -r 25 video_01.mp4
查看处理后的视频
ffmpeg -i video_01.mp4
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developersbuilt with gcc 7.3.0 (crosstool-NG 1.23.0.449-a04d0)configuration: --prefix/tmp/build/80754af9/ffmpeg_1587154242452/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho --cc/tmp/build/80754af9/ffmpeg_1587154242452/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc --disable-doc --enable-avresample --enable-gmp --enable-hardcoded-tables --enable-libfreetype --enable-libvpx --enable-pthreads --enable-libopus --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-static --enable-version3 --enable-zlib --enable-libmp3lame --disable-nonfree --enable-gpl --enable-gnutls --disable-openssl --enable-libopenh264 --enable-libx264libavutil 56. 31.100 / 56. 31.100libavcodec 58. 54.100 / 58. 54.100libavformat 58. 29.100 / 58. 29.100libavdevice 58. 8.100 / 58. 8.100libavfilter 7. 57.100 / 7. 57.100libavresample 4. 0. 0 / 4. 0. 0libswscale 5. 5.100 / 5. 5.100libswresample 3. 5.100 / 3. 5.100libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from video_01.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.29.100Duration: 00:03:27.52, start: 0.000000, bitrate: 4405 kb/sStream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 2160x3840, 4335 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)Metadata:handler_name : VideoHandlerStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 69 kb/s (default)Metadata:handler_name : SoundHandler
3 ffmpeg知识补充
FFMPEG堪称自由软件中最完备的一套多媒体支持库它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器堪称多媒体业界的瑞士军刀。因此对于从事多媒体技术开发的工程师来说深入研究FFMPEG成为一门必不可少的工作可以这样说FFMPEG之于多媒体开发工程师的重要性正如kernel之于嵌入式系统工程师一般。
几个小知识
FFMPEG项目是由法国人Fabrice Bellard发起的此人也是著名的CPU模拟器项目QEMU的发起者同时还是圆周率算法纪录的保持者。FF是Fast Forward的意思翻译成中文是“快进”。FFMPEG的LOGO是一个”Z字扫描”示意图Z字扫描用于将图像的二维频域数据一维化同时保证了一维化的数据具备良好的统计特性从而提高其后要进行的一维熵编码的效率。
FFMPEG大部分代码遵循LGPL许可证如果使用者对FFMpeg进行了修改要求公布修改的源代码有少部分代码遵循GPL许可证要求使用者同时公开使用FFMpeg的软件的源代码。实际上除去部分具备系统软件开发能力的大型公司Microsoft、Apple等以及某些著名的音视频技术提供商Divx、Real等提供的自有播放器之外绝大部分第三方开发的播放器都离不开FFMpeg的支持像Linux桌面环境中的开源播放器VLC、MPlayerWindows下的KMPlayer、暴风影音以及Android下几乎全部第三方播放器都是基于FFMPEG的。也有许多看似具备自主技术的播放器其实也都不声不响地使用了FFMPEG这种行为被称为“盗窃”参与“盗窃”的公司则被请入耻辱厅如于2009年上榜的国产播放器暴风影音、QQ影音。
关于FFMPEG的商业应用与其他开源软件不同的是FFMPEG所触及的多媒体编解码算法中有相当一部分处于大量的专利涵盖范围之内因此在商业软件中使用FFMPEG必须考虑可能造成的对专利所有者的权利侵犯这一点在FFMPEG的官方网站也有所提及所涉及的风险需使用者自行评估应对。
FFMPEG从功能上划分为几个模块分别为核心工具libutils、媒体格式libavformat、编解码libavcodec、设备libavdevice和后处理libavfilter, libswscale, libpostproc分别负责提供公用的功能函数、实现多媒体文件的读包和写包、完成音视频的编解码、管理音视频设备的操作以及进行音视频后处理。
3.1 使用FFMPEG
这里指FFMPEG提供的命令行CLI工具ffmpeg其使用方法如下方括号表示可选项花括号表示必选项目
ffmpeg [global options] {[infile options][-i infile] ...} {[outfile options] outfile ...}
参数选项由三部分组成可选的一组全局参数、一组或多组输入文件参数、一组或多组输出文件参数其中每组输入文件参数以‘-i’为结束标记每组输出文件参数以输出文件名为结束标记。
3.2 基本选项
能力集列表
-formats列出支持的文件格式。-codecs列出支持的编解码器。-decoders列出支持的解码器。-encoders列出支持的编码器。-protocols列出支持的协议。-bsfs列出支持的比特流过滤器。-filters列出支持的滤镜。-pix_fmts列出支持的图像采样格式。-sample_fmts列出支持的声音采样格式。
常用输入选项
-i filename指定输入文件名。-f fmt强制设定文件格式需使用能力集列表中的名称缺省是根据扩展名选择的。-ss hh:mm:ss[.xxx]设定输入文件的起始时间点启动后将跳转到此时间点然后开始读取数据。
对于输入以下选项通常是自动识别的但也可以强制设定。
-c codec指定解码器需使用能力集列表中的名称。-acodec codec指定声音的解码器需使用能力集列表中的名称。-vcodec codec指定视频的解码器需使用能力集列表中的名称。-b:v bitrate设定视频流的比特率整数单位bps。-r fps设定视频流的帧率整数单位fps。-s WxH : 设定视频的画面大小。也可以通过挂载画面缩放滤镜实现。-pix_fmt format设定视频流的图像格式如RGB还是YUV。-ar sample rate设定音频流的采样率整数单位Hz。-ab bitrate设定音频流的比特率整数单位bps。-ac channels设置音频流的声道数目。
常用输出选项
-f fmt强制设定文件格式需使用能力集列表中的名称缺省是根据扩展名选择的。-c codec指定编码器需使用能力集列表中的名称编码器设定为”copy“表示不进行编解码。-acodec codec指定声音的编码器需使用能力集列表中的名称编码器设定为”copy“表示不进行编解码。-vcodec codec指定视频的编码器需使用能力集列表中的名称编解码器设定为”copy“表示不进行编解码。-r fps设定视频编码器的帧率整数单位fps。-pix_fmt format设置视频编码器使用的图像格式如RGB还是YUV。-ar sample rate设定音频编码器的采样率整数单位Hz。-b bitrate设定音视频编码器输出的比特率整数单位bps。-ab bitrate设定音频编码器输出的比特率整数单位bps。-ac channels设置音频编码器的声道数目。-an 忽略任何音频流。-vn 忽略任何视频流。-t hh:mm:ss[.xxx]设定输出文件的时间长度。-to hh:mm:ss[.xxx]如果没有设定输出文件的时间长度的画可以设定终止时间点。
3.3 流标识
FFMPEG的某些选项可以对一个特定的媒体流起作用这种情况下需要在选项后面增加一个流标识。流标识允许以下几种格式
流序号。譬如“:1”表示第二个流。流类型。譬如“:a“表示音频流流类型可以和流序号合并使用譬如“:a:1”表示第二个音频流。节目。节目和流序号可以合并使用。流标识。流标识是一个内部标识号。
假如要设定第二个音频流为copy则需要指定-codec:a:1 copy
3.4 音频选项
-aframes等价于frames:a输出选项用于指定输出的音频帧数目。-aq等价于q:a老版本为qscale:a用于设定音频质量。-atag等价于tag:a用于设定音频流的标签。-af等价于filter:a用于设定一个声音的后处理过滤链其参数为一个描述声音后处理链的字符串。
3.5 视频选项
-vframes等价于frames:v输出选项用于指定输出的视频帧数目。-aspect设置宽高比如4:3、16:9、1.3333、1.7777等。-bits_per_raw_sample设置每个像素点的比特数。-vstats产生video统计信息。-vf等价于filter:v用于设定一个图像的后处理过滤链其参数为一个描述图像后处理链的字符串。-vtag等价于tag:v用于设定视频流的标签。-force_fps强制设定视频帧率。-force_key_frames显式控制关键帧的插入参数为字符串可以是一个时间戳也可以是一个“expr:”前缀的表达式。如“-force_key_frames 0:05:00”、“-force_key_frames expr:gte(t,n_forced*5)”