`
化蝶自在飞
  • 浏览: 2333449 次
  • 性别: 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 ,该如何防御?

相关推荐

    ffmpeg命令行Windows x64版本

    ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ffmpeg命令行Windows x64版本 ...

    视频自动加字幕软件win版video-srt-gui-ffmpeg-0.2.6-x64.zip

    其中,"ffmpeg"是核心处理库,负责执行实际的音视频处理任务;"data"文件夹可能包含软件运行所需的配置文件和资源;"videosrt.exe"是主程序,用户通过这个可执行文件启动软件;"教程.mp4"则为用户提供了详细的使用...

    ffmpeg-2022-04-14-git-ea84eb2db1-essentials_build ffmpeg命令行工具

    ffmpeg-2022-04-14-git-ea84eb2db1-essentials_build ffmpeg命令行工

    ffmpeg-cli-wrapper:FFmpeg命令行工具周围的Java包装器

    FFmpeg Java 作者:安德鲁·布兰普顿( )(c)2013-2014,2016 一个从Java运行FFmpeg的流畅接口。 | 安装 Maven: &lt; groupId&gt;net.bramp.ffmpeg&lt;/ groupId&gt; &lt; artifactId&gt;ffmpeg &lt; version&gt;0.6.2 用法 视频...

    wind--php---ffmpeg--32为扩展包

    总结,"wind--php---ffmpeg--32为扩展包" 提供了在 32 位 Windows 环境下使用 PHP 进行多媒体处理的能力,涵盖了转码、截图和信息获取等多种功能,是开发相关应用时的重要工具。开发者可以利用这个扩展轻松地集成 ...

    ffmpeg-4.3.1(ffmpeg.zeranoe.com)(win32 win64).rar

    1. ffmpeg-4.3.1-win64-shared.zip:这是64位系统的共享库版本,包含了可执行文件和必要的动态链接库,用户可以直接运行,无需编译环境。 2. ffmpeg-4.3.1-win32-shared.zip:同理,这是32位系统的共享库版本,适用...

    ffmpeg的编译以及ffmpeg命令行工具在android上的移植

    ffmpeg的编译过程详解,ffmpeg命令行工具在android 上的移植,通过ndk-build或者cmake方式在android studio2.2,ndk14(官网下载android studio2.2,然后通过studio上sdk下载ndk-bundle)构建工程项目。使用的ffmpeg...

    ffmpeg-4.2.2-win64-dev ffmpeg-4.2.2-win64-shared

    综上所述,FFmpeg-4.2.2-win64-dev 和 ffmpeg-4.2.2-win64-shared 包含了处理多媒体文件所需的一切,无论是开发者还是普通用户,都可以根据需求选择合适的版本。通过学习和使用 FFmpeg,你可以实现各种多媒体处理...

    ffmpeg-gl-transition

    使用 `ffmpeg-gl-transition`,你需要对FFmpeg命令行有一定的熟悉,因为大部分操作会通过命令行界面进行。这可能涉及到命令参数,如输入和输出文件、转场类型、持续时间等。例如,你可能需要指定两个视频文件,并...

    毕设&课设&项目&实训-基于FFmpeg命令行 在Android端实现视频剪切、截图等操作.zip

    毕设&课设&项目&实训-基于FFmpeg命令行 在Android端实现视频剪切、截图等操作,以及基于FFmpeg最新的API结合 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发...

    ios-FFMpeg 实现 调用命令行将视频转换为一组图片.zip

    在处理结果时,生成的图片文件通常会被保存到应用的临时目录或文档目录下,根据需求,可以通过`UIImage`加载这些图片并展示在应用中,或者进行进一步的处理,比如上传到服务器。 总结来说,使用FFmpeg在iOS中将视频...

    ffmpeg-4.1-1.4.4_ffmpeg+rtsp_ffmpeg4_ffmpeg-1.4.4_ffmpeg_Libvide

    在“ffmpeg-4.1-1.4.4_ffmpeg+rtsp_ffmpeg4_ffmpeg-1.4.4_ffmpeg_Libvideocapture”这个标题中,我们可以看到几个关键组件,它们构成了FFmpeg与RTSP(Real-Time Streaming Protocol)相关的应用。 1. **FFmpeg 4.1*...

    ffmpeg-6.1.1.tar,ffmpeg-master-latest-win64-gpl-shared

    ffmpeg-6.1.1.tar 是一个包含 FFmpeg 6.1.1 版本源代码的压缩包。FFmpeg 是一套能够处理多媒体数据(音频、视频、字幕等)的开源计算机程序库和命令行工具,广泛应用于音视频处理、转码、流媒体等领域1。 要使用该...

    BAT批处理脚本-自己做的mp3 flv提取器.zip

    总结来说,"自己做的mp3 flv提取器.bat"是一个批处理脚本,利用Windows命令行工具和FFmpeg,自动化地从视频文件中提取MP3和FLV格式的音频。它体现了批处理脚本的自动化能力,对于处理大量视频文件的音频提取任务非常...

    eloquent-ffmpeg:FFmpeg命令行工具的高级API

    雄辩的FFmpeg 雄辩的FFmpeg将与交互简化为一个简单而强大的API。 该库是完全类型化的,因​​此在诸如VS Code的编辑器中,intellisense应该可以帮助您入门。 您可能还需要或 。 如果缺少某些东西或感觉不对劲,请...

    FFmpeg-Builds-autobuild-2020-11-15-12-27_ffmpeg_

    "FFmpeg-Builds-autobuild-2020-11-15-12-27_ffmpeg_" 这个标题表明这是FFmpeg的一个自动构建版本,日期为2020年11月15日的12点27分,这通常意味着这是一个特定时间点的稳定版本,适用于Windows平台的安装。...

    ffmpeg-master-latest-win64-gpl-shared

    这个压缩包"ffmpeg-master-latest-win64-gpl-shared"是针对Windows 64位操作系统编译的最新FFmpeg版本,包含了动态链接库(shared),这意味着在使用时,程序会依赖这些库文件来执行各种多媒体操作。 FFmpeg 包含了...

    FFmpeg-full-SDK-3.2

    FFmpeg-full-SDK-3.2 是一个包含FFmpeg开源项目的完整软件开发工具包,它提供了最稳定的3.2版本。FFmpeg是一个强大的多媒体处理框架,广泛用于音频和视频的编码、解码、转换和流媒体操作。这个SDK是开发者进行相关...

    ffmpeg命令行

    根据给定的文件信息,我们可以总结出以下几个与ffmpeg命令行相关的知识点: ### 1. ffmpeg命令的基本用法 ffmpeg是一款强大的跨平台音视频处理工具,主要用于音视频编码、转码、分割、合并等功能。基本语法格式为...

    FFmpeg-master.zip_FFmpeg-master_ffmpeg master

    通过阅读和分析源代码,我们可以学习到多媒体处理的底层原理,了解如何实现特定的编码解码算法,甚至可以根据需求对FFmpeg进行二次开发,添加新的功能或优化现有性能。 在实际开发中,你可以利用FFmpeg提供的API来...

Global site tag (gtag.js) - Google Analytics