音视频领域强大的辅助工具-ffmpeg常用操作介绍

音视频领域强大的辅助工具-ffmpeg常用操作介绍


前端时间老是有人问我,有没有其他格式的视频或音频提供,愿意有偿获取,如果其对ffmpeg比较熟悉,就不会那么麻烦。经常从事流媒体领域开发和研究工作的人,ffmpeg应该是我们最常用到的流媒体工具,很多流媒体软件都直接集成了ffmpeg库或者工具程序,直接使用其协议接入、协议转换、流媒体封装、流媒体编解码等能力或者库实现对应的功能。本文主要介绍使用我们在流媒体开发调试过程中比较常用的ffmpeg命令,对其命令及使用场景进行介绍,如果后续用到,可直接查询本文相关内容。相关测试的音视频文件可相关测试的音视频文件关注公众号 ,发送 视频流分析来获取。

1 ffmpeg安装部署

不做详细介绍,进官网,选择操作系统,下载安装即可。官网地址如下:
https://ffmpeg.org/

也可下载源码,自己编译。

通过安装包安装后,相关执行路径会自动添加到系统环境变量里,不需要自己添加,可在cmd里直接运行:
ffmeg -version
如果返回版本信息,则说明安装成功。

2 ffmpeg命令格式介绍

命令格式:

ffmpeg -i [输入文件名/地址] [参数选项] -f [格式] [输出文件/地址]

参数解释:

  1. -i后为媒体流的输入,可以为文件,也可以是视频流地址
  2. [参数选项]定义流媒体转换的参数,详细定义了转换的方式
  3. -f 后为输出的媒体流格式,定义输出媒体流的输出格式
  4. 之后直接为输出媒体流到文件或者到推送地址

例如:ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts
参数-i后为流媒体的输入,为H264裸流文件test.h264;参数选型为-vcodec copy 表示视频的编码格式为流媒体源的格式,即还是H264;-f mpegts表示输出的流媒体为ts;test.ts表示输出到的目标文件名。

ffmpeg中起到转换作用的[参数选项],其后可根据实际需要进行输出媒体流的输出方式、编码类型、媒体类型等进行配置,也是我们实现流媒体转码的参数配置的地方,这里介绍下常用的参数说明

  • -vcodec 视频编码类型,可以与输入保持一致(copy),也可以转码为其他格式,比如:

2 ffmpeg实现流媒体转码

我们经常看到网上分享很多离线或在线工具,对音视频文件类型进行转换,其基本上是使用了ffmpeg的库或者直接封装了ffmpeg的程序来实现的,因为ffmpeg支持的文件封装协议非常全、编解码库支持的音视频编码类型也非常的全,由于其基于C编写的,因此整个程序/库也非常的小巧、稳定且效率高,是此类开源软件中应用非常广泛的,下面从音视频文件转格式、音视频转码等方面进行介绍。

2.1 音视频文件格式转换

2.2 网络串流流与流媒体文件之间的转换

网络串流转文件,支持RTSP、RTMP、HLS等常用的网络串流协议,文件格式支持常用的音视频文件格式,各位可以多试试,这里以RTSP转mp4为例,命令如下:

ffmpeg -i "rtsp://admin:admin12345@10.45.12.12:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1" -c:v copy -c:a copy  -f mp4 -movflags frag_keyframe output_test.mp4
  • 输入为rtsp实时流:rtsp://admin:admin12345@10.45.12.12:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1
  • 转换的音频编码和视频编码不变:-c:v copy -c:a copy
  • 输出格式为分片的mp4格式:-f mp4 -movflags frag_keyframe
  • 输出的文件名:output_test.mp4

当然我们也可以把流媒体文件转换为网络串流的格式输出,这里以把mp4文件通过循环播放的方式转为rtsp串流为例,进行说明:

相关示例文件请关注公众号,发送 视频流分析 获取。

2.3 文件封装格式转换

如果只进行文件封装格式的转换,可以非常简单,比如mp4转avi,可使用如下命令:
ffmpeg -i output_test.mp4 output.avi

以上直接转文件封装格式,不改变音视频的编码信息,类似如下命令:
ffmpeg -i output_test.mp4 -c:v copy -c:a copy output.avi

当前ffmpeg支持的音视频文件格式常用的有:

  • 视频格式:MP4、AVI、MKV、MOV、FLV、WMV等。
  • 音频格式:MP3、WAV、AAC、FLAC、OGG等。
  • 图像格式:JPEG、PNG、GIF、BMP等。
  • 流媒体协议:RTMP、HLS、HTTP、RTSP等。

