使用FFMPEG将FLV转换为MP4并保持质量


26

我试图使用ffmpeg将我的flv文件转换为mp4,以便在iOS设备上播放这些文件,但转换后的视频的质量比原始视频差得多。

这是我使用的命令:

ffmpeg -i input.flv -ar 22050 output.mp4

如果有人可以为我提供从flv到mp4转换的最佳设置,我将不胜感激。

ffmpeg  flv  mp4 

Answers:


42

根据FLV中使用的编解码器,您只需将其重新包装在mp4容器中,就可以摆脱困境。你需要H.264MPEG4 simple profile视频和AAC音频。您可以使用以下方法在源文件中找到一些信息ffmpeg -i input.flv

我不确定仅使用H.264 / MPEG4 Simple + AAC是否足够好,或者是否支持特定的编解码器选项。测试起来很简单:

尝试使用

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

-copytscopy timestamps它将帮助音频同步。

如果这不起作用,请尝试强制使用音频和视频编解码器。这将重新编码文件:

ffmpeg -i input.flv -c:v libx264 -crf 23 -c:a libfaac -q:a 100 output.mp4

为了提高视频质量,您可以使用较低的CRF值,例如任何低至18的文件。要获得较小的文件,请使用较高的CRF,但是请注意,这会降低质量。

要提高音频质量,请使用更高的质量值。对于FAAC,100是默认设置。


这是关于问题中建议的ffmpeg命令的几点想法。

-ar指音频采样率。我建议您不要对此一无所知,除非您对它有所了解。如果要播放音频编码,请调整比特率(例如-b:a 128k),然后让编码器选择要执行的操作。

如果您确实走了这条路...

CD质量为44100Hz采样; 典型的视频使用48000Hz。

您可能会注意到,原始问题示例中的22050是cd质量采样率的1/2。如果您要向下转换CD资料,这是一个不错的选择。如果您从48KHz信号源开始(您可能是这样;同样,在视频文件中这比44100更为常见),我会改用24Khz。可能无关紧要,但是听起来可能会好一点,并使用更少的CPU进行转换。


重新读取我的答案...除了上面给出的命令行之外,您只能复制视频或音频,然后重新编码。例如...“ ffmpeg -i input.foo -vcodec复制-acodec libfaac -ab 128k -copyts output.mp4”,这将复制视频流并将音频重新编码为AAC。libfaac的质量不高,但是可以。
丹·普里兹

关于强制音频/视频编解码器的命令:自2019年9月起,我发现已ffmpeg不再支持libaac这个问题建议使用ffmpeg的本机AAC编码器通过 -c:a aac或Fraunhofer FDK AAC编解码器通过 -c:a libfdk_aac(需要ffmpeg对进行支持libfdk_aac)进行编译。
aresnick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.