android ffmpeg压缩缩mp3后为什么音频播放时间减少了

1782人阅读
用FFMPEG SDK进行视频转码压缩的时候,转码成功后去看视频的内容,发现音视频是不同步的。这个的确是一个恼火的事情。我在用FFMPEG SDK做h264格式的FLV文件编码Filter的时候就碰到了这个问题。
& && &&&经过研究发现,FFMPEG SDK写入视频的时候有两个地方用来控制写入的时间戳,一个是AvPacket, 一个是AvFrame。 在调用avcodec_encode_video的时候需要传入AvFrame的对象指针,也就是传入一帧未压缩的视频进行压缩处理,AvFrame包含一个pts的参数,这个参数就是当前帧将来在还原播放的时候的时间戳。而AvPacket里面也有pts,还有dts。说起这个就必须要说明一下I,P,B三种视频压缩帧。I帧就是关键帧,不依赖于其他视频帧,P帧是向前预测的帧,只依赖于前面的视频帧,而B帧是双向预测视频帧,依赖于前后视频帧。由于B帧的存在,因为它是双向的,必须知道前面的视频帧和后面的视频帧的详细内容后,才能知道本B帧最终该呈现什么图像。而pts和dts两个参数就是用来控制视频帧的显示和解码的顺序。
& && &pts就是帧显示的顺序。
& && &dts就是帧被读取进行解码的顺序。
& &&&如果没有B帧存在,dts和pts是相同的。反之,则是不相同的。关于这个的详细介绍可以参考一下mpeg的原理。
再说说AvPacket中包含的pts和dts两个到底该设置什么值?
pts和dts需要设置的就是视频帧解码和显示的顺序。每增加一帧就加一,并不是播放视频的时间戳。
但是实践证明经过rmvb解码的视频有时候并不是固定帧率的,而是变帧率的,这样,如果每压缩一帧,pts和dts加一的方案为导致音视频不同步。
那怎么来解决音视频同步的问题呢?
请看如下代码段。
lTimeStamp 是通过directshow 获取的当前的视频帧的时间戳。
m_llframe_index为当前已经经过压缩处理的帧的数量。
首先av_rescale计算得到当前压缩处理已经需要处理什么时间戳的视频帧,如果该时间戳尚未到达directshow当前提供的视频帧的时间戳,则将该帧丢弃掉。
否则进行压缩操作。并设置AVPacket的pts和dts。这里假设B帧不存在。
因为在将来播放的时候视频以我们设定的固定播放帧率进行播放,所以需要根据设定的播放帧率计算得到的视频帧时间戳和directshow提供的当前视频帧的时间戳进行比较,设定是否需要进行实施延缓播放的策略。如果需要延缓播放,则将pts增加步长2,否则以普通速度播放,则设置为1.dts与之相同。
__int64 x = av_rescale(m_llframe_index,AV_TIME_BASE*(int64_t)c-&time_base.num,c-&time_base.den);
if( x & lTimeStamp )
&&return TRUE;
m_pVideoFrame2-&pts = lTimeS
m_pVideoFrame2-&pict_type = 0;
& & int out_size = avcodec_encode_video( c, m_pvideo_outbuf, video_outbuf_size, m_pVideoFrame2 );
& & /* if zero size, it means the image was buffered */
& & if (out_size & 0)
& && &&&AVP
& && &&&av_init_packet(&pkt);
&&if( x & lTimeStamp )
& &pkt.pts = pkt.dts = m_llframe_
& &pkt.duration = 0;
& &pkt.duration = (lTimeStamp - x)*c-&time_base.den/1000000 + 1;
& &pkt.pts = m_llframe_
& &pkt.dts = pkt.
& &m_llframe_index += pkt.
& && &&&//pkt.pts = lTimeStamp * (__int64)frame_rate.den / 1000;
& && &&&if( c-&coded_frame && c-&coded_frame-&key_frame )
& && && && &pkt.flags |= PKT_FLAG_KEY;
& && &&&pkt.stream_index= m_pVideoStream-&
& && &&&pkt.data= m_pvideo_
& && &&&pkt.size= out_
& && &&&/* write the compressed frame in the media file */
& && &&&ret = av_interleaved_write_frame( m_pAvFormatContext, &pkt );
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:411190次
积分:5324
积分:5324
排名:第4949名
原创:147篇
转载:77篇
评论:45条
(1)(2)(1)(2)(1)(3)(1)(4)(1)(6)(4)(6)(6)(3)(1)(15)(2)(8)(3)(9)(4)(3)(6)(2)(4)(2)(5)(1)(2)(14)(14)(7)(8)(3)(13)(1)(1)(2)(1)(1)(5)(14)(10)(8)(1)(3)(5)(1)(1)(1)(1)(1)ffmpeg音频合并
最近项目有合并多个音频文件,研究了ffmpeg,发现其功能十分强大,不仅可以音频文件合并,还支持音、视频合并,转换格式,音频、视频分离等,记录一下。
1.音频合并(我的)
http://nim./NDA2NTc5OA==/bmltYV8yMjY3MTBfNjMwNzQ4OTQzMDc0NDM3Nzk1M18xNDY4NTc2OTYyNzYzX2RkMWU0YjE5LTkxYTEtNDM5ZC04ZDc5LTFlZTcxNzlhMGE3Zg==?download=7953.aac
http://nim./NDA2NTc5OA==/bmltYV8yMjY3MDZfNjMwNzQ4OTQzMDc0NDM3Nzk1M18xNDY4NTc2OTYzMDUxXzRjMzYwMDI2LTJhZGQtNDRlZC04NDM2LWZjNzIzY2E3YzhmZA==?download=7953.aac
-strict -2 -filter_complex
amix=inputs=2:duration=longest:dropout_transition=2 -ar 24000
4377953.aac
-i 表示输入
-ar&设置音频采样率(在赫兹)
-filter_complex
2.网上例子
&&ffmpeg -i&
file.avi&&&output.flv
-i 表示输入文件&
&:现在有个视频video.avi,有个音频
audio.mp3,将其合并成output.avi
两个命令 & & &
& ( video2.avi 是中间文件 ,用完可删)
ffmpeg -i video.avi -vcodec
video2.avi&&&
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy
output.avi
表示输入文件
& -vcodec copy
表示 force video codec ('copy' to copy stream) 这个不知怎么译
,估计是直接copy&
& -acodec copy
& 这个说的应该是音频了&&
跟上面一样
-an : 表示& disable
audio& 估计是audio no
之类的缩写&& 表示去掉video.avi
原有的音频
方法2 好像可以直接指定两个输入文件
ffmpeg -i /tmp/a.wav
-i /tmp/a.avi /tmp/a.avi
两个文件 的顺序很重
从视频里提取声音(声音与视频的分离)
&ffmpeg& -i
人生若只如初见.flv& -vn
r.mp3&&从flv 文件 中提取声音并保存为mp3
-vn : 表示忽略视频 估计是video no
之类的缩写
&ffmpeg& -i
人生若只如初见.flv& -an&
r.flv&&&只留视频不留声音&
表示&忽略&声音
估计是audio no 之类的缩写
从视频里提取图片( )
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss 第8秒处 截一图
压缩mp3 文件
如果你觉得mp3 文件
有点大,想变小一点那么可以通过-ab 选项改变音频的比特率&(bitrate)
ffmpeg -i input.mp3 -ab 128
output.mp3&&&
//这里将比特率设为128
你可以用file
命令查看一下源文件 的信息
z.mp3: Audio
file with ID3 version 2.3.0, contains: MPEG ADTS, layer III,
kbps,&44.1 kHz,
其中的192 kbps
就是这个东西
mp3中比特率的含义是:在压缩音频文件至mp3时,由压缩软件所确定数码文件在播放时每秒传
送给播放器大小,其单位是:千位/秒;英文的含义是:kbps - = kilobits per
second。现在mp3文件的最高数位率是320
kbps。这样的文件体积很大,每分钟的音乐超过两兆字节。如果采用可变比特率(VBR)编码来生成mp3文件,获得与320
kbps相当音质,文件的体积会缩小25~50%。请注意:播放时间相同,而歌曲不同,所获的压缩mp3文件的一般不相同,这是因为VBR编码所生成的
mp3文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。
录音(要有可用的麦克风,并且如果用alsa
的话,好像得安alsa-oss,重启)&
-f oss -i /dev/dsp&&
out.avi& (should& hava oss or
-f& alsa -ac 2 -i hw:0,&0&
out.avi&& (should
&ffmpeg&&&-f
alsa -ac 2 -i pulse& (should hava PulseAudio)
&& oss 是linux 下的声音相关的东西,与alsa
一样,不过oss 是商业的, 而/dev/dsp 是oss 用到的麦克的设备吧,可以这样理解
ffmpeg -f x11grab -s xga -r 10
-i :0.0+0+0 wheer.avi&
x11grab&&-s
320x240&&-r 10 -i :0.0+100+200 wheer.avi
表示屏幕(个人理解,因为系统变量$DISPLAY值就是:0.0)&
而100,表示距左端100象素,200表示距上端200
-s 设置窗口大小
&&-r 10 好像是设置频率,不懂
ffmpeg -f x11grab -s
xga&&&&-qscale
10 -i :0.0+0+0 wheer.avi&
-qscale 8 设定画面质量,值
屏幕录像,同时录音
oss -i /dev/dsp & &
&& -f x11grab -r 30 -s
output.mkv
ffmpeg&& -ac 2 -f
oss& -i& /dev/dsp
& -f x11grab -r 30 -s
-i :0.0 -acodec
pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0
output.mkv
看到这,你会发现这个命令有多强大,
如果我屏幕上打开了一个窗口,我只想录这个窗口的内容,如何确定这个窗口的坐标位置呢
可以用另外一个命令
xwininfo&输入这个命令后,用鼠标点选目标窗口,
就会出现目标窗口的坐标,宽高等一系列信息
Absolute upper-left X:& 276
& Absolute upper-left Y:&
& Relative upper-left X:& 2
& Relative upper-left Y:&
& Width: 742
& Height: 499
& Depth: 24
& Visual: 0x21
& Visual Class: TrueColor
& Border width: 0
& Class: InputOutput
& Colormap: 0x20 (installed)
& Bit Gravity State: NorthWestGravity
& Window Gravity State: NorthWestGravity
& Backing Store State: NotUseful
& Save Under State: no
& Map State: IsViewable
& Override Redirect State: no
& Corners:&
+276+57& -262+57&
-262-244& +276-244
& -geometry
80x24+274+34&看到这一行了没 ()
比如根据上面的信息
/dev/dsp&&&&&
-f& x11grab -r 30& -s
:0.0+0+23&
output.avi&
Another thing you can change is the video frame rate (FPS). In the
example above we used -r 30 which means capture at 30 FPS. You can
change this value to whatever frame rate you want.
这个 -r 30 应该是每秒钟取样几次,估计是一秒截三十次屏,
&ffmpeg -ss
00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3&
output.mp3&
从第10秒开始截取,共截取1:22时长的内容
视频文件的连接,如两个flv 文件 连接成一
好像必须先将文件 转成mpg ,dv 等格式的文件后才能进行连接
连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PS,
DV格式亦可连接))
ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20
ffmpeg -i input2.avi -sameq inputfile_02.mpg
cat inputfile_01.mpg inputfile_02.mpg & inputfile_all.mpg
ffmpeg -i inputfile_all.mpg -sameq outputfile.avi
input1.avi
input2.avi 合并成outputfile.avi
相同的质量(可能指的是画面,不太清楚)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。5743人阅读
ffmpeg(30)
x264 h264(51)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1469603次
积分:15916
积分:15916
排名:第647名
原创:179篇
转载:290篇
评论:122条
(1)(3)(2)(12)(19)(7)(1)(3)(2)(2)(3)(1)(5)(1)(4)(3)(1)(3)(1)(3)(1)(1)(9)(11)(1)(3)(1)(5)(6)(1)(1)(24)(1)(1)(2)(5)(3)(5)(7)(14)(37)(17)(17)(9)(28)(16)(78)(52)(20)(12)(4)ffmpeg&解说&解决视频边放边播的问题&&转载
/symbian-272410.htm
qt-faststart
Qt中FFMPEG转码为MP4必须要加载完才能播放 问题解决
是本文要介绍的内容,我们经常会碰到这种情况,那么本文将会为你解决问题,先来看内容。使用videoview时出现提示:**不适合在此设备上播放
但是下载之后又可以播, 百思不解. 还是看下高人的解决方法:
FFMpeg转码由此得到的mp4文件中, meta信息是在文件尾部的, 而 videoview
在没有得到meta信息前不会播放文件, 因此只有等到文件完全下载完视频才会播放.
因此可以使用qt-faststart来把meta信息移到文件头部. 用法:
/usr/bin/qt-faststart&& INPUT
qt-faststart安装方法:
进入FFMpeg安装目录,执行命令:
$&cd&ffmpeg
$&./configure &
$&make&tools/qt-faststart
$&cp&-a&tools/qt-faststart&/usr/bin/&
这样qt-faststart就安装好了。
假设转码后的文件名字为a.mp4,执行以下命令:
$&/usr/bin/qt-faststart&a.mp4&b.mp4&
再播放b.mp4就可以边加载边播放了。
ffmpeg参数设定解说&
-bitexact 使用标准比特率&
-vcodec xvid 使用xvid压缩&
-s 320x240 指定分辨率&
桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)&
画面部分,选其一&
-b &比特率&
指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的&
就是原来默认项目中有的&
-qscale &数值&
以&数值&质量为基础的VBR,取值0.01-255,约小质量越好&
-qmin &数值&
设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31&
-sameq 使用和源同样的质量&
-acodec aac 设定声音编码&
-ac &数值&
设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质&
的DVDrip就可以用2&
-ar &采样率&
设定声音采样率,PSP只认24000&
-ab &比特率&
设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换&
君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上&
-vol &百分比&
设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍&
这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去&
判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整&
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i "1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
-title "Test"(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b
xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
"1.***"(输出文件名,也可以加路径改文件名)
ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15
-s 320x240 f:\11.flv&
ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240
f:\test.flv&
使用-ss参数 作用(time_off set the start time
offset),可以从指定时间点开始转换任务。如:&
转换文件格式的同时抓缩微图:&
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240
'test.jpg'&
对已有flv抓图:&
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240
'test.jpg'&
-ss后跟的时间单位为秒&
Ffmpeg转换命令&
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s
176x144 -acodec aac -ac 2 -ar 22500&
-ab 24 -f 3gp test.3gp&
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s
176x144 -b 128 -r 15 test.3gp&
ffmpeg参数设定解说&
-bitexact 使用标准比特率&
-vcodec xvid 使用xvid压缩&
-s 320x240 指定分辨率&
桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)&
画面部分,选其一&
-b &比特率&
指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的&
就是原来默认项目中有的&
-qscale &数值&
以&数值&质量为基础的VBR,取值0.01-255,约小质量越好&
-qmin &数值&
设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31&
-sameq 使用和源同样的质量&
-acodec aac 设定声音编码&
-ac &数值&
设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质&
的DVDrip就可以用2&
-ar &采样率&
设定声音采样率,PSP只认24000&
-ab &比特率&
设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换&
君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上&
-vol &百分比&
设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍&
这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去&
判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整&
例 子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208
-r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol
-f psp -muxvb 768 "1.***"&
解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的
cores子目录)。&
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)&
"1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)&
-title "Test"(在PSP中显示的影片的标题)&
-vcodec xvid(使用XVID编码压缩视频,不能改的)&
368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)&
-r 29.97(帧数,一般就用这个吧)&
-b 1500(视频数据流量,用-b
xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale
量比6高)&
-acodec aac(音频编码用AAC)&
-ac 2(声道数1或2)&
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)&
-ab 128(音频数据流量,一般选择32、64、96、128)&
-vol 200(200%的音量,自己改)&
-f psp(输出psp专用格式)&
768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)&
"1.***"(输出文件名,也可以加路径改文件名)&
机器强劲的话,可以多开几个批处理文件,让它们并行处理。&
E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq
-deinterlace -ab 56 -ar 22050 -ac 1
===========================================
ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15
-s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050
500 -r 15 -s 320x240 f:\test.flv 使用-ss参数 作用(time_off set the
start time offset),可以从指定时间点开始转换任务。如:
转换文件格式的同时抓缩微图:
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240
'test.jpg'
对已有flv抓图:
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240
'test.jpg'
-ss后跟的时间单位为秒 Ffmpeg转换命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s
176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s
176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说&
-bitexact 使用标准比特率&
-vcodec xvid 使用xvid压缩&
-s 320x240 指定分辨率&
桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)&
画面部分,选其一&
-b &比特率&
指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的&
-qscale &数值&
以&数值&质量为基础的VBR,取值0.01-255,约小质量越好&
-qmin &数值&
设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31&
-sameq 使用和源同样的质量 声音部分&
-acodec aac 设定声音编码&
-ac &数值&
设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质的DVDrip就可以用2&
-ar &采样率&
设定声音采样率,PSP只认24000&
-ab &比特率&
设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品
质声音的话建议设到160kbps(80)以上&
-vol &百分比&
设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍
这样,要得到一个高画质音质低容
量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一
点,听起来要舒服很多,
也不会太大(看情况调整 例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid
-s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2
24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"
解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的
cores子目录)。
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i "1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
-title "Test"(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b
xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
"1.***"(输出文件名,也可以加路径改文件名)
P.S. 版主机器强劲的话,可以多开几个批处理文件,让它们并行处理。 E:\ffmpeg.exe -i I:\1.wmv
-b 360 -r 25 -s 320x240 -hq -
deinterlace -ab 56 -ar 22050 -ac 1 D:\2.flv
Ffmpeg使用语法
ffmpeg [[options][`-i' input_file]]... {[options]
output_file}...
如果没有输入文件,那么视音频捕捉就会起作用。
作为通用的规则,选项一般用于下一个特定的文件。如果你给 -b
64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要
缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。
a) 通用选项
-L license
-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.7
-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(缺省)
-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
FF_DCT_ALTIVEC
-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1
FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX
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测试&
===============================================
视频加水印
1、使用ffmpeg
视频添加水印(logo)。在视频行业已经工作了两年多了,最近抽时间把一些处理视频的方法和经验写下来,一来做个记录,二来分享一下一起学习进步。
ffmpeg -i D:\input.mpg
-sameq -vhook "imlib2.dll -x 10 -y 10 -i c:\logo.png" -ar 22050 c:\11.mpg
3个参数分别是 输入文件、logo文件、和输出文件。logo一定得是png图片。
dll 库在附件中可以下载到(imlib2.dll )
2、wmv转码,使用的软件是window自带的WMEncoder进行转码工作的。
转码方式:
cscript.exe wmcmd.vbs -input C:\input.mpg -output
D:/d.wmv& -loadprofile E:\wmv.prx
转码参数(码率等) 在wmv.prx里面,呢 可以通过可视化编辑就行修改。
3、mencoder 转mp4 文件
mencoder.exe -sws 3 -oac lavc -ovc lavc -of lavf -lavcopts
aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=300 -lavcopts
acodec=libfaac:abitrate=32 -af lavcresample=16000 -vf
harddup,scale=320:-10,unsharp=l3x3:0.7,expand=320:240 -ofps 15
-lavfopts format=psp -srate 16000& -lavfopts
i_certify_that_my_video_stream_does_not_use_b_frames C:\input.mpg
-o D:/m1.mp4
4、mecoder 转 flv
mencoder.exe -sws& 2 -of lavf&
-oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc
vcodec=flv:vbitrate=700:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=3:vb_strategy=1
-vf scale=420:-3 -ofps 12
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames
z:\input.mpg -o D:/out.flv
ffmpeg 转mp4
ffmpeg& -y& -i
input.wmv& -f mp4 -async 1-s
480x320& -acodec libfaac -vcodec
libxvid& -qscale 7 -dts_delta_threshold 1
output.mp4
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 ffmpeg 音频播放 的文章

 

随机推荐