使用ffmpeg进行视频与音频格式转换。avi转mp4,flac转mp3,m4a转mp3等
ffmpeg简介:
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
用得比较广泛,好像格式工厂和腾讯视频等很多播放器内核都用了它,你可以用他来做一个自己的格式转化工具与视频播放器
视频音频界的大佬:https://blog.csdn.net/leixiaohua1020
ffmpeg下载:
源码地址:git clone https://git.ffmpeg.org/ffmpeg.git ffmpe
下载地址:http://ffmpeg.org/download.html
云盘链接:https://pan.baidu.com/s/135qlv4ByPdYxWgJgIfF3UQ
提取码:61yq
windows环境:
然后自己点击下载即可
|2021-2-22更新,现在下载和以前有些不一样了
下载后解压在Bin目录可以看到,以前使用得三个exe
|FFMPEG分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于:
Static里面只有3个应用程序:
ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。
Shared里面除了3个应用程序:
ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。
Shared里面的exe体积很小:
他们在运行的时候,到相应的Dll中调用功能。Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。
|不同工具的作用:
ffmpeg.exe:音视频转码、转换器
ffplay.exe:简单的音视频播放器
ffserver.exe:流媒体服务器
ffprobe.exe:简单的多媒体码流分析器
我这里下载的是static版本,下载完后直接解压:
能看到三个应用程序:
使用cmd命令在这个目录执行一下查看版本的命令: ffmpeg -version
能看到就说明执行成功了
转化视频格式:
很简单只需要一条命令即可。(要在ffmpeg.exe所在目录执行,或者使用其他方式能够找到这个命令的)
把dmg.mp4转成.avi格式:
ffmpeg -i dmg.mp4 output.avi
把dmg.mp4转成.webm格式:
ffmpeg -i dmg.mp4 otest.webm
转化成功效果如下:
wmv转换成mp4:
ffmpeg -i xx.wmv output.mp4
音频格式转化之flac转成mp3:
转化命令如下:
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
循环转化:
如果需要转化的音乐文件flac很多,一个一个转化太慢了,就可以循环转化
把下载的ffmped复制到需要转化歌曲的文件夹中,或者是把歌复制到下载的ffmped文件夹中,或者不在一个文件夹中需要指明路径即可反正要命令能够找到就行了。
创建一个记事本,加入下面的代码,然后把记事本的后缀修改为bat点击执行即可。
for %%f in (*.flac) do (ffmpeg -i "%%f" -ab 320k -map_metadata 0 -id3v2_version 3 "%%f.mp3")
转化的音乐和ffmped.exe目录不一致的时候也是可以的,指定一下ffmped.exe目录就行了,比如我这里的目录是放在的 D:\DLL\ffmpeg\ffmpeg.exe
for %%f in (*.flac) do (D:\DLL\ffmpeg\ffmpeg -i "%%f" -ab 320k -map_metadata 0 -id3v2_version 3 "%%f.mp3")
linux或者是mac可以使用如下命令进行循环转化:
find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;
音频格式转化之m4a转mp3:
转化命令如下:
ffmpeg -i a.m4a -y -acodec libmp3lame -aq 0 a.mp3
循环转化:
和上面的循环转化一个道理,创建一个记事本,加入下面的代码,修改成bat执行即可
@echo off & title for %%a in (*.m4a) do ( ffmpeg.exe -i "%%~sa" -y -acodec libmp3lame -aq 0 "%%~na.mp3" ) pause
转化的音乐和ffmped.exe目录不一致的时候也是可以的,指定一下ffmped.exe目录就行了,比如我这里的目录是放在的 D:\DLL\ffmpeg\ffmpeg.exe
@echo off & title for %%a in (*.m4a) do ( D:\DLL\ffmpeg\ffmpeg.exe -i "%%~sa" -y -acodec libmp3lame -aq 0 "%%~na.mp3" ) pause
c#调用:
最简单的方式就是直接使用c#来执行命令,得到命令执行的返回值,然后根据返回值来提醒是否转化成功