我正在尝试学习ffmpeg,MP4Box和MPEG-DASH,但我遇到了.mp4我正在使用的问题。我使用ffmpeg用这个命令解压缩mp4:
ffmpeg -i test.mp4 -c:v copy -g 72 -an video.mp4 -c:a copy audio.mp4
创建两个文件后,我使用MP4Box使用此命令对dash播放器的文件进行分段:
MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ output.mp4
这会创建我认为我需要的所有文件。然后我将播放器指向output_dash.mpd,除了控制台中的大量消息外没有任何事情发生:
[8] EME detected on this user agent! (ProtectionModel_21Jan2015)
[11] Playback Initialized
[21] [dash.js 2.3.0] MediaPlayer has been initialized
[64] Parsing complete: ( xml2json: 3.42ms, objectiron: 2.61ms, total: 0.00603s)
[65] Manifest has been refreshed at Wed Apr 12 2017 12:16:52 GMT-0600 (MDT)[1492021012.196]
[72] MediaSource attached to element. Waiting on open...
[77] MediaSource is open!
[77] Duration successfully set to: 148.34
[78] Added 0 inline events
[78] No video data.
[79] No audio data.
[79] No text data.
[79] No fragmentedText data.
[79] No embeddedText data.
[80] Multiplexed representations are intentionally not supported, as they are not compliant with the DASH-AVC/264 guidelines
[81] No streams to play.
以下是我使用的视频中的MP4Box -info:
* Movie Info *
Timescale 1000 - Duration 00:02:28.336
Fragmented File no - 2 track(s)
File suitable for progressive download (moov before mdat)
File Brand mp42 - version 512
Created: GMT Wed Feb 6 06:28:16 2036
File has root IOD (9 bytes)
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: Not part of MPEG-4 Visual profiles (0xfe)
Audio PL: Not part of MPEG-4 audio profiles (0xfe)
No streams included in root OD
iTunes Info:
Name: Rogue One - A Star Wars Story
Artist: Lucasfilm
Genre: Trailer
Created: 2016
Encoder Software: HandBrake 0.10.2 2015060900
Cover Art: JPEG File
Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 00:02:28.335
Media Info: Language "Undetermined" - Type "vide:avc1" - 3552 samples
Visual Track layout: x=0 y=0 width=1920 height=816
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1920 x 816
AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1
NAL Unit length bits: 32
Pixel Aspect Ratio 1:1 - Indicated track size 1920 x 816
Self-synchronized
Track # 2 Info - TrackID 2 - TimeScale 44100 - Duration 00:02:28.305
Media Info: Language "English" - Type "soun:mp4a" - 6387 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 44100
Synchronized on stream 1
Alternate Group ID 1
我知道我需要将视频和音频分开,我认为这就是我的问题所在。我使用的命令可能并没有做正确的事情。
是否有更好的命令来解除我的mp4? 我最好使用MP4Box命令来分割文件吗? 如果我使用不同的文件,它们是否总是需要被解复用?
有一点需要注意的是,如果我使用以下命令,一切正常,但没有音频,因为-an
这意味着它只是视频:
ffmpeg -i test.mp4 -c:v copy -g 72 -an output.mp4
MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ output.mp4
更新
我注意到视频没有音频流,但音频有视频流,这就是我得到mux错误的原因。我认为这可能是一个问题所以我运行此命令以阻止不需要的流输出:
ffmpeg -i test.mp4 -c:v copy -g 72 -an video.mp4 -c:a copy -vn audio.mp4
然后我跑:
MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ video.mp4 audio.mp4
现在我不再故意不支持Multiplexed表示...消息,但现在我得到了:
[122] Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED
[123] [object MediaError]
[125] Schedule controller stopping for audio
[126] Caught pending play exception - continuing (NotSupportedError: Failed to load because no supported source was found.)
我尝试通过Chrome独立播放视频和音频,但它们都能正常工作,而不是通过短信播放器播放。唉,这很难学,但我觉得我在取得进步。
答案 0 :(得分:0)
我最终选择了Bento4。我不确定为什么我不能让MP4Box正常工作,但是Bento4非常容易工作,并让我在几个小时内完成任务。
答案 1 :(得分:0)
你没有使用好的个人资料。考虑到日志,我想你正在使用dash-if播放器。在这种情况下,您需要使用此命令:
MP4Box -dash 4000 -frag 1000 -profile dashavc264:onDemand -rap -segment-name segment_ output.mp4