小编yoo*_*sha的帖子

ffmpeg在后台运行时挂起

如果我按如下方式运行ffmpeg:

ffmpeg -i H264-media-4.264 4.avi
Run Code Online (Sandbox Code Playgroud)

它工作正常(即4.avi创建好).但是,如果我尝试在后台运行它:

ffmpeg -i H264-media-4.264 4.avi &
Run Code Online (Sandbox Code Playgroud)

它挂了!(和4.avi从未创造过)任何想法?


注意:问题是在尝试将其作为子进程运行时在python中隔离类似的问题,并且它也被挂起:ff.py包括

ps = subprocess.Popen(ffmpeg_list, stderr=subprocess.STDOUT,stdout = subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

并且运行./ff.py运行正常,也./ff.py &挂起.

  • 系统:CentOS 6.6
  • ffmpeg:0.10.2

成功运行的结果:

 ffmpeg version 0.10.2 Copyright (c) 2000-2012 the FFmpeg developers
 built on Mar 20 2012 04:34:50 with gcc 4.4.6 20110731 (Red Hat 4.4.6-3)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --enable-runtime-cpudetect --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-frei0r --enable-libopencv --enable-libdc1394 --enable-libdirac --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora …
Run Code Online (Sandbox Code Playgroud)

python ffmpeg centos

18
推荐指数
3
解决办法
1万
查看次数

如何将H264 RTP流从PCAP转换为可播放的视频文件

我在PCAP文件中捕获了H264流,并尝试从数据创建媒体文件.容器并不重要(avi,mp4,mkv,...).
当我使用videosnarf或rtpbreak(结合在每个数据包之前添加00 00 00 01的python代码)然后ffmpeg时,仅当输入帧速率恒定(或接近常量)时结果才可以.但是,当输入为vfr时,结果播放得太快(并且在相同的罕见情况下太慢).
例如:

videosnarf -i captured.pcap -c
ffmpeg -i H264-media-1.264 output.avi

在对该问题进行一些调查后,我现在相信,由于videosnarf(和rtpbreak)正在从数据包中删除RTP标头,因此时间戳丢失,ffmpeg将输入数据称为cbr.

  1. 我想知道是否有传递的方式(在一个单独的文件?)时间戳载体或任何其他信息的ffmpeg所以结果会正确创建?
  2. 有没有其他方法可以将数据从PCAP文件中取出并播放或转换然后播放?
  3. 由于所有工作都是用Python完成的,因此欢迎任何有助于工作的库/模块建议(即使需要一些编码).

注意:所有工作都是离线完成的,输出没有限制.它可以是cbr/vbr,任何可播放的容器和转码.我唯一的"限制":它应该全部运行在Linux上...

谢谢你

一些额外的信息:
由于没有为FFMPEG提供时间戳数据,我决定尝试不同的方法:跳过videosnarf并使用Python代码将数据包直接传送到ffmpeg(使用"-f -i - "选项)但是然后它拒绝接受它,除非我提供SDP文件...
我如何提供SDP文件?它是一个额外的输入文件?("-i config.sdp")

以下代码尝试执行上述操作是不成功的:

import time  
import sys  
import shutil  
import subprocess  
import os  
import dpkt  

if len(sys.argv) < 2:  
    print "argument required!"  
    print "txpcap <pcap file>"  
    sys.exit(2)  
pcap_full_path = sys.argv[1]  

ffmp_cmd = ['ffmpeg','-loglevel','debug','-y','-i','109c.sdp','-f','rtp','-i','-','-na','-vcodec','copy','p.mp4']  

ffmpeg_proc = subprocess.Popen(ffmp_cmd,stdout = subprocess.PIPE,stdin = subprocess.PIPE)  

with open(pcap_full_path, "rb") as pcap_file:  
    pcapReader = dpkt.pcap.Reader(pcap_file)  
    for ts, data in pcapReader: …
Run Code Online (Sandbox Code Playgroud)

python ffmpeg pcap h.264

13
推荐指数
1
解决办法
7615
查看次数

标签 统计

ffmpeg ×2

python ×2

centos ×1

h.264 ×1

pcap ×1