FFmpeg-批处理文件批量编辑

时间:2018-11-27 11:20:00

标签: batch-file

我已经开始尝试进行自动化的大型视频项目。到目前为止,我取得了不错的进步,但是现在我陷入了困境。我已经在Google和此处的Stack OverFlow中搜索了答案,但是找不到解决我问题的方法。

为完成我将解释我的整个项目。

我的项目的第一步是将我的所有文件都转换为*.mp4,并在同一运行中在视频中刻录我的徽标和网站。我使用以下代码进行此操作:

for %%a in ("*.*") do ffmpeg -i "%%a" -i "C:\Users\PC03\Desktop\Video test\Overlay.png" -filter_complex "[0:v][1:v] overlay" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k "newfiles\%%~na.mp4"
pause

在那之后,我将所有视频文件放入其相关的子文件夹中。这样,我几乎有一百个子文件夹,其中有2或3个文件。对于每个子图,我希望视频带有一个介绍性视频(不在子图中),该视频位于子映射中,而一个外部视频(不在子图中)。 我可以使用以下代码完成上述操作:

ffmpeg -f concat -i intro.mp4 -i mylist.txt -outro.png -c copy total.mp4

要使一切自动化,我有以下代码可为每个子文件夹制作一个mylist.txt文件:

>output.txt (
echo C:\Users\PC03\Desktop\Video test\vast\intro.mp4
(for %%i in (*.mp4) do @echo file '%%i')
echo C:\Users\PC03\Desktop\Video test\vast\outro.mp4
)

现在我唯一要做的就是自动化以下代码:

ffmpeg -f concat -i intro.mp4 -i mylist.txt -outro.png -c copy total.mp4

浏览所有子文件夹。

我编写了以下代码:

FOR /R "C:\Users\PC03\Desktop\Video test" %%F IN (.) DO (
    > %%F\output.txt (
        echo "C:\Users\PC03\Desktop\Video test\vast\intro.mp4"
        (for %%i in (*.mp4) do (
            @echo file '%%i'
        ))
        echo "C:\Users\PC03\Desktop\Video test\vast\outro.mp4"
    )
)

此代码为我在每个子文件夹中提供了一个mylist.txt文件,但是内容不是我想要的。它采用父映射而不是子文件夹的内容。我有一种强烈的感觉,在此代码中的某个地方我必须再创建一个FOR /R,但我无法使其正常工作。

有人对如何执行此操作有建议吗?

1 个答案:

答案 0 :(得分:0)

FOR /R将遍历文件夹,但是您尝试遍历*.mp4文件而不引用当前正在处理的(子)文件夹。

@Echo off
Set "Base=C:\Users\PC03\Desktop\Video test"
Set "Ext=*.mp4"

FOR /R "%Base%" %%F IN (.) DO (
    PushD "%%F"
    if exist "%Ext%" (
        > "%%~fF\output.txt" (
            echo "%Base%\vast\intro.mp4"
            For %%I in (%Ext%) do @echo file '%%~fI'
            echo "%Base%\vast\outro.mp4"
        )
        Echo created "%%~fF\output.txt"
    )
    PopD
)