Conjuntos de arquivos de vídeo em lote?

1

Eu tenho 158 pastas, cada uma contendo 5-15 arquivos de vídeo com duração de alguns minutos. Gostaria de mesclar todos os vídeos em um vídeo por pasta e excluir o restante.

As pastas são nomeadas como datas em um determinado ano com intervalos entre elas ( 01.11 , 01.12 , 01.13 , 01.14 , 01.18 ... 01.28 , 02.01 etc. ), e os arquivos neles são nomeados da seguinte forma:

ds_AAAAA_BB_CCC_480.mp4

O primeiro espaço em branco ( AAAAA ) é um número que é o mesmo para todos os arquivos nessa pasta. Para a pasta 01.11 , o número é 03075 e, em seguida, sobe um para cada pasta.

O segundo espaço em branco ( BB ) é a ordem dos arquivos, de 01 para quantos arquivos estiverem nessa pasta.

O terceiro espaço em branco ( CCC ) é um conjunto de três letras que varia por arquivo e pode ser ignorado.

Para alguns exemplos, o primeiro arquivo na primeira pasta ( 01.11 ) é ds_03075_01_nws_480.mp4 . O último (7º) arquivo na quarta pasta ( 01.14 ) é ds_03078_07_zen_480.mp4 .

Idealmente, gostaria que os novos arquivos estivessem em uma pasta separada (apenas para facilitar a exclusão de arquivos antigos) e nomeados em um formato como 01_11.mp4 , 01_12.mp4 e assim por diante, mas qualquer convenção de nomenclatura estaria bem.

Alguém tem alguma sugestão sobre como fazer isso?

    
por James Berzuk 08.10.2015 / 11:07

1 resposta

2

Eu tenho mesclado (concatenando) vídeos recentemente e descobri esta resposta muito útil. Para começar, instale o ffmpeg e verifique se ele está no seu caminho.

Você tem que fazer uma lista de arquivos para cada diretório que consiste em um arquivo de texto neste formato:

file 'file1.mp4'
file 'file2.mp4'
file 'file3.mp4'

Então você acabou de executar o ffmpeg com esta sintaxe:

ffmpeg -f concat -i filelist.txt -c copy merged.mp4

Eu estava construindo estes manualmente para alguns arquivos, mas para 158 pastas você vai precisar de alguma automação. A abordagem que eu tomaria provavelmente é usar o comando FOR no prompt de comando do Windows. Você pode gerar as listas de arquivos usando algo como:

for /r %f in (*.mp4) do echo file '%~nxf' >>%~dpf\concat.txt

Isso recursivamente ( /r ) varre os arquivos MP4 na pasta atual e todas as subpastas e ecoa (imprime) o nome e a extensão (que é o nx bit) em um arquivo separado em cada subpasta (o dp bit obtém a letra e o caminho da unidade). O >> bit faz anexar o nome do arquivo à lista, portanto, se você executar isso duas vezes, obterá uma lista duplicada. Portanto, exclua todos os arquivos concat.txt antes de executar o comando.

Então você quer rodar o ffmpeg em cada um deles. Você precisará de algo como:

for /d %f in (*) do cd %~ff & ffmpeg -f concat -i concat.txt -c copy ..\merged\%~nf.mp4

Para cada diretório ( /d ), altere para ele ( cd ) e ( & ) execute ffmpeg, gerando um arquivo de resultado que esteja na pasta "mesclada" da pasta de nível superior e é nomeado após o nome da pasta.

Não testado, portanto, use a seu próprio risco. (Embora não apague ou sobrescreva nada sem perguntar.)

    
por 08.10.2015 / 12:10