ffmpeg concat mutlak yolla çalışmıyor


10

Concat'ı mutlak yolla kullanmam gerekiyor, ama işe yaramadı. Doktorda çalışması gerektiğini söylüyor. İşe yaraması için fikri olan var mı? ffmpeg Doktor

Çalışmıyor çünkü metin dosya dizinini dosya yoluna ekliyor gibi görünüyor.

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

Windows 7'yi kullanıyorum.

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

Yanıtlar:


15

Sadece benzer hata mesajlarıyla karşılaştım. Sonunda anladım. İki sorun vardı.

Sorun 1:

Ne zaman yapıyorsun

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

path_to_text_filebile Windows, eğik çizgi değil, ters eğik çizgi ileri kullanmalıdır. Bu kural, komut satırındaki video dosyası yolları için geçerli görünmüyor - yalnızca komut satırındaki metin dosyası yolu için.

2. Sayı:

Metin dosyanızda listelenen yollar, ffmpeg tarafından metin dosyanızın konumuna göre yorumlanır. (Özellikle, listelenen yollar mevcut çalışma dizinine göre değildir.)

Bu nedenle, örneğin bir araya getirmeye çalıştığınız video dosyaları metin dosyanızla aynı dizindeyse (ancak geçerli çalışma dizininden farklıysa), metin dosyanızda listelenen yollar yalnızca video dosyası adları olmalıdır. önceki dizinler olmadan.

Umarım bu gelecekte birine yardımcı olur.


Metin dosyanızda listelenen yollar, ffmpeg tarafından metin dosyanızın konumuna göre yorumlanır. Vurgulanır windows altında Ffmpeg bir hata vardır Cevabıma
Leon

2

Sen edebilir ya şöyle girdi dosyalarının bir listesi bir metin dosyası kullanmak:

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

VEYA

Dosyaları açıkça şöyle adlandırabilirsiniz:

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

Birbiri ardına 2 giriş kullandığınızı ve daha sonra -c:v copysadece yeniden kodlama yapılmamasını söylemek gerektiğini kullanın . Ayrıca, bu concat demuxer . Bu esnektir, ancak 2 giriş dosyasının aynı kodeklere sahip olmasını gerektirir.

Metin dosyasının içeriği, yazdığınız şekildedir:

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

Tekli teklifleri not edin

Genel format:

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

Bu, birden fazla sürücü ve yol için geçerli olacaktır.

İşte işe yarayan bir birleştirme dosyasına gerçek bir örnek:

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'

Bu durum:
Bir dahili sürücü
Bir harici USB Sürücü
Aynı etki alanındaki başka bir Windows makinesinde bir Ağ sürücüsü

Komut kullanımı:

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

Bu, hatasız beklendiği gibi çalışır.


1
Çok fazla video çekebildiğim için bir dosya kullanmam gerekiyor. Ve dosyada mutlak yola ihtiyacım var
DarkPixel

Yapamam, dosya bir ağ sürücüsünde ve birden fazla klasörde. Belirli bir dizini zorlayamam
DarkPixel

Mutlak yol ile bu hatayı var: 'C: / temp / ffmpeg / c: /temp/ffmpeg/01.mov' açmak imkansız
DarkPixel

Hata alıyorsunuz, çünkü komut yanlış. Cevabı gör.
Rajib

1
Bu cevap ffmpeg versiyon N-90173, Win10, CMD komutunda sadece -i parametresi tek tırnak işaretli DEĞİL ve eğik çizgi kullanmazsa çalışır: -i C: \ foo \ bar \ filelist.txt
Jay Borseth

2

kullanım

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

Senin durumunda

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

Anahtar -safe 0 . Bu, txt dosyasına mutlak yollar koymanıza izin verir.


Pencerelerin altında cevabımda kapsanan bir uyarı var: superuser.com/a/1374679/598963
Leon

1

Uyarı; Windows'ta, bir textfile ile concat kullanıyorsanız, textfile içindeki yolların çıkış yoluna göre olması gerekir .

Örneğin

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

Dosyalarınız dizinde bulunuyorsa C:\temp\bar.mp4, metin dosyanız şu şekilde görünür:

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

1
Kayıp "karakter?
DavidPostill

1

@ Eric'in cevabı , concat demuxer girişinde tam yollara izin vermek için önemli bir talimat sunar ( -safe 0ffmpeg seçeneği sağlamalısınız). Ancak, Windows altında, ffmpeg'in concat demuxer'ı , disk adından başlayarak mutlak / tam yolları doğru şekilde işlemez . Güvenlik kontrollerinde tam yolları doğru bir şekilde tanımasına rağmen, dosyayı açarken bu yolları göreli olarak yanlış yorumlar (bir eğik çizgiyle başlamazlar). Mutlak olmayan yollar, concat demuxer giriş komut dosyasının konumuna ffmpeggöre olduğundan, ikincisinin yolunu dosya yoluna hazırlar. Concat betiği komut satırı argümanı herhangi bir dosya yolu ayırıcısı içermiyorsa (yani sadece bir dosya adıdır) sorun maskelenir.

İllüstrasyon:

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

Büyük / cmd.exeküçük harfe duyarlı olmamakla birlikte , ffmpeg(esasen linux üzerine kuruludur, * nix kabuk sözleşmelerine yönelir). c:Girdi dosyanızın her satırını değiştirirseniz, C:çalışması gerekir, sanırım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.