Wie konvertiere ich .avi-Videos, die 1 statisches Bild im Video enthalten (mit Ton), in mp4-Videos mit ffmpeg auf die kleinstmögliche Größe?

7

Ich habe ein .avi-Video (divx) mit 25 fps und MP3-Audio mit 64 kbit / s. Dieses Video enthält nur ein Bild im gesamten Video.

Ich versuche dieses Video in mp4 zu konvertieren, aber um es so klein wie möglich zu machen (da es wirklich nur 1 Frame gibt!)

Ich versuche gerade Folgendes:

ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y video.mp4

Aber das macht ein MP4-Video, das ähnlich groß ist wie .avi.

Als nächstes habe ich versucht, die Bildrate auf 1 fps zu ändern:

ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y -r 1 video.mp4

Dies hat die Videodatei viel kleiner gemacht (10x kleiner), aber es gibt ein Problem, dass der Keyframe nicht im ersten Frame des Videos erscheint. Das einzige Bild im Video erscheint also wie 8 oder 10 Sekunden im Video (!).

Es sieht so aus, als ob das Problem hier ist, dass ffmpeg immer wieder Frames aus video.avi löscht und sie nicht als Keyframes in video.mp4 schreibt. Wenn ein Keyframe geschrieben wird, ist es spät im Video.

Es wurde versucht, -force_key_framesArgumente zu verwenden, aber das half auch nicht. Ich habe -force_key_frames 0und -force_key_frames 1.

Weiß jemand, wie ich ein wirklich kleines MP4-Video mit nur 1 statischen Frame erstellen kann?

bodacydo
quelle
1
Ob es sich um AVI oder MP4 handelt, spielt keine Rolle. Dies sind nur Container und können verschiedene Video-Codecs enthalten (die die Größe bestimmen). Haben Sie vielleicht ein Beispiel für dieses Video? Welche FFmpeg-Version verwenden Sie?
Slhck
Per Definition erhalten Sie mit 64 KBit / s MP3 und 64 KBit / s AAC-Audio dieselbe Dateigröße - und wenn Sie MP3 mit niedriger Bitrate in einen verlustbehafteten Codec transkodieren, verlieren Sie wahrscheinlich eine spürbare Qualität. Verwenden Sie es einfach -c:a copyfür das Audio oder -acodec copyfür ältere Versionen von ffmpeg.
Evilsoup
Warum nicht auch einfach das Audio herausreißen, eine eigenständige Bilddatei erstellen und diese mit der Bilddatei als Videoeingang neu kompilieren, damit nichts transkodiert wird?
EkriirkE
Ich wollte nur 2 Jahre später nachfassen und sagen, dass ich immer noch keine Lösung dafür habe. Meine Videos mit nur 1 statischen Frame sind immer noch 3 MB groß, wenn sie 200 KB groß sein sollten.
Bodacydo

Antworten:

1

Sie sollten überprüfen, ob der Videoteil wirklich ein Faktor ist, indem Sie die A / V-Komponenten trennen

mit ffmpeg funktioniert das mit

#retrieve audio-only
ffmpeg -i <<VideoName>> -vn -acodec copy -f <<AudioCodec>> output.audio
#retrieve video-only
ffmpeg -i <<VideoName>> -an -vcodec copy -f <<VideoCodec>> output.video

Wenn das Video wirklich eine bedeutende Größe hat, besteht eine Möglichkeit darin, einen Screenshot davon zu erstellen und das Bild als Eingabe für den Videocodierer zu verwenden, anstatt den Videostream neu zu codieren

Siehe ffmpeg.org/wiki als Referenz

#create screenshot from video
ffmpeg -i <<VideoName>> -ss 00:00:01.0 -f image2 -vframes 1 output.screen.png

In diesem Stackoverflow-Beitrag können Sie sehen, wie Sie aus einem Standbild ein Video erstellen

Legionär
quelle
Sie und Shawn Fluhr scheinen beide die halbe Antwort zu haben. Sie erklären, was er vergessen hat. Aber ich frage mich: Was ist das für ein Bildschirmbildformat? Ist es besser, als es beispielsweise als verlustfreies Format wie PNG zu speichern?
trlkly
@trikly Nein, .screen ist kein Format. Es ist nur so, wie ich die Ausgabedatei aufgerufen habe, um einen Screenshot anzuzeigen. Die Zeile wurde so geändert, dass sie das fehlende Format enthält.
Legionär
1

Versuchen Sie den folgenden Befehl, bei dem das Bild und das Audio getrennt entfernt und dann wieder zusammengesetzt werden:

ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.amr -acodec copy \
-vcodec video.avi video.mp4
SoaringMoon
quelle
Was Sie sagen, würde ich vorschlagen, aber Sie listen nicht den Befehl auf, der Audio und Video tatsächlich trennt, soweit ich das beurteilen kann.
trlkly
-1

Wenn Sie es nur konvertieren möchten, verwenden Sie ein Programm namens Format Factory (Link hier: http://www.pcfreetime.com/ ). Es kann die Datei für Sie direkt in mp4 konvertieren und auf eine kleine Größe einstellen

Daalekz
quelle