将cmd ffmpeg脚本转换为shell

时间:2015-10-30 13:31:05

标签: shell cmd ffmpeg nas

它非常简单的cmd代码但是我无法知道它应该如何在我的带有shell的

上运行

请帮助转换脚本:

@echo off
setlocal enableextensions enabledelayedexpansion

设置

set sWorkFolder=d:\workfolder
set sSourceFolder=%sWorkFolder%\waiting-to-convert
set sDestFolder=%sWorkFolder%\done
set sBackupFolder=%sWorkFolder%\trash
set sPath2ffmpeg=%sWorkFolder%\ffmpeg\bin\ffmpeg.exe

开始循环

for /r "%sSourceFolder%" %%i in (*.mp4) do call :action "%%i"

endlocal
exit /b

:action
setlocal enableextensions enabledelayedexpansion

set "sSourcePath=%~dp1"
set "sDestPath=%sDestFolder%!sSourcePath:%sSourceFolder%=!"
if not exist "%sDestPath%." md "%sDestPath%"
set "sDestFile=%sDestPath%%~n1.720p%~x1"

"%sPath2ffmpeg%" -i "%~f1" -vcodec h264 -vf "scale=trunc(oh*a/2)*2:min(720p\,ih)" -b:v 2000k -preset faster -acodec copy -y "%sDestFile%"

set "sBackupPath=%sBackupFolder%!sSourcePath:%sSourceFolder%=!"
if not exist "%sBackupPath%." md "%sBackupPath%"

move /y "%~1" "%sBackupPath%"

endlocal
exit /b

1 个答案:

答案 0 :(得分:1)

Shell脚本通常是echo off。您可以使用set -vx获取调试输出,并使用set +vx将其关闭。这两个可以放在文件中的任何位置(最好是与其他文件分开的一行)。 (正如您将注意到的,下面set与cmd的shell非常不同。

脚本的第一行应该是

#!/bin/bash

保存文件后,需要执行unix / linux命令

chmod 755 myScript.sh

将其标记为可执行文件。

如果你在windows上创建文件,或者使用windows ftp或windows中的任何东西,一旦你有文件到* nix,那么

dos2unix myScript.sh

set var=valueDestPath=/path/to/dir完成。使用

if [ ! -d "$DestPath" ] ; then mkdir "$DestPath'; fi

所有变量都被引用为"$var"

move缩写为mv。有关man mv的查找等效选项,请参阅/y

for file in *.mp4 ; do cmd "$file" ; done

我在for循环中无法理解您的do :action,因此我已将cmd替换为“做一些工作”。您可以调用外部命令(多个),具有您调用的已定义函数或具有多cmd管道,例如

cmd1 file | filter_cmd | filter2_cmd > outfile

由于您的代码中包含标签(即:action),因此您应该知道只有csh允许goto支持分支(您不希望在{}中开始编码{1}}!)。您必须重构代码才能在cshfor循环内工作,依靠whilebreak来更改循环内的处理。

转换这么多,然后使用http://shellcheck.net来表示错误。使用更正后的代码发布新问题,并显示确切的错误消息。

IHTH