我正在尝试从连接到 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
?
注意,这已经过时了,现在您可以使用 -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
我猜你不是在进行固定时间编码,而是以 终止ffmpeg
;Ctrl-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
,以及我碰巧身边的一个便宜的网络摄像头