
Recherche avancée
Autres articles (60)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...)
Sur d’autres sites (12898)
-
seeking with av_seek_frame returns invalid data
27 juin 2016, par mtadmkBased on dranger tutorial I’m trying to implement seeking in video file. Problem is with seeking to beginning milliseconds - it always returns 0 when seeking backward, or some place in file (based on file format).
I.e. with this video file and seeking forward to 500 pts there is always 6163 pts returned. Seeking backward to 500 is always returning 0. I have no idea why.
Code to do this :
import java.util.Arrays;
import java.util.List;
import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.javacpp.DoublePointer;
import org.bytedeco.javacpp.PointerPointer;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacpp.avformat;
import org.bytedeco.javacpp.avutil;
import org.bytedeco.javacpp.swscale;
import static org.bytedeco.javacpp.avcodec.av_free_packet;
import static org.bytedeco.javacpp.avcodec.avcodec_close;
import static org.bytedeco.javacpp.avcodec.avcodec_decode_video2;
import static org.bytedeco.javacpp.avcodec.avcodec_find_decoder;
import static org.bytedeco.javacpp.avcodec.avcodec_flush_buffers;
import static org.bytedeco.javacpp.avcodec.avcodec_open2;
import static org.bytedeco.javacpp.avcodec.avpicture_fill;
import static org.bytedeco.javacpp.avcodec.avpicture_get_size;
import static org.bytedeco.javacpp.avformat.AVSEEK_FLAG_BACKWARD;
import static org.bytedeco.javacpp.avformat.av_dump_format;
import static org.bytedeco.javacpp.avformat.av_read_frame;
import static org.bytedeco.javacpp.avformat.av_register_all;
import static org.bytedeco.javacpp.avformat.av_seek_frame;
import static org.bytedeco.javacpp.avformat.avformat_close_input;
import static org.bytedeco.javacpp.avformat.avformat_find_stream_info;
import static org.bytedeco.javacpp.avformat.avformat_open_input;
import static org.bytedeco.javacpp.avutil.AVMEDIA_TYPE_VIDEO;
import static org.bytedeco.javacpp.avutil.AV_PIX_FMT_RGB24;
import static org.bytedeco.javacpp.avutil.AV_TIME_BASE;
import static org.bytedeco.javacpp.avutil.av_frame_alloc;
import static org.bytedeco.javacpp.avutil.av_frame_get_best_effort_timestamp;
import static org.bytedeco.javacpp.avutil.av_free;
import static org.bytedeco.javacpp.avutil.av_make_q;
import static org.bytedeco.javacpp.avutil.av_malloc;
import static org.bytedeco.javacpp.avutil.av_q2d;
import static org.bytedeco.javacpp.avutil.av_rescale_q;
import static org.bytedeco.javacpp.swscale.SWS_BILINEAR;
import static org.bytedeco.javacpp.swscale.sws_getContext;
import static org.bytedeco.javacpp.swscale.sws_scale;
public class SeekTest1 {
private avformat.AVFormatContext videoFile;
private final avcodec.AVPacket framePacket = new avcodec.AVPacket();
private avcodec.AVCodecContext videoCodec;
private avutil.AVFrame yuvFrame;
private swscale.SwsContext scalingContext;
private avutil.AVFrame rgbFrame;
private int streamId;
private long lastTime;
public static void main(String[] args) {
if (args.length > 0) {
new SeekTest1().start(args[0]);
} else {
new SeekTest1().start("/path/to/file");
}
}
private void start(String path) {
init(path);
//test for forward
// List<integer> seekPos = Arrays.asList(0, 100, 0, 200, 0, 300, 0, 400, 0, 500, 0, 600, 0, 700);
//test for backward
List<integer> seekPos = Arrays.asList(10000, 8000, 10000, 7000, 10000, 6000, 10000, 4000, 10000, 2000, 10000, 1000, 10000, 200);
seekPos.forEach(seekPosition -> {
readFrame();
seek(seekPosition);
});
readFrame();
cleanUp();
}
long seek(long seekPosition) {
final avutil.AVRational timeBase = fetchTimeBase();
long timeInBaseUnit = fetchTimeInBaseUnit(seekPosition, timeBase);
//changing flag to AVSEEK_FLAG_ANY does not change behavior
int flag = 0;
if (timeInBaseUnit < lastTime) {
flag = AVSEEK_FLAG_BACKWARD;
System.out.println("seeking backward to " + timeInBaseUnit);
} else {
System.out.println("seeking forward to " + timeInBaseUnit);
}
avcodec_flush_buffers(videoCodec);
av_seek_frame(videoFile, streamId, timeInBaseUnit, flag);
return timeInBaseUnit;
}
private long fetchTimeInBaseUnit(long seekPositionMillis, avutil.AVRational timeBase) {
return av_rescale_q((long) (seekPositionMillis / 1000.0 * AV_TIME_BASE), av_make_q(1, AV_TIME_BASE), timeBase);
}
private void readFrame() {
while (av_read_frame(videoFile, framePacket) >= 0) {
if (framePacket.stream_index() == streamId) {
// Decode video frame
final int[] frameFinished = new int[1];
avcodec_decode_video2(this.videoCodec, yuvFrame, frameFinished, framePacket);
if (frameFinished[0] != 0) {
av_free_packet(framePacket);
long millis = produceFinishedFrame();
System.out.println("produced time " + millis);
break;
}
}
av_free_packet(framePacket);
}
}
private long produceFinishedFrame() {
sws_scale(scalingContext, yuvFrame.data(), yuvFrame.linesize(), 0,
videoCodec.height(), rgbFrame.data(), rgbFrame.linesize());
final long pts = av_frame_get_best_effort_timestamp(yuvFrame);
final double timeBase = av_q2d(fetchTimeBase());
final long foundMillis = (long) (pts * 1000 * timeBase);
lastTime = foundMillis;
return foundMillis;
}
private avutil.AVRational fetchTimeBase() {
return videoFile.streams(streamId).time_base();
}
private void init(String videoPath) {
final avformat.AVFormatContext videoFile = new avformat.AVFormatContext(null);
av_register_all();
if (avformat_open_input(videoFile, videoPath, null, null) != 0) throw new RuntimeException("unable to open");
if (avformat_find_stream_info(videoFile, (PointerPointer) null) < 0) throw new RuntimeException("Couldn't find stream information");
av_dump_format(videoFile, 0, videoPath, 0);
final int streamId = findFirstVideoStream(videoFile);
final avcodec.AVCodecContext codec = videoFile.streams(streamId).codec();
final avcodec.AVCodec pCodec = avcodec_find_decoder(codec.codec_id());
if (pCodec == null) throw new RuntimeException("Unsupported codec");
if (avcodec_open2(codec, pCodec, (avutil.AVDictionary) null) < 0) throw new RuntimeException("Could not open codec");
final avutil.AVFrame yuvFrame = av_frame_alloc();
final avutil.AVFrame rgbFrame = av_frame_alloc();
if (rgbFrame == null) throw new RuntimeException("Can't allocate avframe");
final int numBytes = avpicture_get_size(AV_PIX_FMT_RGB24, codec.width(), codec.height());
final BytePointer frameBuffer = new BytePointer(av_malloc(numBytes));
final swscale.SwsContext swsContext = sws_getContext(codec.width(), codec.height(), codec.pix_fmt(), codec.width(), codec.height(),
AV_PIX_FMT_RGB24, SWS_BILINEAR, null, null, (DoublePointer) null);
avpicture_fill(new avcodec.AVPicture(rgbFrame), frameBuffer, AV_PIX_FMT_RGB24, codec.width(), codec.height());
this.videoFile = videoFile;
this.videoCodec = codec;
this.yuvFrame = yuvFrame;
this.scalingContext = swsContext;
this.rgbFrame = rgbFrame;
this.streamId = streamId;
}
private static int findFirstVideoStream(avformat.AVFormatContext videoFile) {
int videoStream = -1;
for (int i = 0; i < videoFile.nb_streams(); i++) {
if (videoFile.streams(i).codec().codec_type() == AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break;
}
}
if (videoStream == -1) throw new RuntimeException("Didn't find video stream");
return videoStream;
}
private void cleanUp() {
av_free(this.rgbFrame);
av_free(yuvFrame);
avcodec_close(videoCodec);
avformat_close_input(videoFile);
}
}
</integer></integer>As input arg should be provided file from above.
-
how to use a video stream as input in python/opencv programme
11 juillet 2016, par vasu guptaI am able to stream and receive webcam feed in two terminal via udp
command for streaming :
ffmpeg -i /dev/video0 -b 50k -r 20 -s 858x500 -f mpegts udp://127.0.0.1:2000
command for recieving :
ffplay udp://127.0.0.1:2000
Now i have to use this received video stream as input in python/opencv how can i do that.
I will be doing this using rtp and rstp as well.
But in case of rtsp it is essential to initiate the receiving terminal, but if I do that then port will become busy and my program will not be able to take the feed.How could it be resolved.
I am currently using opencv 2.4.13, python 2.7 in ubuntu 14.04 -
FFMPEG : custom sequence input images
14 juillet 2016, par gabberI created a video from a set of images.
The command look like :
ffmpeg -i bg.jpeg -i img_%d.png -filter_complex overlay=5:H-h-5[b]-shortest testvid.mp4
Problem :
The input
-i img_%d.png
meansimg_0.png
,img_1.png
,img_2.png
, ...But I have custom sequence like this :
{img_0.png, img_1.png, img_1.png, img_2.png, img_1.png, img5.png, img_4.png}
Question :
Can I put my image sequence into input of ffmpeg ?
Updated
cmd :
ffmpeg -i bg.jpeg -f concat -fflags +genpts -i test.txt -filter_complex overlay=5:H-h-5 -shortest testvid.mp4
output :
ffmpeg version 3.1.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configuration: --enable-gpl --enable-libx264 --enable-libfreetype
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, image2, from 'bg.jpeg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 47329 kb/s
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 600x800 [SAR 1:1 DAR 3:4], 25 tbr, 25 tbn, 25 tbc
Input #1, concat, from 'test.txt':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #1:0: Video: png, pal8(pc), 200x200, 25 tbr, 25 tbn, 25 tbc
File 'testvid.mp4' already exists. Overwrite ? [y/N] y
[swscaler @ 0x2a18360] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x2a05d80] using SAR=1/1
[libx264 @ 0x2a05d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x2a05d80] profile High, level 3.1
[libx264 @ 0x2a05d80] 264 - core 148 r2705 3f5ed56 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mp4 @ 0x2a04b20] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Output #0, mp4, to 'testvid.mp4':
Metadata:
encoder : Lavf57.41.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 600x800 [SAR 1:1 DAR 3:4], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
encoder : Lavc57.48.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream mapping:
Stream #0:0 (mjpeg) -> overlay:main
Stream #1:0 (png) -> overlay:overlay
overlay -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[concat @ 0x29e2400] DTS -230575710986777 < 0 out of order
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
DTS -230575710986777, next:40000 st:0 invalid dropping
PTS -230575710986777, next:40000 invalid dropping st:0
frame= 4 fps=0.0 q=-1.0 Lsize= 39kB time=00:00:00.04 bitrate=8050.9kbits/s dup=0 drop=65 speed=0.516x
video:39kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.222729%
[libx264 @ 0x2a05d80] frame I:1 Avg QP:24.64 size: 37536
[libx264 @ 0x2a05d80] frame P:1 Avg QP:27.18 size: 1085
[libx264 @ 0x2a05d80] frame B:2 Avg QP:29.93 size: 73
[libx264 @ 0x2a05d80] consecutive B-frames: 25.0% 0.0% 75.0% 0.0%
[libx264 @ 0x2a05d80] mb I I16..4: 1.7% 86.1% 12.2%
[libx264 @ 0x2a05d80] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 1.7% 1.3% 1.5% 0.0% 0.0% skip:95.5%
[libx264 @ 0x2a05d80] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 2.4% 0.0% 0.0% direct: 0.0% skip:97.6% L0:62.6% L1:37.4% BI: 0.0%
[libx264 @ 0x2a05d80] 8x8 transform intra:86.1% inter:33.9%
[libx264 @ 0x2a05d80] coded y,uvDC,uvAC intra: 91.5% 84.4% 38.5% inter: 0.6% 0.4% 0.1%
[libx264 @ 0x2a05d80] i16 v,h,dc,p: 9% 12% 3% 76%
[libx264 @ 0x2a05d80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 19% 17% 8% 4% 5% 5% 7% 10%
[libx264 @ 0x2a05d80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 18% 10% 10% 9% 7% 10% 8% 7%
[libx264 @ 0x2a05d80] i8c dc,h,v,p: 45% 21% 26% 8%
[libx264 @ 0x2a05d80] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x2a05d80] ref B L0: 84.2% 15.8%
[libx264 @ 0x2a05d80] kb/s:1938.35