ffmpeg concat 不适用于绝对路径

Dar*_*xel 19 video ffmpeg

我需要将 concat 与绝对路径一起使用,但它似乎不起作用。在文档中它说它应该工作。任何人都知道如何使它工作? ffmpeg 文档

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

Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'
Run Code Online (Sandbox Code Playgroud)

我使用 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
Run Code Online (Sandbox Code Playgroud)

wal*_*rus 18

我刚刚遇到了类似的错误消息。我终于想通了。有两个问题。

问题 1:

做的时候

ffmpeg -f concat -i <path_to_text_file> ...
Run Code Online (Sandbox Code Playgroud)

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

问题 2:

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

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

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


小智 9

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

file 'file:c:/temp/ffmpeg/01.mov'
file 'file:c:/temp/ffmpeg/02.mov'
Run Code Online (Sandbox Code Playgroud)

-safe 0 仍然需要

另见https://trac.ffmpeg.org/ticket/2702


Raj*_*jib 2

您可以使用作为输入文件列表的文本文件,如下所示:

ffmpeg -f concat -i ffmpegTest.txt -c:v copy output.mov
Run Code Online (Sandbox Code Playgroud)

或者

您可以像这样显式命名文件:

ffmpeg.exe -f concat -i 'c:/temp/ffmpeg/01.mov' -i 'c:/temp/ffmpeg/02.mov' -c:v copy 'C:/temp/ffmpeg/output.mov'    
Run Code Online (Sandbox Code Playgroud)

请注意,您一个接一个地使用 2 个输入,然后用来-c:v copy表示不应该进行重新编码 - 仅加入。另外,这是 concat demuxer。这很灵活,但确实要求 2 个输入文件具有相同的编解码器。

文本文件的内容如您所写:

file 'c:/temp/ffmpeg/01.mov'
file 'c:/temp/ffmpeg/02.mov'
Run Code Online (Sandbox Code Playgroud)

注意单引号

通用格式为:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
Run Code Online (Sandbox Code Playgroud)

这适用于多个驱动器和路径。

这是一个有效的串联文件的真实示例:

file '/run/media/rnx/New Volume1/PREMIER_OUTPUTEST/Sequence004.mpeg'
file '/home/rnx/Sequence003.mpeg'
file '/run/user/rnx/gvfs/users on edtmchn/Public/Sequence01.mpeg'
Run Code Online (Sandbox Code Playgroud)

这是跨越:
一个内部驱动器
一个外部 USB 驱动器
同一域中另一台 Windows 计算机上的一个网络驱动器

命令用途是:

ffmpeg -f concat -i conc.txt -c:v copy -strict -2 output.mpeg
Run Code Online (Sandbox Code Playgroud)

这按预期工作,没有任何错误。