2.4 文件编码格式转换

如果需要对音视频文件格式转换时,改变音视频编码信息,可增加参数选项,定义输出的音视频编码格式,比如
ffmpeg -i input_h264.mp4 -c:v libx265 -crf 28 output_h265.mp4

输入视频编码类型为H264,输出的视频编码类型为H265,音频编码类型不变,-crf为码率控制模式,其值越大质量越差。

ffmpeg支持非常多的编码格式,只要支持的都可以通过参数选项进行转换,可通过命令:ffmpeg -codecs查询。

更多的转码方式请自行探索,下面列举处常用的视频编码格式,c:v 参数中使用的枚举值,如下:

  • libx264 :H.264编码器,广泛用于视频压缩和传输。
  • libx265 :H.265(HEVC)编码器,提供更高的压缩效率和更好的视频质量。
  • libvpx :VP8和VP9编码器,用于WebM格式。
  • libtheora :Theora编码器,用于Ogg格式。
  • mpeg4 :MPEG-4 Part 2编码器,常用于旧版视频编码。
  • msmpeg4 :Microsoft MPEG-4版本3编码器,用于旧版Windows平台。

ffmpeg常用音频的编码格式,-c:a参数枚举值,常用的如下:
-c:a 参数的一些常见枚举值,用于指定FFmpeg中的音频编解码器:

  • aac :高级音频编码(Advanced Audio Coding),通常用于高质量音频压缩。
  • mp3 :MPEG音频层3,一种常用的音频编解码器,用于压缩音频。
  • opus :Opus,一种多用途高效的音频编解码器,适用于各种应用。
  • vorbis :Vorbis,一种开源音频编解码器,常用于Ogg格式。
  • pcm_s16le :PCM有符号16位小端格式,一种无损的未压缩音频格式。
  • pcm_mulaw:是一种音频编解码器,代表着脉冲编码调制(PCM)的μ律编码。它用于电话系统和一些传统音频格式的音频压缩。
  • flac :无损音频编解码器,用于无损音频压缩。
  • ac3 :音频编解码器3,常用于DVD和蓝光光盘的环绕声音频。

有读者询问有没有G711U的音频,其实如果你有aac,可通过如下命令直接转换得到:
ffmpeg -i input.aac -c:a pcm_mulaw outg711u.wav

2.5 文件混合格式转换

在进行流媒体系统开发时,经常需要模拟流媒体服务对外提供HLS、RTSP、RTMP等流媒体访问能力,以MP4文件循环读取并推送rtmp流为例,命令如下:
ffmpeg -re -stream_loop -1 -i .\input_h264.mp4 -vcodec copy -codec copy -f flv rtmp://localhost/live/test
通过此命令把视频文件模拟成RTMP推流到RTMP服务器,再结合OBS、EasyDarwin等工具,可模拟RTMP、RTSP流媒体服务器,提供RTSP、RTMP能力。
mp4模拟RTSP流可参照:https://blog.csdn.net/qq_30714157/article/details/118732111

3 ffmepg实现流媒体协议转换

在流媒体服务领域,特别直播领域,经常会碰到各种流媒体协议的转换,这里如果善用ffmpeg可以很快做出质量很高的转换小程序,这里以RTSP转HLS为例,通过ffmpeg命令转换如下:

ffmpeg -i rtsp://admin:zxm10***@10.45.12.112/h264/ch1/main/av_stream -c copy -f hls -segment_list_flags +live -hls_time 10 -segment_list_size 6  /tmp/hls/hls.m3u8

通过上面的命令,可从rtsp://admin:zxm10***@10.45.12.112/h264/ch1/main/av_stream拉取RTSP流,以HLS切片的形式输出到目录/tmp/hls下,其中:

  • -i:将 rtsp://input_stream_url 替换为您要转换的实际RTSP流的URL。
  • -c copy:相当于-c:v copy 和 -c:a copy 选项将复制视频和音频流而无需重新编码,有助于保留原始质量。
  • -hls_time 10 指定片段的持续时间(以秒为单位)。您可以根据需要调整此值。
  • -hls_list_size 6 确定播放列表中保留的片段数量。您可以根据需要修改此值。
  • -f hls 将输出格式设置为HLS。
  • hls.m3u8 是输出的HLS播放列表文件。

结合nginx,即可实现HLS流媒体服务,可参照文章:https://blog.csdn.net/water1209/article/details/128664784

4 ffmpeg使用总结

