Android ffmpeg 使用命令视频转码

说明见雷神:https://blog.csdn.net/leixiaohua1020/article/details/47056365

哪个太老了,我用 Android studio 重新编译了一下;

下载链接:https://download.csdn.net/download/q610098308/12471080

ffmpeg 命令整理如下,未测试:

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。


命令集
ffmpeg -formats  //查看ffmpeg支持什么格式
ffmpeg -i num.mp4 example.%d.jpg  //将视频分解成帧 我们项目里的帧是.liao格式,识别不了
ffmpeg -i D:\FFdemo\num1.mp4 -r 1 -ss 0:0:10 -t 0:0:5 D:\FFdemo\frame1\aa_%d.jpg //将视频分解成帧 -ss 开始时间,-t 持续时间 -r 设定帧速率,默认为25
ffmpeg -i D:\FFdemo\num1.mp4 -ss 0:0:10 -t 0:0:5 D:\FFdemo\kk.mp4 //将视频截取
ffmpeg -i example.%d.jpg num.mp4   //将帧合成视频
ffmpeg -i D:\FFdemo\num1.mp4 -ss 8 -t 0.001 D:\FFdemo\asdf.jpg //保存一帧图片

ffmpeg -i num.mp4 -i bgm.m4a video.mp4   //将视频跟音频合成新的视频
ffmpeg -i example.%d.jpg -s 1920*1080 num.mp4   //将帧合成视频并设置分辨率 -s 分辨率
ffmpeg -i num.mp4 -vcodec copy -an noaudio.mp4 //分离视频流,去除声音  -vcodec 设定视频编解码器。 如果用copy表示原始编解码数据必须被拷贝。 -an: 去掉音频
ffmpeg -i num.mp4 -acodec copy -vn novideo.m4a    //分离音频流,去除视频  -acodec 设定音频编解码器,未设定时则使用与输入流相同的编解码器 -vn:去掉视频


//ffmpeg裁剪  vf 参数用于指定视频滤镜 crop 表示裁剪 crop=width:height:x:y  x:y偏移量 y = (1920-1080)/2 = 480
ffmpeg -i D:\FFdemo\num1.mp4 -vf crop=1080:1080:0:480 D:\FFdemo\aa.mp4


//ffmpeg缩放视频 -vf scale=853:480 vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,
因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853
当中的宽度和高度实际应用场景中通常只需指定一个,。即参数可以写为:scale=-1:480,当然也可以 scale=480:-1
-acodec aac 指定音频使用 aac 编码。-vcodec h264 指定视频使用 h264 编码。注:目前手机一般视频拍摄音频编码都是 aac,视频都是 h264。
ffmpeg -i D:\FFdemo\num1.mp4 -vf scale=853:480 -acodec aac -vcodec h264 D:\FFdemo\qq.mp4


//H264视频转ts视频流
ffmpeg -i /storage/emulated/0/11hl/test.h264 -vcodec copy -f mpegts test.ts //-f 设定输出格式
//H264视频转mp4
ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4
//ts视频转mp4
ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4
//合成视频
ffmpeg -i "concat:test1.ts|test2.ts" -vcodec copy -f mp4 out12.mp4
//合成视频
ffmpeg -y -i resource1.mp4 -t 7 -i resource2.mp4 -t 10 -i bgm.m4a -filter_complex '[0:v][1:v]concat=n=2:v=1:a=0[v]' -map '[v]' -map 2 output.mp4
//合成视频
这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'
然后:
ffmpeg -f concat -i filelist.txt -i /storage/emulated/0/11hl/bgm.m4a -c copy output.mp4
如果要添加音频
-y -f concat -i /storage/emulated/0/11hl/ff.txt -i /storage/emulated/0/11hl/bgm.m4a -c copy /storage/emulated/0/11hl/output.mp4
-y -f concat -i /storage/emulated/0/11hl/ff.txt -i /storage/emulated/0/11hl/bgm.m4a -ss 0:0:10 -t 0:0:10 -c copy /storage/emulated/0/11hl/output.mp4 //截取10s 从第10s开始


