FFMPEG Force Concat跳过损坏的文件

时间:2019-04-08 22:41:58

标签: batch-file ffmpeg concat

我当前正在使用:

ffmpeg -safe 0 -f concat -i clipstomerge.txt -vcodec copy -acodec copy mergedclips.mp4

这会合并来自clipstomerge.txt中列出的给定目录的视频。我注意到的是,如果有损坏的文件,则concat将失败。

如何强制concat跳过损坏的文件?

谢谢。

编辑: 我尝试了以下链接:http://www.ffmpeg-archive.org/Force-concat-to-ignore-corrupt-files-td4664775.html
但是我不明白如何将其放入我的蝙蝠文件中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

@echo off
setlocal

call :validateConcatFile clipstomerge.txt 2048
if errorlevel 1 echo Failed.& exit /b 1

echo Passed.
exit /b

:validateConcatFile  concatFile  acceptableSize
if "%~1" == "" exit /b 2
if "%~2" == "" exit /b 2

rem Check each listed media file.
for /f "usebackq tokens=1,2 delims='" %%A in ("%~1") do (

    rem Check only if leading concat keyword is "file".
    if "%%~A" == "file " (

        rem The file needs to exist.
        if not exist "%%~B" (
            echo "%%~B" not exist.
            exit /b 1
        )

        rem Check byte size.
        for %%C in ("%%~B") do if %%~zC lss %~2 (
            echo "%%~B" size is %%~zC which is less than %~2.
            exit /b 1
        ) else echo "%%~B" size is %%~zC which is ok at %~2.

        rem FFprobe scan.
        ffprobe -i "%~1" > nul 2> nul || (
            echo FFprobe set errorlevel with "%%~B".
            exit /b 1
        )
    )
)
exit /b 0

代码涵盖了一些有关损坏文件问题的基本思想。 由于检测腐败的概念可能会因问题而异, 那么您可以将其视为一个开始,因为代码可能是 随着时间的推移,任何人都可以使用更多的检测概念对其进行扩展。

用作转义符的特殊字符等可能导致文件不存在 检测。处理这些字符是不同的,因此不是 在此代码中可用,并将通过设置errorlevel返回。

完成的其他检测:

  • Concat列出的文件需要exist才能通过。
  • 列表文件的大小必须至少为 bytes 个字节才能通过。
  • 列出的文件需要通过简单的ffprobe扫描才能通过。

在代码示例中,被调用标签的第一个参数 :validateConcatFile是concat文件,即clipstomerge.txt 第二个参数是2048,它是字节大小,即 可以通过。