Unisci audio e immagini -> Output come video utilizzando FFmpeg


8

Ho 1 immagine (jpg) e 1 file audio (MP3) e vorrei riprodurlo come file video (ad esempio AVI).

Qualcuno sa come utilizzare FFMPEG per unire i due? Vorrei mostrare l'immagine per la durata dell'audio.

Qualche idea qualcuno?


Quali Os stai usando
subanki

Risposte:


6

Se sei in Windows, puoi farlo anche in Windows Movie Maker ... se hai bisogno di istruzioni, lascia un commento

Per FFmpeg usa questo

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 è il numero di frame che dovrebbero essere sottoposti a loop per avere un'immagine continua per l'intero file audio.mp3

    Esempio: per 8 minuti e 3 secondi ((8m x 60s + 3s) x 30fps = 14490 vf)

Risorsa da qui


Ciao Subanki - grazie per il tuo commento !! Non lo capisco però ... Devo produrre un file video dall'audio e dall'immagine. Come fa questo?
user41559,

@nayrsllew Ho appena scoperto che il codice non funziona, mi dispiace .. Beh, la cosa base è convertirlo in video usando ffmpeg -f image2 -i image% d.jpg video.mpg e poi unire video e audio
subanki

ho aggiornato la mia risposta, è stata dura ma la mia ricerca su google di 1 ora l'ha trovata, sono felice :)
subanki

La risposta è corretta, perché il down -vote :(
subanki

Ciao Cant, puoi aiutarmi qui. Il video risultante è troppo grande. Ho bisogno della stessa dimensione del file mp3 del video. Il mio file di immagine è molto piccolo. Inoltre devo caricare questo video su Youtube.
Parminder,

7

Esiste un modo molto più semplice di quelli suggeriti qui, che non richiede il calcolo del numero di frame o l'inserimento della lunghezza dei singoli file (specialmente meglio per l'elaborazione batch). Con una versione recente di ffmpeg, è possibile utilizzare l' -shortestopzione, che interrompe la codifica quando termina il flusso più breve - in questo caso, input.mp3 (poiché l'immagine avrà un ciclo continuo per sempre, ha una lunghezza infinita):

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

Questo utilizza 2 fotogrammi al secondo per l'immagine / il video, il che dovrebbe andare bene, ma puoi impostarlo su un 25 più standard, se lo desideri.



5

subanki aveva quasi ragione. La riga di comando funzionante è la seguente;

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

sovrascrivere i file di output senza chiedere conferma

-loop 1

L'opzione '-loop_input' è obsoleta utilizzare -loop 1. Consultare la documentazione di ffmpeg .

-io

file di input

-r

I frame al secondo
potrebbero anche essere espressi come: -r 30000/1001 con un fps di 29,97 nn

-b: v

bitrate video; maggiore è il numero, migliore è la qualità e maggiore è la dimensione del file.

-vframes

Come spiegato sopra; prendi il tempo totale del tuo file audio in secondi (es. 00:02:41 (2 minuti 41 secondi) equivalgono a 161 secondi totali (2 x 60) + 41). Quindi moltiplica i secondi totali per i frame al secondo che hai specificato con -r (ad esempio 161 x 30 = 4830).

-vframes può essere sostituito con -t 161 (-t registra la durata o transcodifica i "durata" secondi di audio / video)

-acodec

Utilizzare il codec audio corretto per il tipo di file che si sta creando. Per .mp4 dovrebbe essere un formato AAC. Il codec libvo_aacenc era il codec di codifica corretto per il mio sistema Windows 7.

-ab

bitrate audio

result.mp4

Questo è il nome del file di output. Può essere qualsiasi nome di file legale per il tuo sistema. L'estensione aiuterà ffmpeg a determinare il codec video corretto se non lo specifichi usando -vcodec.


1

Quel semplice script bash / cygwin che AUTOMAGICAMENTE codificherà tutti i file dell'estensione $ AUDIO nella directory in file video mp4 10FPS nella directory con l'immagine folder.jpg incorporata,

utile per i caricamenti di YouTube;)

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* &

0

Scarica VirtualDub , quindi esegui questa operazione:

  1. Apri l'immagine come se aprissi un normale file video.

  2. Calcola la durata dell'audio in secondi e arrotondala al secondo intero più vicino (es. 78.34 sec diventa 79 secondi). Questo valore si chiama x da ora in poi.

  3. Vai a "video> frame rate" seleziona "cambia in frame rate (fps)" e inserisci "1 / x" come valore. Inoltre, se si desidera avere una frequenza dei fotogrammi normale nel file risultante come 25 fps, selezionare "Converti in fps" e inserire la frequenza dei fotogrammi desiderata.

  4. Seleziona "video> compressione" e scegli il tuo gusto preferito. È possibile che sia necessario regolare le dimensioni dell'immagine con il filtro di ridimensionamento.

  5. Vai su "audio> audio da un altro file" e seleziona l'audio lì. Se necessario, selezionare una compressione per l'audio.

  6. Salva il file.

Fonte: stephanV


Grazie StephanV .. Devo usare FFMpeg ma questo è un buon suggerimento .. grazie
user41559
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.