Come utilizzare correttamente ffmpeg per convertire le immagini in video

Attualmente sto cercando di fare 5 secondi di video per ogni immagine e quindi la loro combinazione utilizzando concat, ma sto avendo un sacco di problemi a fare questo.

Ecco il mio codice:

ffmpeg -loop 1 -i 000.jpg -t 5 000.mp4
ffmpeg -loop 1 -i 001.jpg -t 5 001.mp4
ffmpeg -f concat -mi inputs.txt -codec copia di uscita.mp4

inputs.txt elenca i seguenti
il file ‘000.mp4’
il file ‘001.mp4’

Ora quando provo tutto questo, ho eseguito il file di output mp4 e la prima parte funziona bene, ma poi una volta che si inizia a visualizzare la 001 parte del video, si passa a una schermata grigia. Non farlo in stand-alone file 001.mp4.

Qualche suggerimento su cosa sta succedendo o cosa potrei fare a risolvere questo problema?

Ho provato tante altre cose. Come il passaggio di tutti i file al formato png, invece, che ha dato lo stesso problema. Ho anche provato ad utilizzare diversi tipi di formati di output come wmv, avi, etc. Io sono ancora molto nuovo, ma non so che altro provare.

Questo è quello che si vede nel mio prompt dei comandi dopo l’esecuzione del comando.

C:\xampp\htdocs\images>ffmpeg -f concat -i inputs.txt -codec copy output.mp4
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 19.100 /52. 19.100
  libavcodec     55.  0.100 /55.  0.100
  libavformat    55.  0.100 /55.  0.100
  libavdevice    54.  4.100 /54.  4.100
  libavfilter     3. 45.103 / 3. 45.103
  libswscale      2.  2.100 / 2.  2.100
  libswresample   0. 17.102 / 0. 17.102
  libpostproc    52.  2.100 /52.  2.100
[concat @ 003b9660] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from 'inputs.txt':
  Duration: 00:00:00.01, start: 0.000000, bitrate: 28 kb/s
    Stream #0:0: Video: h264 (High 4:4:4 Predictive) (avc1 /0x31637661), yuv444
p, 800x600 [SAR 1:1 DAR 4:3], 28 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf55.0.100
    Stream #0:0: Video: h264 ([33][0][0][0] /0x0021), yuv444p, 800x600 [SAR 1:1
 DAR 4:3], q=2-31, 28 kb/s, 25 fps, 12800 tbn, 12800 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=  250 fps=0.0 q=-1.0 Lsize=      31kB time=00:00:09.88 bitrate=  26.1kbits
/s
video:28kB audio:0kB subtitle:0 global headers:0kB muxing overhead 13.534948%

C:\xampp\htdocs\images>
Stai avendo tutte le immagini in una volta ?

OriginaleL’autore user3276588 | 2014-02-06

One Reply
  1. 8

    Console output mostra che si sta scrivendo in 4:4:4 H. 264 uscita, che pochissimi giocatori di supporto. (Le nuove versioni di FFmpeg in guardia circa). Aggiungere -pix_fmt yuv420p prima che il file di output per la conversione ampiamente supportati 4:2:0 formato di pixel. Si potrebbe inoltre includere -profile:v baseline per farlo funzionare su giocatori ancora di più. (Queste opzioni sono valide per la codifica, quindi non li uso il comando che specifica -codec copy.) Si potrebbe anche provare a giocare il vostro file di output con ffplay, che è uno dei pochi giocatori che supportano 4:4:4 H. 264 in file mp4.

    Se si desidera che la stessa durata per ogni immagine e sono numerati consecutivamente, è necessario solo un singolo comando, ad esempio:

    ffmpeg -framerate 0.2 -i %3d.jpg -vf fps=10 -pix_fmt yuv420p output.mp4
    

    Il -framerate 0.2 consente di impostare il frame rate a 0,2 fotogrammi al secondo (1 frame ogni 5 secondi). %3d è sostituito da 3 cifre 000, 001, etc. per ogni fotogramma. -vf fps=10 cambia il frame rate a 10 fotogrammi al secondo, in questo caso la duplicazione di frame di input; non è strettamente necessario, ma può essere utile con un basso frame rate per rendere la ricerca più liscia e garantire la piena durata per la prima e l’ultima immagine, e non dovrebbe aumentare la dimensione di uscita da molto dato che i fotogrammi che sono identici al fotogramma precedente può essere codificato in un formato di piccole dimensioni.

    Se si desidera continuare a utilizzare il concat demuxer, o desidera che i nomi di file diversi o la durata di ogni immagine, è possibile specificare l’immagine direttamente con una durata per ogni uno nella vostra inputs.txt. Non c’è bisogno di creare un file di filmato per ogni immagine. Per esempio:

    file 000.jpg
    duration 5
    file 001.jpg
    duration 5
    ...
    

    Quindi utilizzare il metodo concat demuxer per concatenare loro e di effettuare la codifica allo stesso tempo:

    ffmpeg -f concat -i inputs.txt -vf fps=10 -pix_fmt yuv420p output.mp4
    

    Se una qualsiasi di queste cose non funzionano, è necessario aggiornare il vostro FFmpeg per la versione più recente.

    Grazie mille per le grandi risposte. Purtroppo sto ancora avendo un problema però. Ho provato a correre “ffmpeg -f concat -mi inputs.txt -vf fps=10 -pix_fmt yuv420p uscita.mp4” con gli ingressi di file strutturato proprio come te elencate (esclusi i punti). Stranamente, l’output mostra l’immagine precedentemente disattivato. Ma ora la prima immagine è in nessun posto essere visti. Proverò l’aggiornamento all’ultima versione e se ancora non funziona. Ho pensato che era già l’ultima versione, ma io sono a doppio controllo.
    A quanto pare la versione che sto usando è N-50911-g9efcfbe. E ‘un po’ di confusione, considerando il loro sito web è formattato come decimali, l’ultimo dei quali 2.1 penso. Anche se non ho esattamente installare ffmpeg. Ho installato imagemagick che a quanto pare viene con esso. Inoltre suppongo che non aiuta il fatto che sto utilizzando Windows Vista e utilizzando xampp.
    Ancora non avendo alcuna fortuna 🙁 ho disinstallato imagemagick e poi è andato e installato l’ultima Zeranoe FFmpeg Versione Build “git-9c978f2”, ma ancora non funziona. In perdita per le parole 🙁 cerca di everywheres per le ultime 48 ore per cercare di ottenere questo risolto. Cercando tutto quello che posso trovare. L’unica cosa che ho potuto ottenere è la fusione di due video, ma erano predefinito video wmv in “i Miei Video” che appaiono su ogni computer windows. Creare video da immagini e il tentativo di fondere loro non funziona.
    Non vedendo la prima immagine? Hai provato a duplicare la prima immagine inputs.txt?
    Avete fatto @mark4o – duplicando la prima immagine una volta in inputs.txt file, ora con successo la riproduzione di immagini per 5 secondi, senza alcun tipo di schermo grigio. Non capisco perché ho dovuto fare questo 😛 Ma a prescindere, grazie per l’aiuto. Mi sarebbe stato bloccato su questo per sempre!

    OriginaleL’autore mark4o

Lascia un commento