在视频ffmpeg批处理脚本中显示文件名

时间:2019-03-14 19:56:15

标签: python batch-file ffmpeg

我有一个包含大约10个不同mov文件的文件夹。我想在bat文件中使用ffmpeg在每个视频中将文件名添加为文本。有人可以帮我实现这个目标吗?

编辑:

我尝试使用

@ECHO OFF&Setlocal EnableDelayedExpansion
Set INPUT=E:\\Users\\Oli\\Documents\\Projects\\v1.3.0\\downloads3
Set OUTPUT=E:\\Users\\Oli\\Documents\\Projects\\v1.3.0\\downloads3
for %%a in ("%INPUT%\*.*") DO ( 
    set "filename=%%~na"
    ffmpeg -i "%%a" -vf "drawtext=text=!fileName:.= !:x=105:y=120:fontfile=E:\\Users\\Oli\\Documents\\Projects\\v1.3.0\\downloads3\\impact.ttf:fontsize=25:fontcolor=white" -b:v 1M -r 60 -b:a 320k -ar 48000 -crf 17 "%%~na.mov"
)`

但这给了我错误:

 Cannot find a valid font for the family Sans
[AVFilterGraph @ 0000026eb75a9f40] Error initializing filter 'drawtext' with args 'text=FileName1'
Error reinitializing filters!
Failed to inject frame into filter network: No such file or directory
Error while processing the decoded data for stream #0:0

1 个答案:

答案 0 :(得分:1)

让我们摆脱变量分配,只需使用变量扩展来设置名称。另外,尽管它仍然可以使用,但是由于不需要第二个反斜杠并且看起来很难看,因此请删除第二个反斜杠。最后,请始终用双引号将set变量包装为路径。试试看。

@echo off
set "INPUT=E:\Users\Oli\Documents\Projects\v1.3.0\downloads3"
set "OUTPUT=E:\Users\Oli\Documents\Projects\v1.3.0\downloads3"
for %%a in ("%INPUT%\*.*") do (
    ffmpeg -i "%%~a" -vf "drawtext=text=%%~na:x=105:y=120:fontfile=%~dp0impact.ttf:fontsize=25:fontcolor=white" -b:v 1M -r 60 -b:a 320k -ar 48000 -crf 17 "%%~na.mov"
)