用python调用ffmpeg获取摄像头生成的avi文件不能直接播放

李察德-泰森 2016-02-22 04:48:55
python版本2.7

用多线程,线程中用subprocess调用ffmpeg,抓取摄像头和麦克风生成avi文件,生成的avi文件不能用比如Windows Media Play这样的直接播放,需要再次调用一次ffmpeg,生成的avi文件就可以用Windows Media Play播放了。

第一次执行的代码如下格式:
subprocess.call('ffmpeg.exe -y -f dshow -i video="Camera":audio="麦克风 (Audio)" -target film-dvd -pix_fmt yuv420p -aspect 16:9 a_origin_0.avi', shell=True)

这样生成出来的a_origin_0.avi直接用Windows Media Play播放提示错误。

然后再调用一次ffmpeg,如下:
subprocess.call('ffmpeg.exe -i a_origin_0.avi a_origin_1.avi'),这样生成出来的文件就可以直接用Windows Media Play播放。

两个问题:
1、不知道为啥第一次产生的文件不能直接播放?
2、录制出来的avi文件有时候会突然中间一段没有声音,过会又好了?
...全文
403 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
李察德-泰森 2016-02-23
  • 打赏
  • 举报
回复
引用 5 楼 panghuhu250 的回复:
python中调用第一个命令录制的文件和cmd中运行同样命令产生的文件格式有什么不同吗? ffprobe可以查看文件信息
ffprobe output.avi
media player报的什么错误? 编码不支持? python中运行和cmd中运行的唯一区别在于命令中的几个汉字, 1. 试试python中命令字符串前加u, u"ffmpeg..." 2. 试试把-audio选项去掉. 这个问题太奇怪了, 找到原因后, 请一定分享一下. 另: ffmpeg有python binding: pip install av http://mikeboers.github.io/PyAV/#
汉字不是问题,其实我把汉字去掉后,还是一样的。 现在我估计的原因是,在cmd下执行,结束时按Ctrl-C,在代码中是直接杀进程,有可能是杀进程后ffmpeg还没有标记完文件头和文件尾。
panghuhu250 2016-02-23
  • 打赏
  • 举报
回复
退出的问题可以这样解决:
import subprocess
import time

#p = subprocess.call('ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 /tmp/output.mp4', stdin = subprocess.PIPE)
p = subprocess.Popen('/usr/bin/ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 /tmp/output.avi'.split(), stdin = subprocess.PIPE)
time.sleep(30)
p.communicate("q\n")
但是, 上面的代码不论是ctrl-c杀掉还是等p.communicate()退出, 生成的文件都可以用mplayer播放. 不知道media player会怎样.
panghuhu250 2016-02-23
  • 打赏
  • 举报
回复
python中调用第一个命令录制的文件和cmd中运行同样命令产生的文件格式有什么不同吗? ffprobe可以查看文件信息
ffprobe output.avi
media player报的什么错误? 编码不支持? python中运行和cmd中运行的唯一区别在于命令中的几个汉字, 1. 试试python中命令字符串前加u, u"ffmpeg..." 2. 试试把-audio选项去掉. 这个问题太奇怪了, 找到原因后, 请一定分享一下. 另: ffmpeg有python binding: pip install av http://mikeboers.github.io/PyAV/#
李察德-泰森 2016-02-23
  • 打赏
  • 举报
回复
引用 2 楼 nice_fish 的回复:
有用C写的录制视频的,你可以尝试call c的代码
调用c代码太麻烦了,直接用这个官方编译好的ffmpeg.exe文件方便啊
李察德-泰森 2016-02-23
  • 打赏
  • 举报
回复
引用 1 楼 panghuhu250 的回复:
试过直接在cmd下运行第一个ffmpeg命令吗, 结果怎么样?
第一个ffmpeg命令直接在cmd下运行后,可以用Windows Media Play直接播放
  • 打赏
  • 举报
回复
有用C写的录制视频的,你可以尝试call c的代码
panghuhu250 2016-02-22
  • 打赏
  • 举报
回复
试过直接在cmd下运行第一个ffmpeg命令吗, 结果怎么样?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