ffmpeg concat 不适用于绝对路径

ffmpeg concat 不适用于绝对路径

我需要使用 concat 和绝对路径,但似乎不起作用。文档中说它应该可以工作。有人知道如何让它工作吗? ffmpeg 文档

它不起作用,因为它似乎将文本文件目录附加到文件路径

Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'

我使用 Windows 7。

ffmpegTest.txt:
file 'c:/temp/ffmpeg/01.mov'
file 'c:/temp/ffmpeg/02.mov'

"Y:/Shotgun/bin/ffmpeg/bin/ffmpeg.exe" -f concat -i "C:/temp/ffmpeg/ffmpegTest.txt" -c copy "C:/temp/ffmpeg/test.mov
ffmpeg version N-58949-g0e575c2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec  9 2013 22:06:49 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 58.100 / 52. 58.100
  libavcodec     55. 45.100 / 55. 45.100
  libavformat    55. 22.100 / 55. 22.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     3. 92.100 /  3. 92.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
[concat @ 0000000000337920] Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'
C:/temp/ffmpeg/ffmpegTest.txt: Invalid argument

答案1

我刚刚遇到了类似的错误消息。我最终弄清楚了。有两个问题。

问题 1:

当做

ffmpeg -f concat -i <path_to_text_file> ...

必须path_to_text_file使用正斜杠,而不是反斜杠,即使在 Windows 中也是如此。不过,此规则似乎不适用于命令行上的视频文件路径——仅适用于命令行上的文本文件路径。

问题 2:

ffmpeg 将文本文件中列出的路径解释为相对于文本文件位置的路径。(具体而言,列出的路径与当前工作目录无关。)

因此,例如,如果您尝试连接在一起的视频文件与文本文件位于同一目录中(但与当前工作目录不同),那么文本文件中列出的路径应该只是视频文件的名称,没有任何前面的目录。

希望这对将来的某人有所帮助。

答案2

使用当前版本的 ffmpeg(2020 年 5 月 10 日),在 Windows 10 上,列表文件必须包含文件 URL 的 ffmpeg 形式。使用 OP 的列表文件,其内容需要为:

file 'file:c:/temp/ffmpeg/01.mov'
file 'file:c:/temp/ffmpeg/02.mov'

-safe 0仍需

也可以看看https://trac.ffmpeg.org/ticket/2702

答案3

@Eric 的回答提供了一条重要指令,允许在 concat demuxer 输入中使用完整路径(您必须-safe 0向 ffmpeg 提供该选项)。然而,在 Windows 下,ffmpeg 的 concat demuxer 无法正确处理绝对/完整路径从磁盘名称开始。虽然它在安全检查中正确识别了完整路径,但在打开文件时,它会错误地将这些路径解释为相对路径(因为它们不以斜杠开头)。由于非绝对路径相对于 concat demuxer 输入脚本的位置,因此ffmpeg将后者的路径添加到文件路径的前面。如果 concat 脚本命令行参数不包含任何文件路径分隔符(即只是一个文件名),则问题被掩盖了。

插图:

concat.txt:
file 'c:/videos/01.flv'
file 'c:/videos/02.flv'


ffmpeg -f concat -safe 0 -i "C:/temp/concat.txt" -c copy "C:/temp/test.flv"
...
[concat @ 0000000000abcdef] Impossible to open 'C:/temp/c:/videos/01.flv'
C:/temp/concat.txt: Invalid argument


cd C:\temp
ffmpeg -f concat -safe 0 -i "./concat.txt" -c copy "C:/temp/test.flv"
...
[concat @ 0000000000abcdef] Impossible to open './c:/videos/01.flv'
./concat.txt: Invalid argument


ffmpeg -f concat -safe 0 -i "concat.txt" -c copy "C:/temp/test.flv"
# Works successfully!

答案4

注意;在 Windows 上,如果您使用 concat 与文本文件,则文本文件中的路径需要相对于输出路径

例如

ffmpeg -f concat -i file.txt "C:\foo\file.mp4"

如果您的文件位于目录中,则C:\temp\bar.mp4您的文本文件如下所示:

file ..\temp\bar.mp4
...

相关内容