1CM

  

利用FFmpeg+Mencoder完成自动剪辑合并批处理

    目前有很多视频剪辑合并工具,其功能很强大.但是用起来很麻烦,一段一段需要手动处理.为了弥补这个弊端利用
批处理文件完成全自动剪辑和合并的功能.效率灰常高哈哈 通过配置文件输入剪辑时间使用起来更加方便
__________________________________________________________
Conversion_Batch.bat 从  _Periods.ini 中读取剪辑信息和时间
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
setlocal enabledelayedexpansion
echo @echo off>zCmd_tmp.bat
set /a count=0
rem Directory or file name contains an ! exclamation point problem
for /f "eol=# delims=" %%i in (_Periods.ini) do (
    set /a count=!count!+1
	if !count! EQU 1 (set ifn="%%i")
	if !count! EQU 2 (set ofn=%%i)
	if !count! EQU 3 (set extn=%%i
		set mCmd=call Lib_Conversion !ifn! !ofn! !extn!)
	if !count! GEQ 4 (
        set /a newindex=!count!-3
		if !newindex! LEQ 9 (set index=0!newindex!) else (set index=!newindex!)
		set _time=%%i
		rem echo !mCmd! !_time:~0,12! !_time:~13,12! !index!
		echo !mCmd! !_time:~0,12! !_time:~13,12! !index!>>zCmd_tmp.bat ))
setlocal disabledelayedexpansion
call zCmd_tmp.bat
del zCmd_tmp.bat
__________________________________________________________________________
计算总时间  Lib_CalculateTotalTime.bat 01:02:03.400 04:03:10.510 [display]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@echo off
set start_pos_tmp=%1
set end_pos_tmp=%2

if "%start_pos_tmp:~1,1%"==":" set "start_pos_tmp=0%start_pos_tmp%"
if "%end_pos_tmp:~1,1%"==":" set "end_pos_tmp=0%end_pos_tmp%"

set hour=%start_pos_tmp:~0,2%
set min=%start_pos_tmp:~3,2%
set sec=%start_pos_tmp:~6,2%
set msec=%start_pos_tmp:~9,3%

rem --------for skip 08 09---------------
if %hour:~0,1%==0  set hour=%hour:~1,1%
if %min:~0,1%==0   set min=%min:~1,1%
if %sec:~0,1%==0   set sec=%sec:~1,1%
if %msec:~0,1%==0  set msec=%msec:~1,2%
if %msec:~0,1%==0  set msec=%msec:~1,1%

set /a hour=%hour%
set /a min=%min%
set /a sec=%sec%
set /a msec=%msec%

set /a start_millsec=%hour%*60*60+%min%*60+%sec%
set /a start_millsec=%start_millsec%*1000+%msec%

set ehour=%end_pos_tmp:~0,2%
set emin=%end_pos_tmp:~3,2%
set esec=%end_pos_tmp:~6,2%
set emsec=%end_pos_tmp:~9,3%

rem --------for skip 08 09---------------
if %ehour:~0,1%==0  set ehour=%ehour:~1,1%
if %emin:~0,1%==0   set emin=%emin:~1,1%
if %esec:~0,1%==0   set esec=%esec:~1,1%
if %emsec:~0,1%==0  set emsec=%emsec:~1,2%
if %emsec:~0,1%==0  set emsec=%emsec:~1,1%

set /a ehour=%ehour%
set /a emin=%emin%
set /a esec=%esec%
set /a emsec=%emsec%

set /a end_millsec=%ehour%*60*60+%emin%*60+%esec%
set /a end_millsec=%end_millsec%*1000+%emsec%

set /a total_time_millsec=%end_millsec%-%start_millsec%
rem echo %hour% %min% %sec% %msec%
rem echo %ehour% %emin% %esec% %emsec%

rem echo %start_millsec% %end_millsec% %total_time_millsec%
set /a tsec=%total_time_millsec%/1000
set /a tmsec=%total_time_millsec%-%tsec%*1000
set /a tmin=%tsec%/60
set /a tsec=%tsec%-%tmin%*60
set /a thour=%tmin%/60
set /a tmin=%tmin%-%thour%*60

if %thour% LEQ 9 (set thour=0%thour%)
if %tmin%  LEQ 9 (set tmin=0%tmin%)
if %tsec%  LEQ 9 (set tsec=0%tsec%)
if %tmsec%  LEQ 9 (set tmsec=00%tmsec%) else (if %tmsec%  LEQ 99 (set tmsec=0%tmsec%))
set total_time=%thour%:%tmin%:%tsec%.%tmsec%
if "%3"=="display" (echo [%start_pos_tmp% - %end_pos_tmp%] = %total_time%)
_______________________
转换 Lib_Conversion.bat
~~~~~~~~~~~~~~~~~~~~~~~
@echo off
set h=%time:~0,2%
if "%h:~0,1%"==" " set "h=0%h:~1%"
set m=%time:~3,2%
set s=%time:~6,2%
set hms=%h%%m%%s%
rem ------------------------------input parameters-----------------------------
set         inFile=%1
set        outFile=%2_%hms%_%6.%3
set      start_pos=%4
set        end_pos=%5

