• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] mit mencoder film aus einem jpeg erstellen?

stolley

Hacker
hi leute!

ich habe inzwischen herausgefunden, dass man mit mencoder über die -mf - option, aus mehreren bild-dateien ein video erstellen kann.
doch funktioniert das auch, wenn ich ein video mit z.b. 10sec länge aus nur EINER bild-datei erstellen möchte?

hintergrund: ich möchte vor meinen kleinen home-videos jeweils als intro lediglich einen schriftzug einblenden.

gruss
volker
 

Rainer Juhser

Moderator
Teammitglied
Warum soll das nicht gehen?
mencoder manpage schrieb:
MEncoder is capable of creating movies from one or more JPEG, PNG or TGA files. With simple framecopy it can create MJPEG (Motion JPEG), MPNG (Motion PNG) or MTGA (Motion TGA) files.
 
OP
S

stolley

Hacker
doch wie sage ich mencoder, wie lange die sequenz sein soll? ich möchte ja, dass das bild ca. 15sec erscheint...

oder kennt jemand noch einen anderen lösungsansatz?


gruss
volker
 

prototyp

Member
Hi,

mein Lösungsvorschlag wäre das Programm "digiKam" zu verwenden. Dort kannst du unter "Extras" eine MPEG -Diaschau erstellen. Die Zeit, wie lang die einzelnen Bilder angezeigt werden, gibst du dort einfach ein.
 
Code:
mencoder -fps 1 bild1.jpg{,,,,,,,,,,,,,,}
Da die Mindestanzahl an FPS ja oft nur 1 betragen kann, muss man eben das Bild mehrmals angeben; hier mit Shellmagie 15x.
 
OP
S

stolley

Hacker
Da die Mindestanzahl an FPS ja oft nur 1 betragen kann, muss man eben das Bild mehrmals angeben; hier mit Shellmagie 15x.

hey, das ist ja wirklich magie! :D

danke, werds mal ausprobieren!

zu dem anderen ansatz von prototyp:
Hi,

mein Lösungsvorschlag wäre das Programm "digiKam" zu verwenden. Dort kannst du unter "Extras" eine MPEG -Diaschau erstellen. Die Zeit, wie lang die einzelnen Bilder angezeigt werden, gibst du dort einfach ein.

das hat bei mir leider nicht funktioniert, hat mich jedoch auf das tool "images2mpg" gebracht. damit scheint es auch zu funktionieren!

jetzt habe ich offensichtlich zwei möglichkeiten, hätte aber noch eine bitte, da ich bash-mäßig nicht so fit bin:
da ich einen ordner mit 64 "intro-bildern" habe, möchte ich natürlich möglichst nicht 64 mal den befehl eintippen müssen. kann man das irgendwie über ein script automatisieren?

danke und gruß
volker
 
Code:
args=()
for i in *.jpg; do
        for ((j = 0; j < 15; ++j)); do
                args[${#args[@]}]="$i";
        done;
done;
mencoder -o out.mpg "${args[@]}"
 
OP
S

stolley

Hacker
hey, super!
danke!

ich verstehe das allerdings noch nicht ganz.
denn wo bringe ich das argument für die eingabe-dateien unter?

meine befehlszeile für ein bild lautet ja nun:

Code:
mencoder mf://xxx.jpg{,,,,,,,,,,,,,,} -mf fps=1 -ovc copy -o xxx.avi

könntest du das noch in das script einbauen?
vielen dank!
 
OP
S

stolley

Hacker
ich habe es jetzt nochmal alleine versucht.
und so weit bin ich gekommen:

Code:
for i in *.jpg; do
    mencoder mf://"$i"{,,,,,,,,,,,,,,} -mf fps=1 -ovc copy -o "$i".avi
done;

dabei entsteht aber lediglich eine RIESEN-DATEI!!!

was mache ich denn da falsch?
 
Naja -ovc copy. Du kopierst ja nur JPEG-Bilder (und das 15x!). Für eine sinnvolle Dateigröße musst du einen Encoder auswählen, bspw. -vo lavc -lavcopts vcodec=mjpeg, oder eigentlich besser noch einer der anderen wie vcodec=mpeg4. Auf jeden Fall irgendwas das Delta-Frames erzeugt (und 'copy' macht das nun gerade nicht).
 
OP
S

stolley

Hacker
Naja -ovc copy. Du kopierst ja nur JPEG-Bilder (und das 15x!). Für eine sinnvolle Dateigröße musst du einen Encoder auswählen, bspw. -vo lavc -lavcopts vcodec=mjpeg, oder eigentlich besser noch einer der anderen wie vcodec=mpeg4. Auf jeden Fall irgendwas das Delta-Frames erzeugt (und 'copy' macht das nun gerade nicht).

ähm, ok! das leuchtet mir ein!
dennoch kann es aber doch nicht sein, dass dabei eine datei entsteht, die über 1GB groß ist, oder?
es soll ja eigentlich so sein, dass das script nacheinander aus den einzelnen jpgs je einen filmstreifen von 15sec länge erzeugt.

ich habe aber das gefühl, dass es einfach alle bilder im ordner hintereinander anordnet und daraus EINEN filmstreifen macht.

komisch eigentlich. denn ohne die scriptmagie {,,,} lief das script so, wie ich es wollte. es hat aus jedem jpg einen filmstreifen von 1sec erzeugt. aber es sollen ja schließlich 15sec oder meinetwegen auch nur 5sec werden.

und da habe ich das gefühl, das mit diesem syntax irgendwas nicht stimmt:
Code:
mf://"$i"{,,,,,,,,,,,,,,}

hast du da noch ne idee?
 
Achso "je einen 15s-Film pro Bild"... Wer braucht denn sowas? Naja..
Code:
for i in *.jpg; do
    mencoder -o "${i%.jpg}.avi" -ofps 1 -ovc lavc $datei_und_zwar_15x
done;
 
OP
S

stolley

Hacker
ähm, diesen part verstehe ich nicht ganz:

Code:
mencoder -o "${i%.jpg}.avi" -ofps 1 -ovc lavc $datei_und_zwar_15x

da fehlt mir irgendwie das "-mf", oder?
und was meinst du mit "$datei_und_zwar_15x"?

werds aber trotzdem mal ausprobieren, danke!
wozu man da benötigt?

ich habe halt viele video-schnipsel. und als intro möchte ich lediglich einen schriftzug erscheinen lassen, aus dem klar wird, wann das video aufgenommen wurde und was es darstellt.

gruss
volker
 
OP
S

stolley

Hacker
so, jetzt klappt es, so wie ich es mir vorstelle:

Code:
for i in *.jpg; do
  mencoder mf://$i{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,} -mf fps=1 -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=4/3 -o "$i".mpeg
done;

vielen dank an alle, die mir geholfen haben!

gruß
volker
 
Oben