以上对ffmpeg经常用到的一些命令进行了说明,ffmpeg是非常强大的工具,如果善于使用,可极大的提高我们在流媒体领域的工作效率。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: mobile-ffmpeg-full 是一个基于 FFmpeg 的移动端多媒体处理库。FFmpeg 是一个开源的多媒体处理工具,可以对音频、视频、字幕等多种媒体文件进行编解码和转换。 mobile-ffmpeg-full 是移动端的一个扩展,为移动设备提供了对 FFmpeg 的广泛支持。它可以在 Android 和 iOS 平台上使用,并且提供了丰富的功能,包括音频转码、视频剪辑、添加水印、合并音视频、获取视频缩略图等。 使用 mobile-ffmpeg-full 可以方便地对移动设备上的多媒体文件进行处理。它提供了简洁的 API 接口,使得开发者能够轻松地调用各种功能。同时,它还提供了高效的处理能力,能够在移动设备上快速地处理大量的媒体文件。 移动设备的媒体处理需求越来越多样化,mobile-ffmpeg-full 提供了一个强大而灵活的解决方案。它不仅可以满足常见的媒体处理需求,还支持自定义的编码和解码参数,使得开发者能够根据具体需求进行定制。 总而言之,mobile-ffmpeg-full 是一个功能强大、易于使用的移动端多媒体处理库,它为移动设备上的媒体处理提供了丰富的功能和高效的性能。无论是开发媒体编辑应用,还是进行媒体文件处理,在移动设备上使用 mobile-ffmpeg-full 都是一个不错的选择。 ### 回答2: mobile-ffmpeg-full是一款为移动设备开发的功能强大FFmpeg库。FFmpeg是一个开源的音频和视频处理工具,可以处理各种格式的音视频文件。 mobile-ffmpeg-full提供了完整的FFmpeg功能,可以在移动设备上进行音视频的转码、剪辑、解码等操作。它支持多种音频和视频格式,包括常见的MP3、MP4、AVI等,也支持高级的音频编码格式和视频编码格式。 使用mobile-ffmpeg-full,我们可以在移动设备上灵活地处理音视频文件。比如,我们可以将一个音频文件转为另一种格式,或者将一个视频文件裁剪成指定时长。我们还可以添加水印、调整音量、变速播放等。 mobile-ffmpeg-full易于集成到移动应用程序中。它提供了简洁的API接口,开发者可以轻松使用它的功能。同时,它也提供了详细的文档和示例代码,帮助开发者快速上手并解决问题。 总的来说,mobile-ffmpeg-full是一种非常实用的工具,可以帮助开发者在移动设备上进行音视频处理。它具有强大的功能和易用的特点,让我们可以更加灵活地处理音视频文件,满足不同场景下的需求。无论是开发媒体应用还是进行多媒体处理,mobile-ffmpeg-full都是一个很好的选择。 ### 回答3: mobile-ffmpeg-full 是一款针对移动设备开发的完整版 FFmpeg 库。FFmpeg 是一个开源的跨平台音视频处理工具集,拥有广泛的应用领域。mobile-ffmpeg-full 提供了完整的 FFmpeg 功能,使移动设备具备强大音视频处理能力。 mobile-ffmpeg-full 的特点包括以下几点。首先,它支持多种音视频格式的解码和编码,可以处理包括 MP4、MKV、MOV、FLV、MP3、AAC 等常见的音视频格式。其次,它提供了丰富的音视频处理功能,包括剪辑、拼接、转码、压缩、添加音视频轨道、提取音频等,满足了开发者对音视频处理的各种需求。此外,mobile-ffmpeg-full 还支持图像处理功能,如截图、添加水印等。 这个库的设计目标是在移动设备上提供高效的音视频处理能力。它采用了精简的架构和优化的算法,以提高音视频处理的性能和效率。同时,mobile-ffmpeg-full 支持多线程工作模式,可以充分利用多核处理器的优势,实现更快的处理速度。 开发者可以通过添加 mobile-ffmpeg-full 库到自己的移动应用程序中,实现各种复杂的音视频处理需求。无论是开发视频编辑软件、媒体播放器还是音视频社交应用,mobile-ffmpeg-full 都可以提供强大的支持。此外,移动设备上的 FFmpeg 库还可以应用于音频视频剪辑、分割、转码、加速、拼接等方面的需求,满足用户在移动端的各种音视频处理需求。 总之,mobile-ffmpeg-full 是一款强大而且灵活的移动设备音视频处理库,为移动应用开发者提供了完整的 FFmpeg 功能和高效的处理能力,可以实现各种音视频处理需求。无论是开发专业的视频编辑软件,还是实现简单的音视频处理功能,mobile-ffmpeg-full 都是一个理想的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹零仓

感谢您的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值