rem set video_bit_rate=-b:v 1500k
rem set audio_bit_rate=-b:a 64k
rem set     frame_size=-s 720x404
rem set         aspect=-aspect 16:9
set    logFileName=%2_conversion.log

rem for copy
set    video_codec=-c:v copy
set    audio_codec=-c:a copy

rem for H264
rem set    video_codec=-c:v libx264
rem set    audio_codec=-c:a libvo_aacenc

rem for mpeg4 xvid
rem set    video_codec=-c:v mpeg4
rem set fourcc_tag_out=-tag:v XVID
rem set    audio_codec=-c:a libmp3lame

rem set         inFile="D:\TDDOWNLOAD\01.mp4"
rem set        outFile="%hms%.avi"
rem set      start_pos=00:40:10.000
rem set        end_pos=00:40:11.000
rem ------------------------------calctime-------------------------------------
if "%end_pos%"    NEQ "" (call Lib_CalculateTotalTime %start_pos% %end_pos% display)
if "%total_time%" NEQ "" (set total_time=-t %total_time%)
if "%start_pos%"  NEQ "" (set start_pos=-ss %start_pos%)
rem ------------------------------make cmd-------------------------------------
set cmd=ffmpeg
set cmd=%cmd% %start_pos%
set cmd=%cmd% -y -i %inFile% %total_time%
set cmd=%cmd% %audio_codec% %audio_bit_rate%
set cmd=%cmd% %video_codec% %fourcc_tag_out% %video_bit_rate%
rem set cmd=%cmd% -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 %frame_size% %aspect%
set cmd=%cmd% %frame_size% %aspect%
set cmd=%cmd% %outFile%
rem ------------------------------run cmd--------------------------------------
set begin_time=%date:~0,10% %time:~0,11%
@echo on
%cmd%
@echo off
set end_time=%date:~0,10% %time%
rem ------------------------------write to log---------------------------------
echo ---%date:~0,10% %time:~0,11%---------------------------------------------->>%logFileName%
echo %cmd%>>%logFileName%
echo.>>%logFileName%
echo         inFile = %inFile%>>%logFileName%
echo        outFile = %outFile%>>%logFileName%
if "%video_bit_rate%" NEQ "" (echo Video bit rate = %video_bit_rate:~5,10%>>%logFileName%)
if "%audio_bit_rate%" NEQ "" (echo Audio bit rate = %audio_bit_rate:~5,10%>>%logFileName%)
echo.>>%logFileName%
echo      start_pos = %start_pos:~4,12%>>%logFileName%
echo        end_pos = %end_pos%>>%logFileName%
echo     total_time = %total_time:~3,12%>>%logFileName%
echo.>>%logFileName%
echo     begin time = %begin_time%>>%logFileName%
echo       end time = %end_time%>>%logFileName%
rem ------------------------------put message----------------------------------
echo -------The end of the conversion------------------------------------------
rem echo         inFile = %inFile%
rem echo        outFile = %outFile%
if "%video_bit_rate%" NEQ "" (echo  video bit rate = [v:%video_bit_rate:~5,10%] [a:%audio_bit_rate:~5,10%])
echo      video time = [%start_pos:~4,12% - %end_pos%] = %total_time:~3,12%
call Lib_CalculateTotalTime %begin_time:~11,11% %end_time:~11,11%
echo conversion time = [%begin_time:~11,11%  - %end_time:~11,11% ] = %total_time:~0,12%
echo --------------------------------------------------------------------------
__________________
合并 Lib_Joins.bat
~~~~~~~~~~~~~~~~~~
@echo off
setlocal enabledelayedexpansion
dir *.avi/b/w/n/on>all_avi_name.txt
set aaf=mencoder
for /f %%i in (all_avi_name.txt) do (set aaf=!aaf! "%%i")
set aaf=!aaf! -oac copy -ovc copy -o join.avi
rem set aaf=!aaf! -oac pcm -ovc copy -o join.avi
echo %aaf%>>join.log
set begin_time=%date:~0,10% %time:~0,11%
%aaf%
set end_time=%date:~0,10% %time%
echo ------------ All video join are completed ------------
call Lib_CalculateTotalTime %begin_time:~11,11% %end_time:~11,11%
echo join time = [%begin_time:~11,11% - %end_time:~11,11%] = %total_time:~0,12%
echo ------------------------------------------------------
下载批处理

posted on 2012-09-20 14:23 1CM 阅读(1342) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理