FFMPEG converte flv in mp4 senza perdere la qualità [duplicato]


55

Questa domanda ha già una risposta qui:

Attualmente sto convertendo i file flash .flv in file .webm e .mp4 da utilizzare con un lettore video HTML5.

_

Uso questo comando ffmpeg per WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm che funziona benissimo e la dimensione del file rimane relativamente la stessa (importante).

_

Per MP4 sto usando il seguente: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Si converte in .mp4 bene e impedisce qualsiasi perdita di qualità, ma la dimensione del file è quasi tripla.

Quale formula di ffmpeg potrebbe essere utilizzata per convertire in MP4 senza perdere troppa qualità e impedire una dimensione del file molto più elevata?

Risposte:


57
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

È necessario specificare il codec video utilizzato. Nel tuo comando non specifichi -vcodeco -c:vmeno ffmpeg usa il codec predefinito per MP4 ( mpeg4) che non ha un'ottima efficienza di compressione. Prova invece a utilizzare libx264 e imposta CRF, che è il livello di qualità (inferiore è migliore, il valore predefinito è 23 e i valori sani sono compresi tra 18 e 28).

La codifica con libx264 è piuttosto complessa, quindi dovresti cercare la guida alla codifica H.264 .

Devi anche specificare -strict experimentalaltrimenti potresti ottenere: "L'encoder 'aac' è sperimentale ma i codec sperimentali non sono abilitati, aggiungi '-strict -2' se vuoi usarlo."


1
Questo richiede molto tempo e il mp4 risultante è molto distorto, pixel persi ecc. Qualche idea sul perché potrebbe essere così? : /
trainoasis

Il codec video predefinito per il formato mp4 non è necessariamente mpeg4. Secondo l'output di ffmpeg --help muxer=mp4sulla mia macchina, ffmpeg utilizza h264 come codec video predefinito di mp4.
doubleDown

1
@doubleDown La mia risposta è vecchia - dal 2011. Probabilmente hanno cambiato le impostazioni predefinite da allora.
sashoalm,

43

Questo comando modifica solo il contenitore senza ricodifica

ffmpeg -i input.flv -codec copy output.mp4

conosceresti un modo per creare uno script per la conversione batch di molti video nella stessa cartella?
Ttoine,

sì, su Windows crea il file convert.bat e inserisci questo codice for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4"
:,

1
Per me questo genera Impossibile scrivere l'intestazione per il file di output # 0 (parametri codec errati?): Argomento non valido. Qualche idea? : /
trainoasis

2
@trainoasis il tuo .flv non contiene video H.264 e audio AAC. La copia dei dati audio / video non toccati -codec copyin un file .mp4 funziona solo nel raro caso in cui l'audio e il video siano già codificati con H.264 e AAC. Vedere superuser.com/a/1009539/390946 e addpipe.com/blog/flv-to-mp4 .
Ottaviano Naicu,

3

