我需要将 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
您可以使用作为输入文件列表的文本文件,如下所示:
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)
这按预期工作,没有任何错误。
| 归档时间: |
|
| 查看次数: |
27209 次 |
| 最近记录: |