
Recherche avancée
Médias (2)
-
Valkaama DVD Label
4 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Image
-
Podcasting Legal guide
16 mai 2011, par
Mis à jour : Mai 2011
Langue : English
Type : Texte
Autres articles (96)
-
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
Use, discuss, criticize
13 avril 2011, parTalk to people directly involved in MediaSPIP’s development, or to people around you who could use MediaSPIP to share, enhance or develop their creative projects.
The bigger the community, the more MediaSPIP’s potential will be explored and the faster the software will evolve.
A discussion list is available for all exchanges between users.
Sur d’autres sites (11525)
-
How do you run a ffmpeg command in Java, in MacOS, using a ProcessBuilder
5 août 2020, par nottAbottI am writing a program in Java that uses ffmpeg to "snip" a video into several pieces and the stitch them back together again. I have everything working relatively smoothly in Windows, but I cannot get ffmpeg to work in Mac, or in Linux for that matter. I'm focusing on mac right now though. I thought that it might be a permissions problem, but when I run it with sudo I get an error that says (after typing in the password :


sudo: ffmpeg: command not found



when I run it without sudo I get :


java.io.IOException: Cannot run program "ffmpeg": error=2, No such file or directory



I think that it might be because the ffmpeg package, on the Mac machine, was downloaded with homebrew, and ffmpeg is stored in /usr/local/Cellar/ffmpeg instead of the default folder, wherever it may be. That may not be the problem though, because I deleted ffmpeg and re-downloaded it with homebrew. It may have been in its defaulter folder in my first tests as well. It would be great to figure this out. Most of my family uses Mac (not me) and I really want to share my work with them. That is why I chose to code this in Java. Oh, and I did try using the directory to the binary in the command. Here's the code :


//snips out all the clips from the main video
 public void snip() throws IOException, InterruptedException {
 
 for(int i = 0; i < snippets.size(); i++) {
 //ffmpeg -i 20sec.mp4 -ss 0:0:1 -to 0:0:5 -c copy foobar.mp4
 String newFile = "foobar" + String.valueOf(i) + ".mp4";
 
 //THIS WORKS
 if(OS.isWindows()) {
 ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg", "-i", videoName, "-ss",
 snippets.get(i).getStartTime(), "-to", snippets.get(i).getEndTime(), newFile);
 
 Process process = processBuilder.inheritIO().start();
 process.waitFor();
 System.out.println("Win Snip " + i + "\n");
 }
 
 else if (OS.isMac()) {
 //FFMPEG LOCATION: /usr/local/Cellar/ffmpeg
 //THE ERROR: sudo: ffmpeg: command not found
 //ERROR W/OUT SUDO: java.io.IOException: Cannot run program "ffmpeg": error=2, No such file or directory
 ProcessBuilder processBuilder = new ProcessBuilder("sudo", "-S", "ffmpeg", "-f", videoName, "-ss",
 snippets.get(i).getStartTime(), "-to", snippets.get(i).getEndTime(), newFile);
 
 Process process = processBuilder.inheritIO().start();
 process.waitFor();
 System.out.println("Mac Snip " + i + "\n");
 }
 
 else if (OS.isUnix()) {
 System.out.println("Your operating system is not supported");
 //TODO
 //need to figure out if deb/red hat/whatever are different
 }
 
 else if (OS.isSolaris()) {
 System.out.println("Your operating system is not supported yet");
 //TODO probably won't do
 }
 
 else {
 System.out.println("Your operating system is not supported");
 }
 //add to the list of files to be concat later
 filesToStitch.add(newFile);
 filesToDelete.add(newFile);
 
 }
 //System.out.println(stitchFiles);
 }



