ffmpeg concatは絶対パスでは機能しません


14

絶対パスで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

回答:


16

同様のエラーメッセージが表示されました。私は最終的にそれを理解しました。2つの問題がありました。

問題1:

するとき

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

path_to_text_fileWindowsでも、バックスラッシュではなくスラッシュを使用する必要があります。ただし、このルールはコマンドラインのビデオファイルパスには適用されないようです。コマンドラインのテキストファイルパスにのみ適用されます。

問題2:

テキストファイル内にリストされているパスは、ffmpegによって、テキストファイルの場所に対する相対パスとして解釈されます。(特に、リストされているパスは、現在の作業ディレクトリに対する相対パスではありません。)

したがって、たとえば、連結しようとしているビデオファイルがテキストファイルと同じディレクトリにある(ただし、現在の作業ディレクトリとは異なる)場合、テキストファイルにリストされているパスは、単にビデオファイル名にする必要があります。先行するディレクトリなし。

これが将来の誰かを助けることを願っています。


テキストファイル内にリストされているパスは、ffmpegによって、テキストファイルの場所に対する相対パスとして解釈されます。Windowsのffmpegにバグがあります。これは私の回答で
Leon

2

あなたはできるどちらかそうのような入力ファイルのリストであるテキストファイルを使用します。

ffmpeg -f concat -i ffmpegTest.txt -c:v copy output.mov

または

次のようにファイルに明示的に名前を付けることができます。

ffmpeg.exe -f concat -i 'c:/temp/ffmpeg/01.mov' -i 'c:/temp/ffmpeg/02.mov' -c:v copy 'C:/temp/ffmpeg/output.mov'    

2つの入力を次々に使用して-c:v copyから、を使用して、再エンコードする必要はなく、結合のみを行うようにしてください。また、これは連結デマルチプレクサです。これは柔軟ですが、2つの入力ファイルに同じコーデックが必要です。

テキストファイルの内容は、あなたが書いたとおりです。

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

一重引用符に注意してください

一般的な形式は次のとおりです。

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

これは、複数のドライブとパスに適用されます。

ここで、実際の作品連結ファイルの例:

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'

これは全体です: 同じドメイン上の別のWindowsマシン上の
1つの内部ドライブ
1つの外部USBドライブ
1つのネットワークドライブ

コマンドの使用は次のとおりです。

ffmpeg -f concat -i conc.txt -c:v copy -strict -2 output.mpeg

これはエラーなしで期待どおりに機能します。


1
たくさんのビデオを撮ることができるので、ファイルを使用する必要があります。そして、ファイルに絶対パスが必要です
DarkPixel 14

できません。ファイルはネットワークドライブ上にあり、複数のフォルダにあります。特定のディレクトリを強制することはできません
DarkPixel

絶対パスでこのエラーが発生しました: 'C:/ temp / ffmpeg / c:/temp/ffmpeg/01.mov'を
開くことができません

コマンドが間違っているため、エラーが発生しています。答えを見てください。
Rajib 2014

1
この回答は、ffmpegバージョンN-90173、Win10、CMDプロンプトで機能します。ただし、-iパラメータに一重引用符がなく、スラッシュを使用しない場合のみです。-i C:\ foo \ bar \ filelist.txt
Jay Borseth

2

通知; Windowsでは、テキストファイルでconcatを使用している場合、テキストファイル内のパスは、出力パスを基準にする必要があります

例えば

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

ファイルがディレクトリにある場合、C:\temp\bar.mp4テキストファイルは次のようになります。

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

1
行方不明"の文字?
DavidPostill

2

使用する

ffmpeg.exe" -f concat -safe 0 -i fileWithAbsoluePaths.txt -c copy out.mov

あなたの場合

"Y:/Shotgun/bin/ffmpeg/bin/ffmpeg.exe" -f concat -safe 0 -i "C:/temp/ffmpeg/ffmpegTest.txt" -c copy "C:/temp/ffmpeg/test.mov

キーは-safe 0です。これにより、txtファイルに絶対パスを含めることができます。


Windowsの下では、私の答えでカバーされている警告があります:superuser.com/a/1374679/598963
Leon

2

@Ericの回答は、連結デマルチプレクサのフルパスを許可するための重要な指示を提供し-safe 0ます(ffmpeg のオプションを提供する必要があります)。ただし、Windowsでは、ffmpegの連結デマルチプレクサは、ディスク名で始まる絶対/完全パスを正しく処理しません。セキュリティチェックでフルパスを正しく認識しますが、ファイルを開くときに、パスが(スラッシュで始まっていないため)相対パスと誤って解釈します。非絶対パスは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!

-1

一方でcmd.exe、大文字と小文字を区別しないで、ffmpegされていない(主にLinux上に構築され、それは* nixのシェル規約に向かう傾向があります)。c:入力ファイルの各行のをに変更するとC:、機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.