可以使用这个mp3 SPI支持处理Mp3文件,但我找不到类似于mp4文件的东西.
任何帮助,将不胜感激.
--update
我想要做的是获取文件的大小,就像使用此代码处理wave文件一样:
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
AudioFormat format = audioInputStream.getFormat();
long audioFileLength = file.length();
int frameSize = format.getFrameSize();
float frameRate = format.getFrameRate();
float durationInSeconds = (audioFileLength / (frameSize * frameRate));
Run Code Online (Sandbox Code Playgroud)
- 回答
以下是使用@mdma(IBM工具包)提示的答案代码:
/**
* Use IBMPlayerForMpeg4SDK to get mp4 file duration.
*
* @return the mp4File duration in milliseconds.
*/
public static long getMp4Duration(File mp4File) throws IllegalStateException, IOException {
PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player();
playerControl.open(mp4File.getAbsolutePath());
long mili = playerControl.getDuration();
// int sec = (int) ((mili …Run Code Online (Sandbox Code Playgroud) 我不太了解h.264,但问题是我在h.264中有一个mp4容器中的这个视频,我想通过UDP流.
我的问题很简单,在对视频进行编码时是否可以进行任何调整,以便它能够相当容忍某些"轻"数据包丢失?
我知道压缩视频通常每N帧有一个关键帧,然后在它们之间只发送增量.我可以想象h.264应该比那复杂得多,所以它可能不是那么简单.
更确切地说,我一直在进行一些实验,并意识到只需从视频流中删除1024个字节,我就会从丢失和开启的角度将其完全"无法播放".
我想要的是它能够容忍这样的光损失,这可能吗?
谢谢
纳尔逊
我正在编写一个检查MP4文件的工具(又名ISO基础媒体文件格式,ISO 14496第12部分).
我可以解释ISO 14496-12中列出的大多数由OSS生成的框.我还没有弄清楚如何提取单个视频访问单元和音频访问单元.
我有理由相信'mdat'框中的H.264视频在NAL单元上没有ISO 14496-10附录B"0x000001"前缀.
我已经尝试解释SampleToChunkBox('stsc'),SampleSizeBox('stsz')和ChunkOffsetBox('stco')来定位'mdat'中的媒体样本,但我似乎无法找到任何我能解释的内容作为nal_unit()(ISO 14496-10第7.3.1节)或slice_header()(第7.3.3节).
我也很好奇SPS(7.3.2.1)和PPS(7.3.2.2)的存在.我怀疑这些人住在'trak'盒子里面的某个地方,但我还没弄明白哪里.
应用程序或库的指针实用性有限.我正在编写一个应用程序,与数学解释相比,外部源代码更难理解(受其自身框架的阻碍).
我们在Github Pages存储库中有一个MP4视频文件.该文件的MIME类型为application/octet-stream,这意味着Internet Explorer不喜欢它.它应该作为类型video/mp4.有没有办法配置Github页面使用正确的MIME类型,或者我们应该找到视频的备用托管解决方案?帮助页面中未涉及此主题.
我们在使用默认的rails 3应用程序在ipad上播放mp4时遇到问题.在Chrome和桌面上的其他浏览器中查看路径时,可以正确提供mp4.
这是我们的代码:
file_path = File.join(Rails.root, 'test.mp4')
send_file(file_path, :disposition => "inline", :type => "video/mp4")
Run Code Online (Sandbox Code Playgroud)
我们点击0.0.0.0:3000/video/test.mp4观看视频,并在ipad上显示无法播放图标.我们已经尝试修改各种标题"Content-Length","Content-Range"等,但它们似乎不会影响最终结果.
我们也尝试过在某种程度上使用send_data
即
File.open(file_path, "r") do |f|
send_data f.read, :type => "video/mp4"
end
Run Code Online (Sandbox Code Playgroud)
在Ipad上查看时,同一视频在公共文件夹中正常运行.
通过rails到Ipad提供mp4文件的正确方法是什么?
是否可以将pcm音频文件存储到.mp4文件中?
我用的ffmpeg命令"的ffmpeg -i tempA.wav -acodec副本temp.mp4的",但无法将其存储在MP4容器文件.
输入#0,wav,来自'tempA.wav':
持续时间:00:01:36.51,比特率:128 kb/s
Run Code Online (Sandbox Code Playgroud)Stream #0.0: Audio: pcm_s16le, 8000 Hz, 1 channels, s16, 128 kb/s[mp4 @ 0x7d70e0] Tag [1] [0] [0] [0]/0x00000001与输出编解码器ID"65536"不兼容
输出#0,mp4,到'temp.mp4':
Run Code Online (Sandbox Code Playgroud)Stream #0.0: Audio: pcm_s16le, 8000 Hz, 1 channels, 128 kb/s流映射:
流#0.0 - >#0.0
无法为输出文件#0写入标头(编解码器参数不正确?)
凡在转换为.AVI(ffmpeg的-i tempA.wav -acodec副本temp.avi).MOV(ffmpeg的-i tempA.wav -acodec副本temp.mov)文件格式工作完全正常.
我需要通过RTSP从我的相机获取视频流并将其保存到文件中.所有这些都需要通过gstreamer来完成.
经过一些谷歌搜索,我尝试了以下内容:
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! avdec_h264 ! mp4mux ! filesink location=result3.mp4
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:"错误的管道:无法将avdec_h264-0链接到mp4mux0"
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! h264parse ! mp4mux ! filesink location=result3.mp4
Run Code Online (Sandbox Code Playgroud)
它开始工作,但结果文件无法通过VLC播放.
什么是正确的命令?如果你在h264parse和avdec_h264之间做出选择,你能解释一下原因吗?
我正在尝试在浏览器中播放.h264文件,尝试使用html视频标记来完成此操作.结果始终是空框架.
我确实在网上检查了一些链接,他们建议在.mp4容器中播放视频.
有人可以帮我完成这个吗?
更新的代码:
<video width="560" height="340" preload controls>
<source src="hh.h264" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
<!--<source src="hh.mov" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />
<source src="hh.ogv" type='video/ogg; codecs="theora, vorbis"' />
<source src="hh.webm" type='video/webm; codecs="vp8, vorbis"' />-->
</video>Run Code Online (Sandbox Code Playgroud)
参考文献:
http://www.htmlgoodies.com/html5/client/how-to-embed-video-using-html5.html#fbid=6u-u00TH7Je
我试图用ffmpeg.js将webM文件转换为mp4.我正在从画布(带有一些信息的覆盖层)录制视频并录制视频中的音频数据.
stream = new MediaStream();
var videoElem = document.getElementById('video');
var videoStream = videoElem.captureStream();
stream.addTrack(videoStream.getAudioTracks()[0]);
stream.addTrack(canvas.captureStream().getVideoTracks()[0]);
var options = {mimeType: 'video/webm'};
recordedBlobs = [];
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.onstop = handleStop;
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(100); // collect 100ms of data
function handleDataAvailable(event) {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
}
mediaRecorder.stop();
Run Code Online (Sandbox Code Playgroud)
此代码按预期工作并返回webm视频
var blob = new Blob(recordedBlobs, {type: 'video/webm'});
Run Code Online (Sandbox Code Playgroud)
现在我想要一个mp4文件并检查muaz-khan 的ffmpeg.js.这些示例展示了当您有2个单一流(音频和视频)时如何转换为mp4.但我有一个带有附加音轨的流.我可以将这样的流转换为mp4吗?怎么办?
我编写了一个生成 xstack 复杂过滤器命令的 python 脚本。视频输入是此处描述的几种格式的混合:
我生成了 2 个命令,一个用于 xstack 过滤器,一个用于音频混合。
这是堆栈命令:(抱歉,文本没有换行!)
'c:/ydl/ffmpeg.exe',
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-filter_complex',
'[0]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf0];[rsclbf0]fps=24[rscl0];[1]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf1];[rsclbf1]fps=24[rscl1];[2]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf2];[rsclbf2]fps=24[rscl2];[3]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf3];[rsclbf3]fps=24[rscl3];[4]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf4];[rsclbf4]fps=24[rscl4];[5]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf5];[rsclbf5]fps=24[rscl5];[6]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf6];[rsclbf6]fps=24[rscl6];[7]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf7];[rsclbf7]fps=24[rscl7];[8]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf8];[rsclbf8]fps=24[rscl8];[9]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf9];[rsclbf9]fps=24[rscl9];[10]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf10];[rsclbf10]fps=24[rscl10];[11]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf11];[rsclbf11]fps=24[rscl11];[12]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf12];[rsclbf12]fps=24[rscl12];[13]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf13];[rsclbf13]fps=24[rscl13];[14]scale=480:270:force_original_aspect_ratio=decrease,pad=480:270:(ow-iw)/2:(oh-ih)/2, setsar=1[rsclbf14];[rsclbf14]fps=24[rscl14];[rscl0][rscl1][rscl2][rscl3][rscl4]concat=n=5[cct0];[rscl5][rscl6][rscl7]concat=n=3[cct1];[rscl8][rscl9][rscl10]concat=n=3[cct2];[rscl11][rscl12][rscl13][rscl14]concat=n=4[cct3];[cct0][cct1][cct2][cct3]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0',
'output.mp4',
Run Code Online (Sandbox Code Playgroud)
这是 mix_audio 命令:
'c:/ydl/ffmpeg.exe',
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4'
'-i', 'inputX.mp4' …Run Code Online (Sandbox Code Playgroud) mp4 ×10
audio ×3
ffmpeg ×3
h.264 ×3
video ×3
html5-video ×2
containers ×1
file-io ×1
github-pages ×1
gstreamer ×1
html5 ×1
ipad ×1
java ×1
libavformat ×1
mediastream ×1
mime-types ×1
python ×1
rtsp ×1
udp ×1
webrtc ×1