使用 ffmpeg 录制时文件损坏

使用 ffmpeg 录制时文件损坏

我正在尝试从连接到 Windows 桌面的 USB WebCam 录制视频。有时,我会得到一个可以使用 VLC 播放的 mp4 文件。但有时,我根本无法播放 mp4 文件(文件大小看起来像是有效的视频文件,37,528KB)。

这是我使用的命令:

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

简洁版本:

  • 文件已损坏,因为您正在中断以完成mp4编码,请切换到类似的操作mkv
  • 通过将格式转移到另一个容器来“恢复原状”ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv
  • 不要使用vfwcap,因为它已经过期了

为什么我无法使用 USB 网络摄像头捕获图像ffmpeg

来自ffmpeg文档vfwcap

注意,这已经过时了,现在您可以使用 -f dshow 设备从 directshow 设备捕获。

由于已过期,请使用-f dshow。从DirectShow 文档

FFmpeg 可以从 Windows 计算机上的“directshow”设备获取输入。请参阅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

我建议使用,mkv因为mp4我猜你不是在进行固定时间编码,而是以 终止ffmpegCtrl-C这可以防止ffmpeg将某些原子写入视频容器,并且可能是文件损坏的原因1.可以mkv随意打断2 .


1:您可以通过转换损坏的 mp4 格式来测试这一点: ffmpeg -i corrupt.mp4 -c copy not_corrupt.mkv。如果这不起作用,sparrowt 在 SU 上的另一个答案推荐untrunc

2:在 Windows 上进行测试ffmpeg version N-72939-g5b0f55a,以及我碰巧身边的一个便宜的网络摄像头

相关内容