//压缩视频
ffmpeg.exe -i "C:\test.mp4" -r 10 -b:a 32k "C:\test_mod.mp4"
//把视频的前30帧转换成一个Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
//加水印 -filter_complex 参数是表示使用混合滤镜把图片叠加到视频上。 [1:v]表示第二个输入文件 scale=100:200[s] 表示裁剪,把这个操作设为[s]
//[0:v] 表示第一个输入文件,overlay=0:0 表示遮盖物的位置 [0:v][s] 表示把操作[s]覆盖到[0,v]上面去  t*20 时间参数,表示向右平移 if(条件,条件为true时的值,条件为false时的值)
//gte(x,y) 如果x大于等于y则表达式的值为true,反之为false。lte(x,y)则相反
ffmpeg -y -i D:\FFdemo\num1.mp4 -i D:\FFdemo\pic1.jpg -filter_complex [1:v]scale=100:200[s];[0:v][s]overlay=‘if(gte(t,2),t*20,NAN)’:0 D:\FFdemo\df.mp4
//加动画水印 gif要在整个视频播放阶段循环的话就请使用-ignore_loop参数。这个参数的值为1则忽略gif文件本身的循环设置,为0的话则使用文件本身的设置。
ffmpeg -y -i D:\FFdemo\num1.mp4 -ignore_loop 0 -i D:\FFdemo\a.gif -ss 0:0:1 -t 0:0:5 -filter_complex [1:v]scale=100:200[s];[0:v][s]overlay=0:0 D:\FFdemo\df.mp4
//添加字幕流(得进入MP4的文件夹下面,用相对路径,暂时不知道原因)
ffmpeg -i num1.mp4 -vf ass=cc1.ass myout.mp4
//添加字幕流成功,但是MP4文件显示不出,不知道怎么回事
ffmpeg -y -i D:\FFdemo\cc1.ass -i D:\FFdemo\num1.mp4 -c:s mov_text D:\FFdemo\klm1.mp4


ffmpeg -h full //帮助


主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器


-an: 去掉音频
-acodec: 音频选项, 一般后面加copy表示拷贝
-vcodec:视频选项,一般后面加copy表示拷贝


音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
-L license
-h 帮助
-fromats 显示可用的格式,编解码的,协议的。。。
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string 设置评论
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高质量设置
-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
b) 视频选项
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size –cropleft size –cropright size
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file


c)高级视频选项
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-qscale q 使用固定的视频量化标度(VBR)
-qmin q 最小视频量化标度(VBR)
-qmax q 最大视频量化标度(VBR)
-qdiff q 量化标度间最大偏差 (VBR)
-qblur blur 视频量化标度柔化(VBR)
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
-b_qfactor factor 在p和b帧间的qp因子
-i_qfactor factor 在p和i帧间的qp因子
-b_qoffset offset 在p和b帧间的qp偏差
-i_qoffset offset 在p和i帧间的qp偏差
-rc_eq equation 设置码率控制方程 默认tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC
-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4个运动矢量 仅用于mpeg4
-part 使用数据划分 仅用于mpeg4
-bug param 绕过没有被自动监测到编码器的问题
-strict strictness 跟标准的严格性
-aic 使能高级帧内编码 h263+
-umv 使能无限运动矢量 h263+
-deinterlace 不采用交织方法
-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大
-psnr 计算压缩帧的psnr
-vstats 输出视频编码统计到vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开
D)音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码
E)音频/视频捕获选项
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置DV1394捕获
-av device 设置音频设备 比如/dev/dsp


F)高级选项
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以bits为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流。只工作于图像流,用于ffserver测试
 
原文链接:https://blog.csdn.net/yanmantian/article/details/78420359

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页