-
Seeking to every 30th frame in .mp4 file with ffmpeg
6 mars 2020, par MTRNSI’m trying to seek to every 30th frame and read motion vectors from packets.
// Move the video 1 frame
av_read_frame(fmt_ctx, &pkt);
if (pkt.stream_index == video_stream_idx)
ret = decode_packet(&pkt);
av_packet_unref(&pkt);
// Read motion vectors until end of video
while (av_read_frame(fmt_ctx, &pkt) >= 0) {
if (pkt.stream_index == video_stream_idx)
ret = decode_packet(&pkt);
// Find packet frame
int pcktPts = av_rescale_q(pkt.pts,
fmt_ctx->streams[video_stream_idx]->time_base,
fmt_ctx->streams[video_stream_idx]->codec->time_base);
pcktPts = (pcktPts/video_dec_ctx->ticks_per_frame);
// Find target position from packet (30 frames ahead)
int target = (pcktPts+30) *
(fmt_ctx->streams[video_stream_idx]->time_base.den /
fmt_ctx->streams[video_stream_idx]->time_base.num) /
(fmt_ctx->streams[video_stream_idx]->codec->time_base.den /
fmt_ctx->streams[video_stream_idx]->codec->time_base.num )*
video_dec_ctx->ticks_per_frame;
// Seek to 30 frames ahead
avformat_seek_file(fmt_ctx, video_stream_idx, 0, target, target, AVSEEK_FLAG_ANY);
av_packet_unref(&pkt);
if (ret < 0)
break;
}Running through this, it runs well at first, but starts to hang at around the 6th or 7th frame analyzed. Here’s my output of what frame I’m decoding :
1
31
61
92
123
155
187
220
237
237
237
...where it just stalls on frame 237. So a few things are wrong : the program is hanging, and I’m not increasing by 30 frames every time, but by 30 + some random number. I must be using some function wrong. This is specifically for .mp4 files.
Essentially, I want to read motion vectors from every frame following an I-frame. My entire program is here :
#include <libavutil></libavutil>motion_vector.h>
#include <libavformat></libavformat>avformat.h>
static AVFormatContext *fmt_ctx = NULL;
static AVCodecContext *video_dec_ctx = NULL;
static AVStream *video_stream = NULL;
static const char *src_filename = NULL;
static int video_stream_idx = -1;
static AVFrame *frame = NULL;
static int video_frame_count = 0;
static int decode_packet(const AVPacket *pkt)
{
char szFileName[255] = {0};
FILE *file = NULL;
int ret = avcodec_send_packet(video_dec_ctx, pkt);
if (ret < 0) {
fprintf(stderr, "Error while sending a packet to the decoder: %s\n", av_err2str(ret));
return ret;
}
while (ret >= 0) {
ret = avcodec_receive_frame(video_dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
fprintf(stderr, "Error while receiving a frame from the decoder: %s\n", av_err2str(ret));
return ret;
}
if (ret >= 0) {
int i;
AVFrameSideData *sd;
video_frame_count++;
sprintf(szFileName, "./mv/frame%d.txt", video_frame_count);
file = fopen(szFileName, "w");
sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS);
if (sd) {
const AVMotionVector *mvs = (const AVMotionVector *)sd->data;
for (i = 0; i < sd->size / sizeof(*mvs); i++) {
const AVMotionVector *mv = &mvs[i];
fprintf(file, "%4d %4d %4d %4d\n",
abs(mv->motion_x),
abs(mv->motion_y),
abs(mv->src_x - mv->dst_x),
abs(mv->src_y - mv->dst_y));
}
}
fclose(file);
av_frame_unref(frame);
}
}
return 0;
}
static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type)
{
int ret;
AVStream *st;
AVCodecContext *dec_ctx = NULL;
AVCodec *dec = NULL;
AVDictionary *opts = NULL;
ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0);
if (ret < 0) {
fprintf(stderr, "Could not find %s stream in input file '%s'\n",
av_get_media_type_string(type), src_filename);
return ret;
} else {
int stream_idx = ret;
st = fmt_ctx->streams[stream_idx];
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx) {
fprintf(stderr, "Failed to allocate codec\n");
return AVERROR(EINVAL);
}
ret = avcodec_parameters_to_context(dec_ctx, st->codecpar);
if (ret < 0) {
fprintf(stderr, "Failed to copy codec parameters to codec context\n");
return ret;
}
// Initialize video decoder
av_dict_set(&opts, "flags2", "+export_mvs", 0);
if ((ret = avcodec_open2(dec_ctx, dec, &opts)) < 0) {
fprintf(stderr, "Failed to open %s codec\n",
av_get_media_type_string(type));
return ret;
}
video_stream_idx = stream_idx;
video_stream = fmt_ctx->streams[video_stream_idx];
video_dec_ctx = dec_ctx;
}
return 0;
}
int main(int argc, char **argv)
{
int ret = 0;
AVPacket pkt = { 0 };
if (argc != 2) {
fprintf(stderr, "Usage: %s <video>\n", argv[0]);
exit(1);
}
src_filename = argv[1];
if (avformat_open_input(&fmt_ctx, src_filename, NULL, NULL) < 0) {
fprintf(stderr, "Could not open source file %s\n", src_filename);
exit(1);
}
if (avformat_find_stream_info(fmt_ctx, NULL) < 0) {
fprintf(stderr, "Could not find stream information\n");
exit(1);
}
open_codec_context(fmt_ctx, AVMEDIA_TYPE_VIDEO);
av_dump_format(fmt_ctx, 0, src_filename, 0);
if (!video_stream) {
fprintf(stderr, "Could not find video stream in the input, aborting\n");
ret = 1;
goto end;
}
frame = av_frame_alloc();
if (!frame) {
fprintf(stderr, "Could not allocate frame\n");
ret = AVERROR(ENOMEM);
goto end;
}
// Move the video 1 frame
av_read_frame(fmt_ctx, &pkt);
if (pkt.stream_index == video_stream_idx)
ret = decode_packet(&pkt);
av_packet_unref(&pkt);
// Read motion vectors until end of video
while (av_read_frame(fmt_ctx, &pkt) >= 0) {
if (pkt.stream_index == video_stream_idx)
ret = decode_packet(&pkt);
int pcktPts = av_rescale_q(pkt.pts,
fmt_ctx->streams[video_stream_idx]->time_base,
fmt_ctx->streams[video_stream_idx]->codec->time_base);
pcktPts = (pcktPts/video_dec_ctx->ticks_per_frame);
int target = (pcktPts+30) *
(fmt_ctx->streams[video_stream_idx]->time_base.den /
fmt_ctx->streams[video_stream_idx]->time_base.num) /
(fmt_ctx->streams[video_stream_idx]->codec->time_base.den /
fmt_ctx->streams[video_stream_idx]->codec->time_base.num )*
video_dec_ctx->ticks_per_frame;
avformat_seek_file(fmt_ctx, video_stream_idx, 0, target, target, AVSEEK_FLAG_ANY);
av_packet_unref(&pkt);
if (ret < 0)
break;
}
// Flush cached frames
decode_packet(NULL);
fprintf(stderr, "Finished decoding.\n\n");
end:
avcodec_free_context(&video_dec_ctx);
avformat_close_input(&fmt_ctx);
av_frame_free(&frame);
return ret < 0;
}
</video> -
Record sound with ffmpeg on ubuntu 12.04 [closed]
27 juin 2012, par vzybillyI have been working for a few days on trying to get ffmpeg to record sound, a short list of what I've tried :
#Crappy screen grab
#ffmpeg -f x11grab -s "1366x768" -r "24" -i :0.0 -f mp4 ./out
#awesome screen grab, grabbing sound but non out.
#ffmpeg -f x11grab -s "1366x768" -r "24" -i :0.0 -f alsa -ac 2 -i pulse -vcodec libx264 -s "1366x768" -acodec libmp3lame -ab 128k -threads 0 -f mp4 ~/Desktop/vid
#audio test, no audio in file.
#ffmpeg -f alsa -ac 2 -i pulse -acodec libmp3lame -ab 128k -threads 0 -f mp3 ./test.mp3
#awesome screen grab.
#ffmpeg -f x11grab -s "1366x768" -r "24" -i :0.0 -threads 0 -sameq -an -f mp4 ~/Desktop/vid[/CODE]I'm running ubuntu 12.04 from beta(ish)it would be awesome if someone could help me get this to work all in one line or (the way i'm going) multiple instances of ffmpeg (screen grab, microphone, program)
I have also tried the pavucontrol with doing the monitoring of when recording audio, but that does not help either.
Thanks for all of your help, vzybilly
EDIT :
This one crashed.$ ffmpeg -f alsa -ac 2 -i plughw:0,0 -f x11grab -r 100 -s 1366x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -threads 3 testVid.mkv
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:37:58 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[alsa @ 0x8fce240] capture with some ALSA plugins, especially dsnoop, may hang.
[alsa @ 0x8fce240] Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'plughw:0,0':
Duration: N/A, start: 433.999945, bitrate: N/A
Stream #0.0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
[x11grab @ 0x8fde820] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 1366 height: 768
[x11grab @ 0x8fde820] shared memory extension found
[x11grab @ 0x8fde820] Estimating duration from bitrate, this may be inaccurate
Input #1, x11grab, from ':0.0':
Duration: N/A, start: 1340805516.368518, bitrate: N/A
Stream #1.0: Video: rawvideo, bgra, 1366x768, -2147483 kb/s, 100 tbr, 1000k tbn, 100 tbc
File 'testVid.mkv' already exists. Overwrite ? [y/N] y
Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'
[buffer @ 0x8fde700] w:1366 h:768 pixfmt:bgra
[avsink @ 0x8fcdf20] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x8ff3ce0] w:1366 h:768 fmt:bgra -> w:1366 h:768 fmt:yuv420p flags:0x4
[libx264 @ 0x8fdd920] lookaheadless mb-tree requires intra refresh or infinite keyint
[libx264 @ 0x8fdd920] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0x8fdd920] profile Constrained Baseline, level 4.2
[libx264 @ 0x8fdd920] 264 - core 120 r2151 a3f4407 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.25 aq=0
Output #0, matroska, to 'archinstall4.mkv':
Metadata:
encoder : Lavf53.21.0
Stream #0.0: Video: libx264, yuv420p, 1366x768, q=-1--1, 1k tbn, 100 tbc
Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Stream mapping:
Stream #1.0 -> #0.0
Stream #0.0 -> #0.1
Press ctrl-c to stop encoding
[alsa @ 0x8fce240] ALSA buffer xrun.
[matroska @ 0x8fcd980] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 213 >= 213
av_interleaved_write_frame(): Invalid argumentAny thoughts ?
EDIT & ANSWER :
Got it all working with a script :#!/bin/bash
#vzybilly
#these are temp files
aud="aud.mp3"
vid="vid.mp4"
#grab audio & pid
ffmpeg -f alsa -ac 2 -i plughw:0,0 $aud &
audPID=$!
#grab screen & pid
ffmpeg -f x11grab -s "1366x768" -r "24" -i :0.0 -threads 0 -sameq -an -f mp4 $vid &
vidPID=$!
#wait, till name given (that means stop)
read -p "Stop by giving an Output video name?" out
#stop audio and video with pids
kill -n 2 $audPID
kill -n 2 $vidPID
echo "$out"
#combine to the target output file
ffmpeg -i $aud -i $vid -acodec copy -vcodec copy "$out"
#purge the temp files
rm $aud
rm $vid