如何解决 ffmpeg concat 命令错误“未知关键字...”?

问题描述 投票:0回答:9

我正在尝试使用 ffmpeg 连接两个视频文件,但收到错误。

为了消除两个视频之间的兼容性问题,我将同一视频与其自身连接起来,但同样的错误仍然存在。

ffmpeg \
  -f concat \
  -safe 0 \
  -i intro_prepped.avi intro_prepped.avi \
  -c copy \
  concat.avi  

我收到的错误输出是......

[concat @ 0x220d420] 第 1 行:未知关键字“RIFFf�?” intro_prepped.avi:处理输入时发现无效数据

我尝试了各种 concat 标志的组合,但未能使其正常工作。有人以前见过这个错误吗?

shell command-line ffmpeg concatenation
9个回答
19
投票

这对于原始帖子来说有点晚了,但我只是在寻找同一问题的答案,所以我认为它仍然相关,而且我没有找到任何更新的帖子回答同一问题。

我发现我的.txt文件编码错误。我在记事本中打开该文件并执行“另存为...” 我将编码更改为 UTF-8 并且 ffmpeg concat 命令有效。


11
投票

我尝试了上述所有方法,但没有成功。

看起来列表中的文件名必须经过特殊格式化,如下所示:

文件'/path/to/file1.wav'

包含“文件”一词。我花了很多时间试图猜测为什么 ffmpeg 在尝试读取文件名时遇到错误。它们是在列表中还是在命令行中并不重要。所以只有在我使用命令之后 for f in *.wav; do echo "file '$f'" >> mylist.txt; done

根据 ffmpeg 手册制作列表,我成功了。唯一的区别是多了一个词“文件”。

这里你可以自己阅读:https://trac.ffmpeg.org/wiki/Concatenate#demuxer

有关连接文件的几种方法的文档:

https://trac.ffmpeg.org/wiki/Concatenate

10
投票

这是我用来连接视频的命令: ffmpeg \ -i "concat:input1.avi|input2.avi|input3.avi" \ -c:a copy \ -c:v copy \ output.avi

您的文本文件可能采用 UTF-16 编码。

6
投票
修复:

(Windows 10)

打开文本文件

选择“另存为”
  • 查看保存按钮,您可以通过下拉框选择编码,选择UTF-8。
  • 保存并再次运行 ffmpeg。
  • 我在ffmpegs网页上使用Powershell代码制作了一个带有文件名的文本文件,Powershell似乎将文本文件保存为UTF-16的某种变体,所以我选择了更安全的UTF-8。

输入文件应该是文本文件,而不是 avi。文本文件列出了要连接的文件。


1
投票
concat 解复用器文档

FFmpeg Wiki:Concat

没有人在任何地方拥有完整的、可工作的、连续的文本文件批处理文件。所以我才发帖


1
投票

我在 Mac(M1、Ventura、ffmpeg 版本 N-109530-g4a80db5fc2-tessus)上艰难地完成了上述所有说明。它们都不适合我 - 但将所有这些组合起来就成功了!

0
投票

将所有输入文件放在同一个文件夹中

在此文件夹中创建
    input.txt
  • - 内容如下所示:
  • file 'input1.mp4' file 'input2.mp4' file 'input3.mp4' file 'input4.mp4'
  • 注:
    • 文件编码必须是 UTF-8
      • file
        关键字必须存在
      • 文件名不得完全限定(我使用
        '/path/to/input1.mp4'
        得到了例外)
      • 文件名必须用
        '
      • 括起来
      • 
        
      在终端中导航到此文件夹
    执行
  • ffmpeg -f concat -i input.txt -c copy ffmpegOUT.mp4
  • 
    
  • 最新:

0
投票

使用此功能收集文件,并根据日期修改进行排序:

    foreach ($i in Get-ChildItem -Path .\*.mp4 | Sort-Object -Property LastWriteTime) {echo "file '$i'" >> mylist.txt}
  1. 另存为 UTF-8 的 mylist
  2. 通过在 powershell 中运行以下命令来组合它们:

  3. ffmpeg -f concat -safe 0 -i mylist.txt -vcodec copy output.mp4
  4. 必须安装ffmpeg才能直接使用。
  5. 如果你想直接使用ffmpeg exe而不安装,那么使用:

  6. ./ffmpeg -f concat -safe 0 -i mylist.txt -vcodec copy output.mp4
  7. 假设 ffmpeg.exe 位于同一目录中,并且 powershell 位于该目录中

    
        

  8. 对我来说,它是通过禁用 UTF-8 格式的 BOM 来实现的。所以文件是 UTF-8 且 noBOM。

0
投票

file 'video1.mp4' file 'video2.mp4' file 'video3.mp4'

并使用:

ffmpeg -f concat -i input_videos.txt -c copy ffmpeg_out.mp4

© www.soinside.com 2019 - 2024. All rights reserved.