2

Я пытаюсь записать видео с USB-камеры, подключенной к моему рабочему столу Windows. Иногда я получаю файл mp4, который могу воспроизвести с помощью VLC. Но иногда я не могу воспроизвести файл mp4 вообще (размер файла кажется действительным видеофайлом, 37 528 КБ).

Вот команда, которую я использовал:

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

Я бы хотел знать:

  • почему я иногда получаю поврежденный файл с помощью приведенной выше команды
  • как я могу исправить "поврежденный" файл mp4?

Я попробовал предложение от bertieb. Я получаю сообщение " moov atom not found .\corrupt.mp4: Invalid data found when processing input "

Когда я открываю файл mp4, это то, что я вижу. Я не вижу 'Moov в шапке. , Есть ли другой способ восстановить видео файлы? И должен ли я все еще переключать формат с mp4 на mkv для будущего захвата (поскольку предполагалось, что запись была убита до того, как она будет правильно закодирована.

1 ответ1

2

Укороченная версия:

  • файлы повреждены, потому что вы прерываете, чтобы завершить кодирование mp4 , вместо этого переключитесь на что-то вроде mkv .
  • 'не поврежден' путем смещения формата в другой контейнер ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv
  • не используйте vfwcap как он устарел

Почему у меня возникают проблемы с записью с моей веб-камеры USB с помощью ffmpeg?

Из документации ffmpeg на vfwcap:

Примечание. Это устарело, в наши дни вы можете использовать устройство -f dshow для записи с устройства DirectShow.

Поскольку он устарел, используйте вместо него -f dshow . Из документации DirectShow:

FFmpeg может принимать данные от устройств "directshow" на вашем компьютере с Windows. См в FFmpeg DShow документации устройства ввода для официальной документации. Он может принимать входные данные от аудио, видеоустройств, устройств захвата видео, аналоговых устройств ТВ-тюнера.

Из связанной документации по dshow вы должны сначала узнать, что устройство находится под dshow:

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

Пример вывода:

[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"

используя "PC Camera" найденную предыдущей командой:

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

(Я бы отступить на использование -rtbufsize изначально, так как есть некоторые оговорки , отмеченные для использования его с dshow devices`)

Я бы предложил использовать mkv вместо mp4 как я предполагаю, что вы не выполняете кодирование с фиксированным временем, а вместо этого завершаете ffmpeg с помощью Ctrl-C ; это препятствует тому, чтобы ffmpeg определенные атомы в контейнер видео и вероятно, почему файл поврежден 1. mkv может быть прерван по желанию 2.


1: Вы можете проверить это путем сдвига формата поврежденных файлов mp4s: ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv . Если это не сработает, другой ответ на SU от sparrowt рекомендует untrunc

2. Протестировано с использованием ffmpeg version N-72939-g5b0f55a для Windows и случайной дешевой веб-камеры, которую я случайно обнаружил

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .