
Recherche avancée
Médias (1)
-
The pirate bay depuis la Belgique
1er avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (92)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (10858)
-
Firefox says some files converted from mkv to mp4 in ffmpeg are corrupt
14 janvier 2018, par EpicKnarvik97I have recently converted many videos for web playback, but all videos from one "series" all show up in firefox as "Video can’t be played because the file is corrupt." (They work for google chrome and VLC. Not for firefox or edge.) All files have been converted with this command :
ffmpeg -i "file.mkv" -vcodec h264 -movflags +faststart -map 0 -vf subtitles="file.mkv" "file.mp4"
ffmpeg output from one of the non-working files :
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Episode_7.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.3.100
Duration: 00:23:53.52, start: -0.001333, bitrate: 1900 kb/s
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 1920x1080 [SAR 1:1 DAR 16:9], 1763 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)
Metadata:
handler_name : SoundHandlerffmpeg output from a working file :
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Episode_7.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.3.100
Duration: 00:23:40.06, start: 0.000000, bitrate: 1848 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1710 kb/s, 23.81 fps, 23.81 tbr, 16k tbn, 47.62 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 131 kb/s (default)
Metadata:
handler_name : SoundHandlerOf a collection of over 100 files, only 12 episodes of a single series show up as corrupted in firefox. I see some differences in the information about the two files, but I don’t know why one file works and the other does not. What do I need to tell ffmpeg to make the videos playable in firefox ?
-
How to detect if video file is pure static ?
20 août 2024, par spuderI have a collection of analog video recordings. About 10% of the files are entirely static. How could I programmatically look at all files and delete the files that contain mostly static ?



The following utilities have command line options to analyze video, however none have built in functionality to detect the absence of video content.



- 

-
ffmpeg
-
ffprobe
-
HandBrake









I've tried using ffmpeg to export still images and then use image magick to compare the difference between those images. Unfortunately, the difference between an image of static, and actual video content returns nearly the same difference percentage. (9% vs 7%)



ffmpeg -ss 00:30 -i PICT0050.AVI -vframes 1 -q:v 2 output1.jpg

magick compare -metric PSNR output1.jpg output2.jpg diff.jpg
9.2191

magick compare -metric PSNR output1.jpg output3.jpg diff.jpg
7.70127




Comparing sample 1 with sample 2 results in 9% difference

Comparing sample 1 with sample 3 results in 7% difference





Sample 2


Sample 3


Sample 4


Sample 5


Sample 6


Sample 7



-
-
Skipping extractors execution since zero extractors were registered (Use `node —trace-warnings ...` to show where the warning was created)
28 septembre 2023, par Parkster00I'm following a Discord Music Bot tutorial that uses ffmpeg, here is index.js


require("dotenv").config();

const { REST } = require("@discordjs/rest");
const { Routes } = require("discord-api-types/v9");
const { Client, Collection, Intents } = require('discord.js');
const { Player } = require("discord-player");

const fs = require("node:fs");
const path = require("node:path");

const client = new Client({
 intents: ["Guilds", "GuildMessages", "GuildVoiceStates"]
});

// Set up our commands into an array
const commands = [];
client.commands = new Collection();

const commandsPath = path.join(__dirname, "commands");
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith(".js"));

for (const file of commandFiles) {
 console.log(`${file}`)
 console.log(`${commandsPath}`)
 const filePath = path.join(commandsPath, file);
 console.log(`${filePath}`)
 const command = require(filePath);

 client.commands.set(command.data.name, command);
 commands.push(command.data.toJSON());
}

// Create the player, highest quality audio
client.player = new Player(client, {
 ytdlOptions: {
 quality: "highestaudio",
 highWaterMark: 1 << 25
 }
});

// Commands are registered
client.on("ready", () => {
 const guild_ids = client.guilds.cache.map(guild => guild.id);

 const rest = new REST({ version: "9" }).setToken(process.env.TOKEN);
 for (const guildId of guild_ids) {
 rest.put(Routes.applicationGuildCommands(process.env.CLIENT_ID, guildId), {
 body: commands
 })
 .then(() => console.log(`Added commands to ${guildId}`))
 .catch(console.error);
 }

});

client.on("interactionCreate", async interaction => {
 if (!interaction.isCommand()) return;

 const command = client.commands.get(interaction.commandName);
 if (!command) return;

 try {
 await command.execute({ client, interaction });
 }
 catch (err) {
 console.error(err);
 await interaction.reply("An error occured while executing that command.");
 }
});

console.log(process.env.TOKEN);
client.login(process.env.TOKEN);



And here is play.js where I think the error originates :


const { SlashCommandBuilder } = require("@discordjs/builders");
const { EmbedBuilder } = require("discord.js");
const { QueryType } = require('discord-player');


module.exports = {
 data: new SlashCommandBuilder()
 .setName("play")
 .setDescription("Plays a song.")
 .addSubcommand(subcommand => {
 return subcommand
 .setName("search")
 .setDescription("Searches for a song.")
 .addStringOption(option => {
 return option
 .setName("searchterms")
 .setDescription("search keywords")
 .setRequired(true);
 })
 })
 .addSubcommand(subcommand => {
 return subcommand
 .setName("playlist")
 .setDescription("Plays playlist from YT")
 .addStringOption(option => {
 return option
 .setName("url")
 .setDescription("playlist url")
 .setRequired(true);

 })
 })
 .addSubcommand(subcommand => {
 return subcommand
 .setName("song")
 .setDescription("Plays song from YT")
 .addStringOption(option => {
 return option
 .setName("url")
 .setDescription("url of song")
 .setRequired(true);

 })
 }),
 execute: async ({ client, interaction }) => {

 if (!interaction.member.voice.channel) {
 await interaction.reply("You must be in a voice channel to use this command.");
 return;
 }

 const queue = await client.player.nodes.create(interaction.guild);

 if (!queue.connection) await queue.connect(interaction.member.voice.channel)

 let embed = new EmbedBuilder();
 if (interaction.options.getSubcommand() === "song") {
 let url = interaction.options.getString('url');

 const result = await client.player.search(url, {
 requestedBy: interaction.user,
 searchEngine: QueryType.YOUTUBE_VIDEO
 });

 console.log(result.tracks);

 if (result.tracks.length === 0) {
 await interaction.reply("no results found");
 return
 }

 const song = result.tracks[0];
 await queue.addTrack(song);

 embed
 .setDescription(`Added **[${song.title}](${song.url})** to the queue.`)
 .setThumbnail(song.thumbnail)
 .setFooter({ text: `Duration: ${song.duration}` });
 }

 else if (interaction.options.getSubcommand() === "playlist") {
 let url = interaction.options.getString('url');

 const result = await client.player.search(url, {
 requestedBy: interaction.SlashCommandBuilder,
 searchEngine: QueryType.YOUTUBE_PLAYLIST,
 });

 if (result.tracks.length === 0) {
 await interaction.reply("no playlist found");
 return
 }

 const playlist = result.playlist;
 await queue.addTracks(playlist);

 embed
 .setDescription(`Added **[${playlist.title}](${playlist.url})** to the queue.`)
 .setThumbnail(playlist.thumbnail)
 .setFooter({ text: `Duration: ${playlist.duration}` });
 }

 else if (interaction.options.getSubcommand() === "search") {
 let url = interaction.options.getString('searchterms');

 const result = await client.player.search(url, {
 requestedBy: interaction.SlashCommandBuilder,
 searchEngine: QueryType.AUTO,
 });

 if (result.tracks.length === 0) {
 await interaction.reply("no results found");
 return
 }

 const song = result.tracks[0]
 await queue.addTrack(song);

 embed
 .setDescription(`Added **[${song.title}](${song.url})** to the queue.`)
 .setThumbnail(song.thumbnail)
 .setFooter({ text: `Duration: ${song.duration}` });
 }

 if (!queue.playing) await queue.play();

 await interaction.reply({
 embeds: [embed]
 })
 }
}



Is ffmpeg called differently now ? Am I doing something wrong ?


I've tried different installs of Ffmpeg and none seem to work, so I'd imagine it originates somewhere in my code.