Arquivo corrompido ao gravar usando o ffmpeg

2

Estou tentando gravar vídeo da USB WebCam conectada à minha área de trabalho do Windows. Às vezes, recebo um arquivo mp4 que posso reproduzir usando o VLC. Mas às vezes, eu não consigo reproduzir o arquivo mp4 (o tamanho do arquivo parece um arquivo de vídeo válido, 37.528 KB).

Aqui está o comando que eu usei:

ffmpeg -rtbufsize 1500M -y -f vfwcap -i 0 output.mp4

Eu gostaria de saber:

  • por que recebo um arquivo corrompido em algum momento com o comando acima
  • como posso corrigir o arquivo mp4 'corrompido'?

Eu tentei a sugestão do bertieb. Eu recebo " moov atom not found .\corrupt.mp4: Invalid data found when processing input "

Quando eu abro o arquivo mp4, isso é o que eu vejo. Eu não vejo 'moov no cabeçalho. . Existe outra maneira de recuperar os arquivos de vídeo? E eu ainda devo mudar o formato de mp4 para mkv para captura futura (desde que a suposição era que a gravação foi cancelada antes de ser devidamente codificada.

    
por n179911 11.09.2015 / 07:29

1 resposta

2

Versão resumida:

  • arquivos estão corrompidos porque você está interrompendo para concluir o mp4 encode, alterne para algo como mkv .
  • 'não corrompido' pelo formato mudando para outro contêiner ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv
  • não use vfwcap , pois está desatualizado

Por que estou tendo problemas para capturar da minha webcam USB com ffmpeg ?

Do ffmpeg docs em vfwcap :

Note Well this is out of date, these days you can use the -f dshow device to capture from a directshow device.

Como está desatualizado, use -f dshow . A partir da documentação do DirectShow :

FFmpeg can take input from "directshow" devices on your Windows computer. See the ​FFmpeg dshow input device documentation for official documentation. It can accept input from audio, video devices, video capture devices, analog tv tuner devices.

A partir da documentação dshow vinculada , você deve primeiro descobrir qual é o dispositivo em dshow :

ffmpeg.exe -list_devices true -f dshow -i dummy

Exemplo de saída:

[dshow @ 0000000002e9bb20] DirectShow video devices (some may be both video and audio devices)
[dshow @ 0000000002e9bb20]  "PC Camera"
[dshow @ 0000000002e9bb20]     Alternative name "@device_pnp_\?\usb#vid_058f&pid_3880&mi_00#6&218cd81a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"

usando o "PC Camera" encontrado pelo comando anterior:

ffmpeg -f dshow -i video="PC Camera" -y output.mkv

(Eu desistiria de usar -rtbufsize inicialmente, já que existem algumas advertências para usar com dshow devices ')

Gostaria de sugerir o uso de mkv over mp4 , porque acho que você não está fazendo um código de tempo fixo, mas terminando com ffmpeg com Ctrl-C ; isso impede que ffmpeg grave determinados átomos no contêiner de vídeo e provavelmente porque o arquivo está corrompido 1 . mkv pode ser interrompido à vontade 2 .

1 : Você pode testar isso mudando o formato do mp4s corrompido: %código%. Se isso não funcionar, outra resposta sobre a SU pelo sparrowt recomenda ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv

2 : Testado usando untrunc no Windows, e uma webcam aleatória e barata que eu encontrei por aí

    
por 11.09.2015 / 11:03

Tags