📄 ffmpeg使用方法.txt
字号:
2007-08-24 00:33
最近一直在参看关于flv 自动转码的文章,
1.看到很多一般在编程的时候上传都是在后台调用进程来进行转码。不过试验以后发现效果不是很好,特别是很多人的时候会出现问题。
2.另外一个就是在对于很多视频素材要进行转码上传的时候,要进行一定的统一编码。目前要做统一的flv的格式所有素材所有的都要进行flv编码,如果一段一段的进行编码的话,太过于麻烦而且要花费很大的人力。同样的一份素材如果我需要进行两份编码,比如一份mpg文件进行一份flv,一份3gp的编码那么就要花费大量的时间进行两次的手工操作。
上述就是存在的问题
如何解决?
参考了Discuz 的supesite有了下面的解决方案
要使用的文件
1. ffmepg.exe 下载地址 http://sourceforge.net/projects/ffmpeg
2. Mencoder.exe 下载地址http://www.mplayerhq.hu/MPlayer/releases/win32/ 下载其中的MPlayer-20060908-win32_gui.zip 包并且提出其中的Mencoder.exe.
3. 下载Mencoder.exe解码器 http://www.mplayerhq.hu/design7/dload.html 下载其中的Binary Codec Package
然后解开压缩包,把其中的drv43260.dll copy到windows/system32/ 下面
然后 开始->运行 regsvr32 drv42360.dll
开始工作
1.把ffmepg.exe Mencoder.exe 复制到c:\根目录下,当然你也可以是其他,只是我们后面定了这个目录
2.我们假定您的视频文件放置在D:\store下面,并且视频的原始文件在D:\store\video\temp\目录下
而新的文件flv文件和截图放置在D:\store\video\里面会按照日期建立文件夹里面.以上进行确认
工作思路
思路是建立windows的计划任务,让该计划每5分钟查看D:\store\video\temp下是否有文件,如果有文件那么调用批处理文件进行转换和截图,
所一这里需要一个task.bat 用来建立windows计划任务(初始化使用),一个convert.vbs用来给转换的批处理调用shell并且传递目录参数,一个 convert.bat 这是真正要被convert.vbs调用的批处理文件这个文件是我们所有转码的关键。也就是convert.bat调用了ffmpeg Mencoder.exe来进行转码。
处理文件
1..建立一个计划任务的批处理task.bat (蓝色部分)
@schtasks /Create /tn 视频转换 /tr "C:\convert.vbs" /sc minute /mo 5
注释: /mo 5表示5分钟,从上面看到他就是调用了convert.vbs
2.建立convert.vbs
Set shell = Wscript.createobject("wscript.shell")
convert = shell.run("C:\convert.bat D:\store", 0)
注释:从上满看到该vbscript创建了一个shell 同时 调用convert.bat 传入两个参数
3.真正的内容convert.bat
@echo off
for /R %1\video\temp %%I in (*.mov *.avi *.mpg *.mpeg *.mpe *.3gp) do call :Convert %1 %%~I %%~nI
for /R %1\video\temp %%I in (*.rm *rmvb *.wmv *.asf *.asx) do call :Convert1 %1 %%~I %%~nI
goto :END
:Convert SitePath FullFile FileName
setlocal enableextensions
set file=%3
set Path=%file:~-14,6%
IF NOT EXIST %1\video\%Path% mkdir %1\video\%Path%
C:\ffmpeg.exe -i %2 -y -ab 56 -ar 11025 -ac 2 -b 1500 -qscale 9 -r 15 -s 320*240 %1\video\%Path%\%3.flv
C:\ffmpeg.exe -i %2 -y -f image2 -ss 8 -sameq -t 0.001 -s 320x240 %1\video\%Path%\%3.jpg
del %2
endlocal
:Convert1 SitePath FullFile FileName
setlocal enableextensions
set file=%3
set Path=%file:~-14,6%
IF NOT EXIST %1\video\%Path% mkdir %1\video\%Path%
C:\mencoder.exe %2 -o %1\video\%Path%\%3.flv -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=320:240 -ofps 12 -srate 22050
C:\ffmpeg.exe -i %1\video\%Path%\%3.flv -y -f image2 -ss 8 -sameq -t 0.001 -s 320x240 %1\video\%Path%\%3.jpg
del %2
endlocal
:END
上面的语法不多做解释了,可以参看偶博客
有一点要注意的是,在转码结束以后调用了del 也就是原文件会被删除,当然你可以不删除
1. http://hi.baidu.com/x2p2/blog/item/06121d2d092cc936349bf731.html
2. http://hi.baidu.com/x2p2/blog/item/cb25e5c4d8233ac938db4923.html
或者参考Mencoder以及ffmpeg的一些相关参数说明
4.把这三个文件都保存到c:\根目录下 .然后运行 task.bat 让计划任务自动执行
mencoder压缩后生成的flv缺少meta信息,会造成播放时没有进度条等问题,需要再用flvmdi修复一下
代码
flvmdi test.flv
使用ffmpeg转换视频为flv文件:
./ffmpeg -i "/opt/input/1.mpg" -y -ab 32 -ar 22050 -b 800000 -s 640*480 /opt/output/1.flv"
ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
./mencoder /input/a.rmvb -oac lavc -lavcopts acodec=mp3:abitrate=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o /output/a.avi
在执行./ffmpeg -i "/opt/input/a.avi" -y -ab 32 -ar 22050 -b 800000 -s 640*480 /opt/output/a.flv"就可以转了。
视频抓图:
./ffmpeg -i "/opt/input/a.flv" -y -f image2 -t 1 -s 300*200 "/opt/output/1.jpg" //获取静态图
./ffmpeg -i "/opt/input/a.mpg" -vframes 30 -y -f gif "/output/1.gif" //获取动态图;
不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -