[.NET] Bestandstype omzetten naar .MP4 (FFMPEG / JWPlayer)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dennis_86
  • Registratie: November 2009
  • Laatst online: 11-06 19:23
Ik zou graag met behulp van FFMPEG een .MPG-/.AVI-/.MOV- (en de rest van de populaire bestandstypes) filmpje om willen zetten naar een .MP4 zodat JWPlayer deze netjes af kan spelen.

Had een code (bij "ffmpeg.StartInfo.Arguments" - bestand: Default.aspx.cs) waarmee ik wel geluid kreeg maar geen beeld. Ben deze helaas kwijt, maar het probleem heeft te maken met de H.264 codec die nodig is om .MP4 af te spelen met Flash (vanaf versie 9.0.115.0), maar kan helaas geen antwoord vinden waar ik iets aan heb. Hier ligt dan ook meten het probleem van het omzetten.

Wat ik geprobeerd heb
Eerst heb ik heb FFMPEG en JWPlayer gedownload.
Daarna heb ik een video met bestandstype .MPG in het mapje geplaatst en ben ik in Visual Web Developer een nieuw project gestart met de volgende bestanden:

Default.aspx
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button OnClick = "convert_Click" Text = "Klik me" runat = "server" />
        <asp:Label ID = "videoLink" runat = "server"></asp:Label>
    </div>
    </form>
</body>
</html>


Default.aspx.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Diagnostics;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void convert_Click(object sender, EventArgs e)
    {
        Process ffmpeg; // creating process
        string video;
        string mpg;
        video = Page.MapPath("video.mpg");
        mpg = Page.MapPath("") + "\\video.mp4";
        ffmpeg = new Process();

        ffmpeg.StartInfo.Arguments = "-i " + video + " " + mpg;
        ffmpeg.StartInfo.FileName = Page.MapPath("ffmpeg.exe");

        ffmpeg.Start(); // start !

        videoLink.Text = "<a href = \"playVid.aspx\">Play video</a>";
    }
}


PlayVid.aspx
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="playVid.aspx.cs" Inherits="playVid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <script type = "text/javascript" src = "jwplayer.js"></script>
        
        <div id="container">Loading the player ...</div>
        
        <script type="text/javascript">
            jwplayer("container").setup({
                flashplayer: "player.swf",
                file: "video.mp4",
                height: 270,
                width: 480
            });
        </script>
    </div>
    </form>
</body>
</html>


Voor andere bestandtypes heb ik andere regels nodig om het om te zetten dus dit moet er uiteindelijk ook nog in komen, maar zou op dit moment nog niet weten hoe ik dit moet gaan doen dus als iemand hier tips voor heeft hoor ik ze ook graag.

Zou iemand mij kunnen helpen om, in eerste instantie MPG > MP4, een regel (Arguments) te maken waarmee ik succesvol filmpjes kan omzetten welke afspeelbaar zijn in JWPlayer?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je bent nu gewoon FFMpeg aan het aanroepen. Probeer eerst het bestand eens goed geconverteerd te krijgen als je het handmatig doet ( Gewoon op de commandline ). Op deze manier is het niet echt een programmeer probleem, maar blijkbaar een probleem met FFMpeg of met de jwplayer die het formaat niet ondersteunt.

[ Voor 4% gewijzigd door Woy op 09-03-2011 11:01 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Dennis_86
  • Registratie: November 2009
  • Laatst online: 11-06 19:23
Deze regel werkt op onze server wel:

code:
1
ffmpeg -y -i test.mpg -an -pass 1 -threads 2 -vcodec libx264 -b 96k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 test.mp4
Er zit dan nog geen geluid bij, maar hij zet .mpg en .avi om naar .mp4

Nu ben ik op mijn eigen PC bezig in de commandline en krijg ik de volgende error:

Visual Studio Just-In-Time Debugger
- An unhandled win32 exception occurred in ffmpeg.exe [2836] (dit cijfer is elke keer als ik de regel uitvoer anders)

Dan druk ik op NO en stopt hij met omzetten. Vervolgens staan er 2 bestanden:
- x264_2pass.log.temp
- ffmpeg2pass-0.log

In deze bestanden zit trouwens geen inhoud in, ze zijn 0kb groot.

Waarom werkt hij lokaal niet en op de server wel ?

[ Voor 10% gewijzigd door Dennis_86 op 09-03-2011 12:10 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

Nogmaals. Het is geen programmeer probleem. Het is een 'probleem' bij het draaien van de ffmpeg applicatie. Draai die applicatie eens gewoon vanaf de commandline (op je eigen PC dus!) en misschien heb je dan iets meer feedback.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Dennis_86
  • Registratie: November 2009
  • Laatst online: 11-06 19:23
Sorry, ik heb de regel die ik geplaatst heb inderdaad in de command line gezet.. het verhaal van VWD kun je dus even vergeten..

Komt omdat ik tijdens het typen van mijn post het via de commandline getest had.

Heb mijn vorige post aangepast!

[ Voor 7% gewijzigd door Dennis_86 op 09-03-2011 12:07 ]


Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Je doet het nog altijd niet juist hoor. Als je via de commandline ffmpeg gebruikt kan je nooit een Visual Studio Just in time debugger krijgen.

Start -> uitvoeren -> cmd -> enter -> blader door middel van het commando 'cd' naar de juiste locatie (waar de filmbestanden staan), en voer het ffmpeg commando uit.

En zeg DAN wat er niet lukt.

Acties:
  • 0 Henk 'm!

  • Dennis_86
  • Registratie: November 2009
  • Laatst online: 11-06 19:23
Dat heb ik gedaan maar omdat ik blijkbaar Visual Web Developer op mijn pc heb staan komt deze er altijd tussendoor?

Ik heb het nu weer op de server getest en ik kan via de commandline wel een video omzetten, maar via de ASP.NET niet..

http://oi53.tinypic.com/2pr7nsn.jpg

Dit werkt wel en hij speelt het nu af, maar nu moet het nog via ASP.NET werken..

Zie de code hierboven (Default.aspx.cs)
Alleen de ffmpeg.StartInfo.Arguments zijn aangepast naar:

code:
1
ffmpeg.StartInfo.Arguments = "-y -i " + video + " -pass 1 -threads 2 -vcodec libx264 -b 96k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 " + mpg;

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

Wat werkt er niet dan? Ik ken .net niet, maar als ik zo snel ff in de docs kijk is Process iets wat parallel draait. Weet je wel zeker dat de mp4 al klaar is voordat jwPlayer hem ophaalt?


Sowieso is het natuurlijk wel een redelijke ruk oplossing dat je je filmpjes elke keer bij het kijken loopt te converteren. Gebruiker moet wachten voordat hij uberhaupt kan beginnen en de server wordt een stuk zwaarder belast.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@Dennis_86, probeer eens te debuggen. Kijk bijvoorbeeld of de samengevoegde arguments wel zijn wat je verwacht ( Check dit ook door het letterlijkt naar de command prompt te kopieren )

Verder is de opmerking van Janoz ook terecht, misschien word het process al afgekapt voordat het klaar is. Daarvoor kun je de WaitForExit methode gebruiken.

Al met al zul je wat meer moeten gaan debuggen. Probeer eens gewoon stap voor stap door je programma heen te lopen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1