解决视频合并中的.ts文件的问题?

时间:2017-04-14 23:53:54

标签: batch-file video cmd ffmpeg

我有这些代码用于视频处理,第一个添加水印,第二个创建水印视频的.ts文件,然后添加一个介绍和outro但我发现它由于使用了.ts文件,很快就会填满磁盘空间,有没有办法在没有它们的情况下实现相同的结果?通过在使用它们之后立即删除它们或者完全使用不同的过程来删除它们。

for %%I in ("C:\Users\Administrator\Desktop\work\*.mp4") do ffmpeg.exe
    -y -i "%%I" -i white.png -filter_complex "[0:v]scale=iw:ih[v0];[1:v][v0]scale2ref=iw/6:ih/18[logo][0v];[0v][logo]overlay=W-w-3:H-h-1[v]"
    -map "[v]" -map 0:a -codec:v libx264 -preset ultrafast -crf 23 -codec:a copy "C:\Users\Administrator\Desktop\Complete-videos\%%~nI.mp4"

for %%I in ("C:\Users\Administrator\Desktop\Complete-videos\*.mp4") do ffmpeg -y
    -i %%I -c copy -vbsf h264_mp4toannexb -f mpegts -s 1280*720 %%I.ts && ffmpeg -y -i "concat:out1.ts|%%I.ts|out1.ts" -c:v libx264 -strict experimental -bsf:a aac_adtstoasc -ar 48000 -r 20 "C:\Users\Administrator\Desktop\Complete-videos\%%~nI.mp4 
pause

2 个答案:

答案 0 :(得分:1)

[完全未经验证的建议,因为我不知道ffmpeg行在做什么]

我建议您在具有受限空间的设备上的小文件子集上尝试此操作,例如ramdrive或usb驱动器。 USB驱动器可能需要一段时间。咖啡很好。

for %%I in ("C:\Users\Administrator\Desktop\work\*.mp4") do (
 ffmpeg.exe -y -i "%%I" -i white.png -filter_complex "[0:v]scale=iw:ih[v0];[1:v][v0]scale2ref=iw/6:ih/18[logo][0v];[0v][logo]overlay=W-w-3:H-h-1[v]"
    -map "[v]" -map 0:a -codec:v libx264 -preset ultrafast -crf 23 -codec:a copy "C:\Users\Administrator\Desktop\Complete-videos\%%~nI.mp4"

 for %%Q in ("C:\Users\Administrator\Desktop\Complete-videos\%%~nI.mp4") do ffmpeg -y
    -i %%Q -c copy -vbsf h264_mp4toannexb -f mpegts -s 1280*720 %%Q.ts && ffmpeg -y -i "concat:out1.ts|%%I.ts|out1.ts" -c:v libx264 -strict experimental -bsf:a aac_adtstoasc -ar 48000 -r 20 "C:\Users\Administrator\Desktop\Complete-videos\%%~nQ.mp4 

 del *.ts
)
pause

这样,使用%%I的第一个循环选择要处理的文件并显然将处理后的文件放在另一个目录中,然后立即对该文件执行第二个过程,由%%Q使用名称控制在%%~nI中选择上一个过程创建的单个文件。

因此,不是处理10个文件,每个文件都有自己的.ts集,而是一次处理一个,并且只创建一个.ts集。我不知道第二个进程是否删除了.ts个文件,但是我已经添加了del以在每个周期中删除它们。我也不知道第一个流程是否会创建.ts个文件,但我已做出这样的假设。

正如教育学家所说的那样,新数学" - 它的想法非常重要。

答案 1 :(得分:1)

这是在一个命令中完成的,没有中间文件。

for %%I in ("C:\Users\Administrator\Desktop\work\*.mp4") do ffmpeg.exe
-y -i "%%I" -i white.png -i out1.ts -filter_complex "[1:v][0:v]scale2ref=iw/6:ih/18[logo][0v];[0v][logo]overlay=W-w-3:H-h-1,scale=hd720,setsar=1[vl];[2:v][2:a][vl][0:a][2:v][2:a]concat=n=3:v=1:a=1[v][a]"
-map "[v]" -map "[a]" -r 20 -c:v libx264 -ar 48000 "C:\Users\Administrator\Desktop\Complete-videos\%%~nI.mp4"

pause

注意:根据out1.ts的位置,您可能必须在输入期间指定其完整路径。在第一个命令中,在第二步中,尺寸选项无效,因为您正在复制流。如果需要调整大小,请在我的命令中的concat过滤器之后插入scale=hd720。如果您的ffmpeg比2015年12月旧,并且您不想升级,请添加-strict experimental