`
化蝶自在飞
  • 浏览: 2344754 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

批处理的学习--ffmpeg命令行处理的进一步优化

阅读更多
ffmpeg可以通过命令行的方式进行视频格式转换,是一个不错的软件,在php下可以使用exec函数,但是由于该函数水土不服,在windows下极容易出现未知错误,比如无法执行,权限问题等等,所以采用批处理来在windows下实现还是比较明智的.

需求:上传视频后,用php写bat文件到子目录,一个视频转化任务生成一个bat,如果转换成功(存在目标文件),则删除自身;在bat子目录之上(父目录)写一个bat,这个bat将被设置为windows计划任务来调用,并且它将自动遍历子目录下的bat执行.

1.判断文件是否存在,存在则删除自身子bat文件,避免执行过多文件导致冗余:
if NOT exist E:/testvideo/1.jpg (
E:/ffmpeg/ffmpeg.exe -i E:/testvideo/1.flv -y -ss 00:00:09 -t 00:00:10 -s 320*240 -f mjpeg -vframes 10 E:/testvideo/1.jpg
)
ELSE(
del %0
)

del %0 就是删除子bat自身.

2.父bat遍历子目录:
for /r E:/bat/child/ %%i in (*.bat) do call %%i

其中E:/bat/child/ 既是子bat所在目录.遍历并且执行,就可以了.
分享到:
评论
9 楼 mengdeheng 2012-10-27  
化蝶自在飞 写道
您可能不了解项目需求呢.
视频是不定时的通过网站上传的.
而且您的代码是否涉嫌耗费资源呢.
我的 父bat 是一分钟执行一次的.您是不是要每隔一分钟去扫描一次系统文件?
所以我认为生成子bat是一个不错的方法.一旦确认文件生成成功,那么删除自身,下一次就不会再遍历了.
语法上虽有欠缺没有您写的那么高级,不过我写的通俗易懂些,不是吗?

一分钟执行一次父bat是用任务计划吗?那样会不会很耗费资源?占很大内存?
8 楼 dwwind 2011-05-12  
程序不直接生成bat文件 而是生成一个文本文件,如格式为:
E:/testvideo/1.flv  00:00:09 00:00:10 320*240 jpeg E:/testvideo/1.jpg

你那个定时任务去读这个文件,也就不存在安全问题了
7 楼 化蝶自在飞 2011-05-10  
flv的路径是组装出来的,当然可以获取到.
比如xxx.rm 的flv就是 xxx.flv, 不能累加成 xxx.rm.flv
如果用批处理来做这个的话,是否有必要呢?
子bat是php写入的,不是人肉.
bat的执行是windows计划任务做的.上传仅仅是写bat,不触发执行.
6 楼 ray_linn 2011-05-10  
化蝶自在飞 写道
您可能不了解项目需求呢.
视频是不定时的通过网站上传的.
而且您的代码是否涉嫌耗费资源呢.
我的 父bat 是一分钟执行一次的.您是不是要每隔一分钟去扫描一次系统文件?
所以我认为生成子bat是一个不错的方法.一旦确认文件生成成功,那么删除自身,下一次就不会再遍历了.
语法上虽有欠缺没有您写的那么高级,不过我写的通俗易懂些,不是吗?



如果上传的时候就知道flv文件的路径,那只需要如下调用上面的bat ffmpeg.bat <路径>,何必多此一举。

就是要生成子bat,也就是生成很简单一行:

call ffpmpeg.bat <路径>

这不是和明明一个for循环可以搞定的事情,你偏偏要写10遍一个道理
5 楼 化蝶自在飞 2011-05-09  
您可能不了解项目需求呢.
视频是不定时的通过网站上传的.
而且您的代码是否涉嫌耗费资源呢.
我的 父bat 是一分钟执行一次的.您是不是要每隔一分钟去扫描一次系统文件?
所以我认为生成子bat是一个不错的方法.一旦确认文件生成成功,那么删除自身,下一次就不会再遍历了.
语法上虽有欠缺没有您写的那么高级,不过我写的通俗易懂些,不是吗?
4 楼 ray_linn 2011-05-09  
什么父父子子的bat,用一个bat就结了

@echo off

:set_env
if "" == "%FFMPEG_DIR%" set FFMPEG_DIR=E:\ffmpeg
if  "" == "%FFMPEG_PARAM%" set FFMPEG_PARAM=-y -ss 00:00:09 -t 00:00:10 -s 320*240 -f -i mjpeg -vframes 10 -i

:check_argu
if not "%1" == "" (
set FLV_ROOT=%1
) else (
set FLV_ROOT=E:\balabala
)

:exec
for /r %FLV_ROOT% %%i in (*.flv) do (
  if NOT exist %%~di%%~pi%%~ni.jpg (  
   %FFMP_DIR%\ffmpeg.exe  %FFMPEG_PARAM% %%i  %%~di%%~pi%%~ni.jpg
   rem 这里应该加入生成log
)
)

:end

 

3 楼 化蝶自在飞 2011-05-09  
楼上指教下?
2 楼 ray_linn 2011-05-09  
这种写法真是神人...lz赶紧回家翻翻dos bat用法吧
1 楼 化蝶自在飞 2011-05-08  
这样批处理必然带来的一个问题:安全.
假如有人恶作剧,del服务器文件或者 format ,该如何防御?

相关推荐

    一款基于Batch开发的批量加水印的批处理工具源码.zip

    在IT行业中,批处理工具是一种自动化执行一系列任务的程序,常用于提高工作效率,尤其是在需要对大量数据或文件进行相同操作时。...如果你希望进一步定制或优化这个工具,了解批处理脚本和FFmpeg的使用是必不可少的。

    基于ffmpeg压缩视频工具.zip

    FFmpeg是一款强大的开源跨平台多媒体处理工具,广泛应用于视频压缩、转码、分割、合并等多个领域。...通过了解和掌握FFmpeg的基本用法,用户还可以根据自己的需求进一步调整压缩设置,实现更个性化的视频处理。

    ffmpegbasic

    描述中提到的“ffmpeg.exe程序”是指FFmpeg的命令行工具,通过它可以执行各种复杂的音视频处理任务。它通常用于Windows环境下的命令行操作,尽管FFmpeg本身是跨平台的,适用于Linux、Mac OS X等多个操作系统。 标签...

    FFmpegVideoCompressor:使用FFmpeg压缩视频而不降低质量

    此外,我们还可以通过调整其他参数来进一步优化压缩,例如: - `-b:v`:设置平均比特率,用于限制输出文件的大小。但是,过多地依赖这个参数可能会导致质量波动。 - `-bf` 和 `-refs`:设置B帧数量和参考帧数,以...

    批量高效率视频压缩软件,仅限于Linux和macOS。且本地安装ffmpeg_vp.zip

    软件可能支持诸如ffmpeg这样的流行的开源多媒体框架,后者以其强大的多媒体处理能力而闻名。 压缩包子文件的文件名称“vp-main”可能表示这是软件的主要执行文件或者主程序。考虑到Linux和macOS都是以文件系统的...

    Mplayer.exe 最新版

    Mencoder支持多种编码标准,如MPEG、AVI、WMV等,而且具备批处理功能,可以高效地处理大量视频文件。 FFmpeg是另一个与Mplayer相关的开源项目,它是一个全面的多媒体处理工具集,包含音视频编解码器、转换工具、流...

    脚本:数据科学脚本

    3. 图像处理与过滤:如果需要进一步处理图像,比如调整大小、灰度化或增强,脚本可能包含额外的命令调用OpenCV库或其他图像处理工具。 4. 错误处理和日志记录:为了确保脚本在遇到问题时能够优雅地退出并提供有用的...

    StampIt-开源

    FFmpeg具备处理各种视频和音频编码的能力,支持多种格式的输入和输出,其命令行工具的灵活性为StampIt提供了调整视频转码参数的能力。用户能够根据转码结果的需求,调整视频的分辨率、比特率、帧率等参数,以及音频...

Global site tag (gtag.js) - Google Analytics