我正在尝试使用 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 标志的组合,但未能使其正常工作。有人以前见过这个错误吗?
这对于原始帖子来说有点晚了,但我只是在寻找同一问题的答案,所以我认为它仍然相关,而且我没有找到任何更新的帖子回答同一问题。
我发现我的.txt文件编码错误。我在记事本中打开该文件并执行“另存为...” 我将编码更改为 UTF-8 并且 ffmpeg concat 命令有效。
我尝试了上述所有方法,但没有成功。
看起来列表中的文件名必须经过特殊格式化,如下所示:
文件'/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(Windows 10)
打开文本文件
选择“另存为”输入文件应该是文本文件,而不是 avi。文本文件列出了要连接的文件。
我在 Mac(M1、Ventura、ffmpeg 版本 N-109530-g4a80db5fc2-tessus)上艰难地完成了上述所有说明。它们都不适合我 - 但将所有这些组合起来就成功了!
将所有输入文件放在同一个文件夹中
在此文件夹中创建
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
使用此功能收集文件,并根据日期修改进行排序:
foreach ($i in Get-ChildItem -Path .\*.mp4 | Sort-Object -Property LastWriteTime) {echo "file '$i'" >> mylist.txt}
另存为 UTF-8 的 mylist
通过在 powershell 中运行以下命令来组合它们:
ffmpeg -f concat -safe 0 -i mylist.txt -vcodec copy output.mp4
必须安装ffmpeg才能直接使用。
如果你想直接使用ffmpeg exe而不安装,那么使用:
./ffmpeg -f concat -safe 0 -i mylist.txt -vcodec copy output.mp4
假设 ffmpeg.exe 位于同一目录中,并且 powershell 位于该目录中
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
并使用:
ffmpeg -f concat -i input_videos.txt -c copy ffmpeg_out.mp4