Scr*_*ubb 5 mythtv ffmpeg mp4 video-conversion
我正在尝试将 mythtv 录制的 mpg (mpeg2) 文件转换为可流式传输的mp4 文件。转换为 mp4 很简单,但是,必须先转换整个文件才能使用。即使使用将“mov atom”放在文件开头以进行快速流式传输的转换工具,也需要在此之前对整个 mp4 进行编码。
我在 avconv 文档中读到“mov/mp4/ismv muxer 支持碎片化”。它可以在文件的开头放置一个“假”mov atom,然后在整个文件的每个关键帧处放置一个新的,这样视频就可以在转码或转换中断时进行流式传输。
我相信我已经按照 avconv 说明 ( http://libav.org/avconv.html#MOV_002fMP4_002fISMV ) 了解如何转换文件,但继续收到指示编码器不理解参数的错误。下面是我的命令,以及它生成的错误输出。我已经筋疲力尽了谷歌和我自己寻找答案并且出现了空白,因此将不胜感激任何帮助。
系统运行 ubuntu 12.04x64,avconv 版本 0.8.1-4:0.8.1-0ubuntu1。
命令:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
错误:
[mp4 muxer @ 0x36772e0] [Eval @ 0x7fffeddb69b0] Undefined constant or missing '(' in 'frag_keyframe'
[mp4 muxer @ 0x36772e0] Unable to parse option value "frag_keyframe+empty_moov"
[mp4 muxer @ 0x36772e0] Error setting option movflags to value frag_keyframe+empty_moov.
Output #0, mp4, to 'output.mp4':
Stream #0.0: Video: libx264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=-1--1, 90k tbn, 29.97 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, 384 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video -> libx264)
Stream #0:1 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?)
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的多路复用器(-f 参数,如 h264 等),并且还有其他错误,例如甚至不支持 movflag(逻辑)。
我是否缺少包、依赖项,或者只是重点?提前致谢。
libav 提交了一个关于这个问题的错误。令人沮丧的是,这个问题似乎没有得到解决。我认为最好将 avconv 视为一个好的编码工具,但不是一个好的封装工具。
最好的方法是使用GPAC的 MP4Box 。它是一个实用程序,似乎主要关注将媒体流封装到 mp4 文件中。例如,它不进行编码/解码/转码。如果你在 Ubuntu 上安装 GPAC,你可以说:
MP4Box -add non-streamable.mp4 new-shiny-streamable.mp4
Run Code Online (Sandbox Code Playgroud)
MP4Box 默认使 mp4 文件可流式传输:
从版本 0.2.4 开始,MP4Box 始终在开头存储具有 0.5 秒交错和元数据的文件,使其适合 HTTP 流媒体。(来源)
请参阅此处:这是一个 ffmpeg 指南,但它同样适用于 avconv。
我不知道如何创建用于流式传输的文件,但错误可能是因为您错过了预设,也可能错过了质量设置(尽管我相信 avconv 使用 -crf 23 作为默认值,如果没有其他质量设置提供)。尝试:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -preset medium -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
预设为:超快、超快、非常快、更快、快、中、慢、慢和非常慢。更快的预设将为您提供更快的编码,但文件更大,而较慢的预设则有更小的文件,但制作时间更长。不同预设之间没有质量差异。还有一个“安慰剂”预设,但这是 x264 开发人员的一个笑话,应该忽略。
如果这不起作用,您可以尝试使用:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -crf 20 -preset medium -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)
20 是完全任意的,选择最适合您的 crf 设置。较低=图像质量更好,但文件大小更大。根据该指南,您可能应该使用 18-28 之间的值。
归档时间: |
|
查看次数: |
9595 次 |
最近记录: |