ffmpeg concat não funciona com caminho absoluto

9

Eu preciso usar o concat com o caminho absoluto, mas parece que não funciona. No documento, diz que deveria funcionar. Alguém tem uma ideia de como fazer isso funcionar? ffmpeg Doc

Não funciona porque parece anexar o diretório do arquivo de texto ao caminho do arquivo

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

Eu uso o 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
    
por DarkPixel 17.02.2014 / 16:52

5 respostas

15

Acabei de encontrar mensagens de erro semelhantes. Eu finalmente percebi isso. Houve dois problemas.

Questão 1:

Ao fazer

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

o path_to_text_file deve usar barras, não barras invertidas, mesmo no Windows. Esta regra não parece se aplicar aos caminhos dos arquivos de vídeo na linha de comando - apenas para o caminho do arquivo de texto na linha de comando.

Questão 2:

Os caminhos listados em seu arquivo de texto são interpretados pelo ffmpeg como sendo relativos ao local do seu arquivo de texto. (Em particular, os caminhos listados não são relativos ao diretório de trabalho atual.)

Assim, por exemplo, se os arquivos de vídeo que você está tentando concatenar juntos estiverem no mesmo diretório que seu arquivo de texto (mas diferente do diretório de trabalho atual), os caminhos listados em seu arquivo de texto devem ser simplesmente nomes de arquivos de vídeo sem nenhum diretório anterior.

Espero que isso ajude alguém no futuro.

    
por 21.07.2015 / 10:56
2

Você pode ou usar um arquivo de texto que seja uma lista de arquivos de entrada, como:

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

OR

Você pode nomear explicitamente os arquivos assim:

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

Observe que você usa 2 entradas uma após a outra e, em seguida, usa -c:v copy para dizer que não deve haver reinserção apenas de codificação. Além disso, esta é a concat demuxer . Isso é flexível, mas requer que os 2 arquivos de entrada tenham os mesmos codecs.

O conteúdo do arquivo de texto é como você escreveu:

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

Observe as aspas simples

O formato genérico é:

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

Isso se aplica a várias unidades e caminhos.

Aqui está um exemplo real de um arquivo de concatenação que funciona:

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'

Isso está do outro lado:
Uma unidade interna
Uma unidade USB externa
Uma unidade de rede em outra máquina Windows no mesmo domínio

O uso do comando é:

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

Isso funciona como esperado sem erros.

    
por 17.02.2014 / 17:24
1

Aviso; no Windows, se você estiver usando concatenação com um arquivo de texto, os caminhos no arquivo de texto precisam ser relativos ao caminho de saída .

Por exemplo,

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

Se seus arquivos estão localizados no diretório C:\temp\bar.mp4 , seu arquivo de texto se parece com isto:

file ..\temp\bar.mp4
...
    
por 16.12.2014 / 15:03
1

Use

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

No seu caso

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

A chave é -safe 0 . Isso permite que você coloque caminhos absolutos no arquivo txt.

    
por 17.10.2017 / 19:23
0

Enquanto cmd.exe não faz distinção entre maiúsculas e minúsculas, ffmpeg não é (sendo construído principalmente no linux, ele tende a convenções de shell do * nix). Se você alterar o c: em cada linha do seu arquivo de entrada para C: , isso deve funcionar, eu acho.

    
por 17.02.2014 / 23:51

Tags