avconve ffmpegsono essenzialmente la stessa cosa. [da MOLTO di recente c'è ALCUNA divergenza, ma non c'è molto di cui scrivere a casa se compili il tuo ffmpeg[quello fornito nei repository di Ubuntu per esempio è VECCHIO e soffre che la dimensione del video non è un affare di bla bla bla [fondamentalmente prova per dirti che il video ha proporzioni errate], ma se ti preoccupi di leggere la ffmpegguida alla compilazione e compilarla da Git, non ha nessuno dei problemi delle versioni precedenti che sono disponibili nella maggior parte dei sistemi operativi. l'avvertimento di ammortamento riferendosi alla avconvvi sta dicendo che hanno creato un util più recente per cercare di sostituirlo ffmpeg, ma è SO ampiamente utilizzato che, anche se hanno cercato di tagliare fuori saremmo tutti creando softlink da avconvaffmpeg comunque così non smetteranno di lavorare e lo lasceranno cadere.]]

Non è una brutta cosa da usare avconv, ho appena visto l'unica risposta che menziona l'avvertimento di deprezzamento che è essenzialmente un messaggio vuoto dovrebbe essere più di un'alternativa a ffpmeg che potresti provare avconv che è più fedele al caso qui.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

è davvero lo stesso come

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

essenzialmente nel primo stai usando le opzioni più brevi e nel secondo è la varietà più scritta.

-map 0Si riferisce ANCHE a tracce audio, quindi se si utilizza qualcosa del genere in mp4agrado di gestire tracce audio multiple, è possibile lasciarlo spento per copiare tutti i flussi audio nel file risultante. Ciò è necessario solo se si utilizza un codec che non supporta più tracce audio nello stesso file, quindi si desidera mappare l'audio necessario e non tutti. Naturalmente, se si cerca di ridurre al minimo lo spazio utilizzato, è possibile specificarne solo uno per provare a eliminare un po 'di dimensione dal file [l'audio è come forse 1/3 della dimensione della traccia video [ed è generoso]].

-c:v = codec(video)quindi: -c:v libx264è come usare: -vcodec libx264FYI; lo stesso con questo esempio:-c:v copy = -vcodec copy

e inoltre per i FLV fai attenzione che il file flv è lo stesso di un avi in ​​quanto è un contenitore che può contenere un numero qualsiasi di codec per video o audio. Prima di scegliere di copiare semplicemente il video e / o il flusso audio o se si desidera trasmetterlo da qualunque cosa si trovasse a qualcosa di nuovo, è necessario utilizzare prima l'utilità di ispezione dei supporti scelta per vedere cosa viene utilizzato all'interno del file stesso. Quindi il comando che funziona meglio per un FLV potrebbe non essere lo stesso per un altro FLV [ovviamente USUALMENTE se si ottengono più FLV dalla stessa sorgente verranno codificati allo stesso modo ma non è mai una garanzia].

Non cercare di fare la scelta, mi sono imbattuto in questo nella ricerca web e volevo cercare di chiarire un po 'le cose per la gente.

Ancora una volta, come afferma questa risposta per la risposta di seguito, SÌ che esegue ffmpeg pubblicherà sempre quel messaggio che è essenzialmente vuoto poiché questi 2 programmi di utilità sono in realtà sempre lo stesso programma di utilità con poca differenza. In quasi tutti i casi dovresti ottenere gli stessi esatti risultati usando uno dei due comandi. Ciò non comporta necessariamente una ricodifica completa, perché? A, se non è necessario, fa risparmiare un sacco di tempo, e B se ricodifichi un file in cui è già stato compresso in un codec video, stai essenzialmente eseguendo una routine di compressione rispetto a qualcosa che è già compresso e risulterà sempre in meno qualità rispetto alla fonte. La maggior parte dei codec più recenti è in qualche modo compatibile con i cross [non tutti] come ad esempio un flv potrebbe tecnicamente essere un MP4 all'interno di un wrapper FLV poiché FLV come AVI sono solo contenitori di altri codec. Così, dipende da ciò che ha il flv di origine per il codec video e ausio rispetto a quello in cui lo si sta convertendo in merito alla necessità o meno di transcodificarlo. Se all'interno del FLV usassero il video H264 MP4 e MP4a per l'audio non avresti bisogno di ricodificare la cosa che dovresti solo copiarlo e regolare le intestazioni dei file in modo che venga letto come un vero MP4 anziché un video MP4 all'interno di un file FLV.


3

Secondo questa guida , il comando corretto per convertire FLV in MP4 senza alcuna ricodifica AV è questo:

ffmpeg -i input.flv -c copy -copyts output.mp4

Ha funzionato perfettamente per me in tutti i casi con video AVC e audio AAC o MP3.


-1

Quando ho usato ffmpeg ho ricevuto un avviso di deprecazione per usare avconv. Usando avconv ho ottenuto buoni risultati:

avconv -i inputfile.flv -map 0 -c: v libx264 -c: una copia outputfile.mp4

Leggi man avconvper maggiori informazioni.


1
ffmpegdi per sé non è deprecato . Il motivo per cui sembra buono è perché si specifica l'encoder x264 che ha delle belle impostazioni predefinite per la qualità.
slhck

-2

Ti suggerisco di creare uno script di shell per quello chiamato video_flv_to_mp4con il seguente contenuto:

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

Quindi eseguilo in questo modo:

$ video_flv_to_mp4 video.flv

Ti darà un file video.flv.mp4.


4
-sameqnon è più un'opzione valida per ffmpeg. Inoltre non significa "stessa qualità". Vedi anche questo post .
slhck
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.