【问题标题】:Batch concatenate pairs of videos批量连接视频对
【发布时间】:2021-02-19 08:38:52
【问题描述】:

我有一个包含 1000 多个视频文件的目录。我想将它们两两连接起来。

文件的字母顺序给出所需的对,例如,输入文件

 filename_1.mp4
 filename_2.mp4
 filename_3.mp4
 filename_4.mp4
 ...

应该产生输出文件

 filename_1-2.mp4
 filename_3-4.mp4
 ...

他们输入的文件都具有相同的尺寸和格式。

如何编写调用ffmpeg 的批处理脚本来实现此目的?

【问题讨论】:

  • 欢迎来到本站!我冒昧地以更紧凑和更易于理解的形式重写了这个问题。只是一个问题:对于这些文件名,字母排序不会给你错误的对,除非你用0's 左填充数字,例如filename_0001.mp4 等等?
  • 基于您打算对.mp4 文件执行此操作这一事实,我强烈建议您先阅读this question 及其答案。
  • 您尝试过的代码示例总是很好youtube.com/watch?v=BV3QgDq2TGw
  • @Carl 您的编辑增加了一些混乱。 “两两合并视频”让我认为问题是关于2x2 grid。更好的标题应该是“批量连接视频对”。
  • @llogan 绝对同意,标题已根据您的建议进行编辑。

标签: windows batch-file ffmpeg


【解决方案1】:

一种可能的解决方案是遍历所有文件,并执行一个简单的二进制切换,要么捕获文件名,要么对先前捕获的文件名和当前文件进行操作:

@echo off

setlocal enabledelayedexpansion enableextensions
set _last=

for %%a in (*.mp4) do (
    if "!_last!" == "" (
        set _last=%%a
    ) else (
        echo merging "!_last!" and "%%a" to "%%a_combined.mp4"
        echo file '!_last!'>simple_list.txt
        echo file '%%a'>>simple_list.txt
        rem Obviously, change this depending on how you want to invoke ffmpeg
        ffmpeg -f concat -safe 0 -i simple_list.txt -c copy "%%a_combined.mp4"
        del simple_list.txt

        set _last=
    )
)

if not "!_last!" == "" (
    echo !_last! was unprocessed!
)

虽然这可行,但我强烈建议您考虑使用 Python 之类的东西来完成这项任务。例如,如果您想批量处理十个文件,在批处理文件中绝对可以,但在 Python 脚本中几乎是微不足道的。或者,如果您想将“10 分钟”的视频合并到一个文件中,这在 Python 中是可能的,但在批处理文件中几乎是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2021-03-24
    相关资源
    最近更新 更多