Come convertire più file mp3 in mp4 con ffmpeg?


1

Il seguente comando prende l'mp3, allega un'immagine ad essa e la converte in un mp4:

ffmpeg -i input.mp3 -loop 1 -i image.png -c: una copia -c: v libx264 -shortest output.mp4

Sto cercando di applicare la stessa immagine a ciascun mp3 in una cartella. Il sistema operativo è Windows 8 e l'output desiderato per il file è mp4.

Devo farlo per tutti gli mp3 in una cartella. Come lo codificherei?

PS Ho anche bisogno del codice che può allegare un'intro mp4 a più file mp4 in una cartella.


Il tuo PS potrebbe essere meglio posto come una domanda separata. Potrebbe essere un semplice caso di utilizzo del concatfiltro (ad esempio); ma questo si basa su alcuni presupposti e quindi sarebbe meglio chiederlo separatamente :)
— bertieb

Risposte:


0

Puoi fare questo genere di cose usando un linguaggio di scripting. Ecco un piccolo script di Ruby che dovrebbe fare il lavoro, se lo esegui nella cartella contenente i .mp3file e il image.png:

Dir.glob("*.mp3").each do |file|
    system("ffmpeg -i #{file} -loop 1 -i image.png -c:a copy -c:v libx264 -shortest output.mp4")
end

Lo hai per caso in PHP? Ruby mi è sempre sembrato strano, quindi non ho mai avuto il tempo di impararlo.
— Doc Chop,

Scusa, non ho mai usato PHP, quindi non sono sicuro di poterti aiutare. Dovresti essere in grado di scrivere qualcosa di simile a questo in PHP: elenca i file nella directory, crea una stringa di comando ffmpeg per ciascuno e quindi chiama system ().
— Kaathe,

Ho scaricato ruby ​​interattivo e ho pensato che avessi semplicemente incollato il codice e premuto invio, ma poi ho visto DIR.glob e ho realizzato che avrei dovuto specificare la cartella. Come lo farei in ruby ​​interattivo o in qualsiasi programma?
— Doc Chop,

È possibile utilizzare Dir.chdir per modificare la directory di lavoro corrente, prima della chiamata a Dir.glob. La documentazione per Dir è qui: ruby-doc.org/core-1.9.3/Dir.html
— Kaathe

0

Supponendo Windows standard di torbiera cmd.exe(cioè niente adorabile cygwin, o Powershell, o <insert scripting language here>):

for %f in (*.mp3) do ffmpeg -i %f -loop 1 -i image.png -c:a copy -c:v libx264 -shortest %~nf.mp4

(presuppone inoltre che non si trovi in ​​un file batch; in tal caso %è necessario raddoppiare il numero di messaggi %%)

Usa il fatto che puoi leggere nel file corrente (o nella directory, ecc. A seconda di quali argomenti passi for) a una variabile a carattere singolo; che è quindi possibile ottenere il nome di base di via %~n.

Quindi, supponendo che i tuoi mp3 e image.pngsiano nella tua Downloadscartella come da tuo commento:

  1. Avvia un prompt dei comandi: <windows key>+r --> cmd --> <enter>
  2. Passa alla directory dei download: cd Downloads
  3. Esegui il ffmpegcomando in loop :for %f in (*.mp3) do ffmpeg -i %f -loop 1 -i image.png -c:a copy -c:v libx264 -shortest %~nf.mp4
  4. (opzionale) Goditi le versioni mp4 dei tuoi mp3 con l'immagine

Come faccio a specificare dove sono i file con il codice? Supponiamo che i file siano nella mia cartella dei download.
— Doc Chop,

@DocChop Lo stai facendo in modo interattivo o da un file batch? Se interattivo: win+r -> cmd(ovvero avvia il prompt dei comandi); cd Downloads; for %f in (*.mp3) do ffmpeg -i %f -loop 1 -i image.png -c:a copy -c:v libx264 -shortest %~nf.mp4(presuppone che siano presenti sia gli mp3 che l'immagine). Ho modificato la mia risposta per illustrare questo processo.
— bertieb,

0
  1. Crea un file e salvalo con l'estensione .bat
  2. Scrivi il codice qui sotto in esso. (specifica il file immagine giusto)
  3. Copia il file batch nella directory contenente i tuoi file .mp3.
  4. Supponendo che il percorso di ffmpeg.exe sia impostato nelle variabili di ambiente, eseguire il file batch
  5. Individua i file convertiti nella cartella "convertita" creata.

@echo off
mkdir converted
for %%a in ("*.mp3") do ffmpeg -i "%%a" -loop 1 -i image.png -c:a copy -c:v libx264 -shortest "converted\%%~na.mp4"
pause
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.