Audio und Bild verbinden -> Als Video mit FFmpeg ausgeben

8

Ich habe 1 Bild (JPG) und 1 Audiodatei (MP3) und möchte diese als Videodatei ausgeben (z. B. AVI).

Weiß jemand, wie man FFMPEG benutzt, um die beiden zu verbinden? Ich möchte das Bild für die Dauer des Audios zeigen.

Irgendwelche Ideen jemand?

user41559
quelle
Welche Os verwenden Sie
Subanki

Antworten:

5

Wenn Sie in Windows sind, können Sie dies auch in Windows Movie Maker tun. Wenn Sie Anweisungen benötigen, hinterlassen Sie bitte einen Kommentar

Verwenden Sie dies für FFmpeg

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 ist die Anzahl der Frames, die geloopt werden sollen, um ein fortlaufendes Bild für die gesamte audio.mp3-Datei zu erhalten

    Beispiel: 8 Minuten und 3 Sekunden lang ((8 m × 60 s + 3 s) × 30 fps = 14490 vf)

Ressource von hier

Subanki
quelle
Hallo Subanki - danke für deinen Kommentar !! Ich verstehe das allerdings nicht. Ich muss eine Videodatei aus Audio und Bild ausgeben. Wie macht das das?
user41559
@nayrsllew Ich habe gerade herausgefunden, dass Code nicht funktioniert, sorry .. Nun, das Grundlegende ist, ihn mit ffmpeg -f image2 -i image% d.jpg video.mpg in Video umzuwandeln und dann Video und Audio zu verbinden
subanki
aktualisierte meine Antwort, es war hart, aber meine 1 Stunde Google-Suche fand es, ich bin glücklich :)
Subanki
Die Antwort ist richtig, warum die Down-Abstimmung :(
Subanki
Hallo, kannst du mir hier helfen? Das resultierende Video ist zu groß. Ich brauche das Video gleich groß wie eine MP3-Datei. Meine Bilddatei ist sehr klein. Außerdem muss ich dieses Video auf Youtube hochladen.
Parminder
7

Es gibt einen viel einfacheren Weg als den hier vorgeschlagenen, bei dem nicht die Anzahl der Frames berechnet oder die Länge einzelner Dateien eingegeben werden muss (insbesondere besser für die Stapelverarbeitung). In einer neueren Version von ffmpeg können Sie die -shortestOption verwenden, die die Codierung beendet, wenn der kürzeste Stream endet - in diesem Fall input.mp3 (da das Bild für immer eine Schleife hat und eine unendliche Länge hat):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

Dies verwendet 2 Bilder pro Sekunde für das Bild / Video, was in Ordnung sein sollte, aber Sie können es auf einen Standardwert von 25 einstellen, wenn Sie möchten.

Übelsuppe
quelle
5

Subanki hatte es fast richtig. Die Arbeitsbefehlszeile lautet wie folgt:

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

Überschreiben Sie Ausgabedateien ohne Aufforderung

-Schleife 1

Die Option '-loop_input' ist mit -loop 1 veraltet. Siehe ffmpeg-Dokumentation .

-ich

Eingabedatei (en)

-r


Bilder pro Sekunde Könnten auch ausgedrückt werden als: -r 30000/1001, was eine fps von 29,97 nnn ergibt

-b: v

Video-Bitrate; Je höher die Zahl, desto besser die Qualität und desto größer die Dateigröße.

-vframes

Wie oben erklärt; Nehmen Sie die Gesamtzeit Ihrer Audiodatei in Sekunden (z. B. 00:02:41 (2 Minuten 41 Sekunden) entspricht 161 Gesamtsekunden (2 x 60) + 41). Multiplizieren Sie dann die Gesamtzahl der Sekunden mit den von Ihnen angegebenen Bildern pro Sekunde mit -r (z. B. 161 x 30 = 4830).

-vframes können durch -t 161 ersetzt werden (-t Daueraufzeichnung oder Transcodierung der "Dauer" Sekunden von Audio / Video)

-acodec

Verwenden Sie den richtigen Audio-Codec für den Dateityp, den Sie erstellen. Für .mp4 sollte es ein AAC-Format sein. Der Codec libvo_aacenc war der richtige Codierungscodec für mein Windows 7-System.

-ab

Audio Bitrate

result.mp4

Dies ist der Name der Ausgabedatei. Es kann sich um einen beliebigen legalen Dateinamen für Ihr System handeln. Die Erweiterung hilft ffmpeg dabei, den richtigen Video-Codec zu ermitteln, wenn Sie keinen mit -vcodec angeben.

Jon Hall
quelle
1

Dieses einfache Bash / Cygwin-Skript, das AUTOMAGISCH alle Dateien mit der Erweiterung $ AUDIO im Verzeichnis in eine 10FPS-MP4-Videodatei im Verzeichnis mit eingebettetem Bild folder.jpg codiert.

nützlich für YouTube-Uploads;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &
user113368
quelle
0

Laden Sie VirtualDub herunter und gehen Sie folgendermaßen vor:

  1. Öffnen Sie das Bild wie eine normale Videodatei.

  2. Berechnen Sie die Dauer des Audios in Sekunden und runden Sie es auf die nächste ganze Sekunde auf (z. B. 78,34 Sekunden werden 79 Sekunden). Dieser Wert heißt ab sofort x.

  3. Gehen Sie zu "Video> Bildrate", wählen Sie "Auf Bildrate ändern (fps)" und geben Sie "1 / x" als Wert ein. Wenn Sie in der resultierenden Datei eine normale Bildrate wie 25 fps haben möchten, wählen Sie außerdem "In fps konvertieren" und geben Sie dort die gewünschte Bildrate ein.

  4. Wählen Sie "Video> Komprimierung" und wählen Sie Ihren Lieblingsgeschmack. Es kann sein, dass Sie die Größe des Bildes mit dem Größenänderungsfilter anpassen müssen.

  5. Gehen Sie zu "Audio> Audio aus anderer Datei" und wählen Sie dort Ihr Audio aus. Wählen Sie bei Bedarf eine Komprimierung für das Audio.

  6. Speicher die Datei.

Quelle: stephanV

Mürrischer alter Bär
quelle
Danke StephanV .. Ich muss FFMpeg verwenden, aber das ist ein guter Vorschlag .. danke
user41559