FFmpeg是比较经典,也是比较流行的多媒体工具库(demux,mux, decode,encode等等),支持格式也比较丰富,也比较实用。
做多媒体开发的经常都需要使用到各种格式的音视频对自己的开发成果进行测试。 要收集齐这些音视频测试文件可不容易,尤其是要精确到profile,比如h264的BP/MP/HP, mpeg4的SP/ASP等等。
这里就到了转码工具出场的时间了, 网上也可以找到不少免费的工具,如、格式工厂,魔影工厂等等。但这些工具基本上都是能进行转码,但很难精确到profile level级别。
这时就可以使用咱的FFMpeg,多媒体的转码小能手。FFmpeg的功能太多了,这里就不一一介绍,只说其中一条命令,没错,只有一条(怎么安装FFmpeg,就不是本小篇的范畴了,客观问问度娘就知道了)。
ffmpeg -i in.xxx -c:v xxx -profile:v xxx -c:a xxx -profile:a xxx out.xxx
就是这么简洁的一条命令,其意义如下所示:
-i in.xxx : 输入文件
-c:v xxx : 设置输出文件的视频格式
-profile:v xxx : 设置输出视频格式的profile(数值 参考 avcodec.h 中 FF_PROFILE_XXX 这样的宏定义)
-c:a xxx : 设置输出文件的音频格式
-profile:a xxx : 设置输出音频的profile(数值 参考 avcodec.h 中 FF_PROFILE_XXX 这样的宏定义)
out.xxx : 输出文件(由后缀名决定输出文件的格式(即容器格式) )
还有一些音视频的可选参数:
Video options:
-vframes number 设置输出多少帧视频
-r rate 设置输出视频的帧率(Hz value(即fps))
-s size 设置输出视频的分辨率 (WxH (宽和高中间是字母'x'))
-aspect aspect 设置宽高比 (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number 设置位深度
-vn 禁止输出视频(即输出文件中不包含视频)
-vcodec codec 设置输出视频的格式(等同于 -c:v )
-timecode hh:mm:ss[:;.]ff 设置输出视频的起始时间戳
-pass n select the pass number (1 to 3)(没太明白)
-vf filter_graph set video filters(设置滤波器)
-ab bitrate 设置输出音频的比特率(推荐使用: -b:a xxx)
-b bitrate 设置输出视频的比特率(推荐使用: -b:v xxx)
-dn disable data(禁止数据,我猜测和 -vn的区别是,这个命令只禁止数据,
但是在文件的header中仍然有视频流的信息)
Audio options:
-aframes number 设置输出多少个音频帧
-aq quality 设置输出音频的质量 (codec-specific)
-ar rate 设置输出音频的采样率(sampling rate) (in Hz)
-ac channels 设置输出音频的声道数目
-an 禁止音频(即输出文件中无音频)
-acodec codec 设置输出音频的格式(等同于 -c:a )
-vol volume 设置输出音频的音量 (256=normal)
-af filter_graph 设置音频滤波器
Subtitle options:
-s size 设置字幕所在的画面的分辨率(WxH, 其中宽和高中间是字母'x')
-sn 禁止字幕(即输出文件中无字幕)
-scodec codec 设置输出字幕的格式(等同于 -c:s )
-stag fourcc/tag 设置字幕的tag/fourcc
-fix_sub_duration 修正字幕的时长
-canvas_size size 设置字幕画布的分辨率 (WxH or abbreviation)
-spre preset set the subtitle options to the indicated preset(不太明白)