我已经开始尝试进行自动化的大型视频项目。到目前为止,我取得了不错的进步,但是现在我陷入了困境。我已经在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
,但我无法使其正常工作。
有人对如何执行此操作有建议吗?
答案 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
)