2016-01-20 28 views
0

ffmpeg的可以調整視頻/圖像文件。首先是INPUT_FILE ..參數.. OUTPUT_FILE ..如何修改此Windows腳本以進行匹配?

ffmpeg -i input.avi -vf scale=320:240 output.avi 

ffmpeg -i 20140724_071746.mp4 -vf scale=640:-1 20140724_071746_LOW_640.mp4 

更多的信息在這裏:https://trac.ffmpeg.org/wiki/Scaling%20%28resizing%29%20with%20ffmpeg

我想它縮小我的microSD卡上的所有視頻以創建空間(我有原始備份)

所以我希望它去扔一個將所有子目錄中的文件過夜並調整所有文件的大小。有可能腳本可能會停止或崩潰,我需要再次運行它,或者如果我添加新文件,我想再次運行它。

所以,我想它會跳過處理所有已處理的文件和他們的大小調整版本。

在我的情況下,如果一個FILE_NAME.mp4FILE_NAME_LOW_640.mp4跳過它,如果FILE_NAME_LOW_640.mp4 和 已*640跳過

這裏是我的Windows批處理腳本到目前爲止

REM @echo off 
REM just save as "DOS" 
REM cd /d C:\s 

setlocal enabledelayedexpansion 
for %%j in (*.mp4) do (
set filename=%%~nj 
echo %%j 

ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4 

REM but now I want to add the two checks to skip files that have been resized .. or if they are the resized version 

REM if not "!filename!"=="%%j_LOW_640.mp4" AND IF FILE !COINTAIN *640* THEN ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4 

) 

pause 
REM AND I would also want it to process all the sub-directories 

換句話說我的問題了幫助是:

  1. 我該如何做一個chec如果一個字符串包含字符串匹配,則爲k?

  2. 我怎樣才能讓我的腳本也處理所有的子目錄?

+1

爲什麼FFmpeg的用它做後,你不動源和調整文件都到另一個位置,您可以重新創建的'C的目錄結構xcopy c:\ s/t/e – Mulvya

+0

@RLH:我偶爾讀過其他人的類似聲明:_「This w應該在VBScript中做起來容易得多「,但他們從來沒有證明過這樣的說法。我邀請你在這裏發佈VBScript解決方案,在評論中。在VBS中做到這一點「非常容易」,我認爲它會比8行的批處理文件解決方案短得多[下面](http://stackoverflow.com/questions/34908015/how-to-modify-this- windows-script-to-do-a-match/34911596#34911596),對不對? – Aacini

+0

它當然更清潔。我在答案中顯示了一個vbs腳本走在樹上。 – 2016-01-20 23:38:24

回答

0
for /f "delims=" %A in ('dir /b /s c:\somewhere\*.mp4') do (findstr /c:"_640" %A || Echo ffeg etc %A) 

||裝置運行命令如果findstr返回不是0的錯誤級別,其中,如果該字符串中沒有找到它。 /sdir子文件夾。

批量使用%%A,鍵入時使用%A

查看Novice Batch Issue- Creating Files查看命令標點符號列表。

和一個vbs腳本走在樹上。在命令提示符(cscript //nologo "c:\some path\script.vbs" CSCRIPT運行它。更改爲您的機器啓動文件夾(更換c:\users\david candy\documents)。

On Error Resume Next 

Set fso = CreateObject("Scripting.FileSystemObject") 

ProcessFolder "c:\users\david candy\documents" 

Sub ProcessFolder(FolderPath) 

    Set fldr = fso.GetFolder(FolderPath) 

    Set Fls = fldr.files 

    For Each thing in Fls 

     wscript.echo thing.name 

    Next 

    Set fldrs = fldr.subfolders 

    For Each thing in fldrs 

     wscript.echo thing.name 

     ProcessFolder thing.path 

    Next 

End Sub 
0

我希望該方法足夠簡單,所以它沒有需要解釋。你可以閱讀更多細節通過運行`別處\ s`:對參數修飾符在HELP FOR

@echo off 
setlocal EnableDelayedExpansion 

for /F "delims=" %%a in ('dir /S /B *.mp4') do (
    set "name=%%~Na" 
    if "!name:~-3!" neq "640" if not exist "%%~DPNa_LOW_640.mp4" (
     ffmpeg -i "%%a" -vf scale=640:-1 "%%~DPNa_LOW_640.mp4" 
    ) 
)