我目前正在使用 Python 的 Mutagen 模块来为 iTunes 准备视频文件的 MP4 标签。它工作得很好,但我错过了一个非常重要的标签,它称为“stik”,代表 iTunes 媒体类型。
这是我当前的代码:
mp4_video_tags = MP4(mp4_file)
mp4_video_tags['\xa9nam'] = 'Video Name'
mp4_video_tags['\xa9alb'] = 'DVD-Name'
mp4_video_tags['\xa9gen'] = 'Video-Training'
mp4_video_tags['\xa9day'] = '2015'
mp4_video_tags['\xa9ART'] = 'Company'
mp4_video_tags['aART'] = 'Company'
mp4_video_tags['\xa9wrt'] = 'Company'
mp4_video_tags['cprt'] = 'Copyright (c) Company'
mp4_video_tags['desc'] = 'description'
mp4_video_tags['tvsh'] = 'DVD-Name'
mp4_video_tags['trkn'] = [(1, 18)]
mp4_video_tags['disk'] = [(1, 1)]
mp4_video_tags['stik'] = 10
mp4_video_tags.save()
Run Code Online (Sandbox Code Playgroud)
该代码工作得很好,但在“mp4_video_tags['stik'] = 10”时崩溃,因为该标签的值不能是整数。但根据此列表:https://code.google.com/p/mp4v2/wiki/iTunesMetadata#Media_Type_%28stik%29
对于电视节目,它必须是值为 10 的整数。
我注意到 Mutagen 没有在其标签列表/文档中显示“stik”标签,也许默认情况下不支持:https ://mutagen.readthedocs.org/en/latest/api/mp4.html
谁能解释一下如何将带有 Mutagen 的电视节目的 MP4 标签“stik”设置为 10?
有没有办法在页面重新加载时强制 Web 浏览器,即 Firefox 或 Firefox Mobile(最新版本)更新 HTML5 视频对象?
我正在使用 CTRL+R、重新加载按钮和 2 分钟的 HTTP 刷新,但除非重新启动浏览器或清除缓存,否则这些选项都不会“更新”视频文件。此外,Firebug 甚至不显示正在加载的 MP4 文件。
旁注:MP4 文件由 shell 脚本每 2 分钟生成一次。我已经通过检查时间戳验证了视频正在更新,而且如果我退出/重新启动 Firefox,它就可以工作。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Cameras</title>
<meta http-equiv='refresh' content='120'>
</head>
<body>
<h3>Cameras</h3>
<video id="CamLoop" height="100%" width="100%" autoplay loop><source src='/Get/Cams/_Loop.mp4'></source></video>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在 Windows 10 上的节点中使用 puppeteer 进行开发。问题是当我打开一个播放 mp4 文件的网站时,浏览器告诉我它不受支持。
我找到了这个包:chromium-codecs-ffmpeg-nonfree;但它适用于Linux!
如何在 Windows 上使用 puppeteer 在 Chromium 中播放 .mp4?
我正在尝试使用 ffmpeg 摆脱 Mp4 容器中的数据(字幕)流。
这是ffprobe的截图:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.m4v':
Metadata:
major_brand : isom
minor_version : 2
compatible_brands: isomiso2avc1mp41
creation_time : 2018-01-19T15:10:48.000000Z
Duration: 00:00:42.17, start: 0.000000, bitrate: 6260 kb/s
Chapter #0:0: start 0.000000, end 42.166000
Metadata:
title : Chapter 1
Stream #0:0(eng): Data: bin_data (text / 0x74786574), 0 kb/s (default)
Metadata:
creation_time : 2018-01-19T15:10:48.000000Z
handler_name : Apple Alias Data Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo,
fltp, 317 kb/s (default)
Metadata:
creation_time : 2018-01-19T15:10:48.000000Z …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 macOS 上使用 Swift、AVFoundation 和 AVKit 将多个电影的片段一起编辑到一个剪辑中。下面的 Swift 代码是我正在尝试做的事情的一个很好的例子:
\n\nimport AVFoundation\nimport AVKit\n\nlet source1 = AVAsset(url: URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")!)\nlet source2 = AVAsset(url: URL(string: "http://techslides.com/demos/sample-videos/small.mp4")!)\n\nlet comp = AVMutableComposition()\n\ncomp.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)\ncomp.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)\n\nfunc cmtime(_ i: Double) -> CMTime {\n return CMTime(seconds: i, preferredTimescale: 600)\n}\n\nfunc insertSecond(into: AVMutableComposition, from: AVAsset, start: CMTime, at: CMTime) throws {\n let videoTrack = into.tracks(withMediaType: .video).first!\n let audioTrack = into.tracks(withMediaType: .audio).first!\n try videoTrack.insertTimeRange(\n CMTimeRange(start: start , duration: cmtime(1.0)),\n of: from.tracks(withMediaType: .video).first!,\n at: at\n )\n try audioTrack.insertTimeRange(\n CMTimeRange(start: start, …Run Code Online (Sandbox Code Playgroud) 我开发了一个 Android 应用程序,允许用户创建类似回旋镖的 mp4 视频。这段视频由 10 张静止图像组成,来回播放速度非常快。我知道这样的视频(回旋镖效果)可以在播放时从单个视频文件轻松循环播放,但我真的需要创建一个 mp4 视频,它基本上包含已经准备好的回旋镖视频。用户可以在任何外部播放器上下载和播放输出视频(显然我没有任何控制权)。
为此,我目前从循环中的图像创建视频。循环从第 1 张图片开始,到第 10 张图片,帧之间有 0.25 秒的延迟,然后从第 10 张返回到第 1 张,包括延迟。并且有 5 个循环,这基本上意味着从 5 * 10 * 2 = 100 张图像创建单个视频。我知道这有点荒谬,所以准备这个视频所花费的时间也是荒谬的(大约 1:40 分钟)。
假设输出视频确实必须由 5 个来回循环组成,您可以推荐什么解决方案?我想过创建单循环视频(20 张图片),然后通过将其连接 5 次来创建最终输出视频。但这能有什么好处吗?我正在尝试为初学者 Android 程序员找到一种有效但易于理解的方式。
我有一个动画画布,我想将其转换为 mp4。我正在使用 MediaRecorder 来捕获屏幕,然后转换该 Blob。我了解到 MediaRecorder 不允许在 mp4 中录制,所以我被迫在 webm 中获取画布。这是我尝试过的:
<canvas id="canvas"></canvas>Run Code Online (Sandbox Code Playgroud)
var recordedChunks = [];
var time = 0;
var canvas = document.getElementById("canvas");
return new Promise(function (res, rej) {
var stream = canvas.captureStream(60);
mediaRecorder = new MediaRecorder(stream, {
mimeType: "video/webm; codecs=vp9"
});
mediaRecorder.start(time);
mediaRecorder.ondataavailable = function (e) {
recordedChunks.push(event.data);
if (mediaRecorder.state === 'recording') {
mediaRecorder.stop();
}
}
mediaRecorder.onstop = function (event) {
var blob = new Blob(recordedChunks, {
"type": "video/webm"
});
var url = URL.createObjectURL(blob);
res(url);
var xhr …Run Code Online (Sandbox Code Playgroud)我当前正在解析 MPEG-DASH 流初始化段(由 FFMPEG 生成),我注意到时间刻度是在我的文件中的多个不同位置指定的:
为什么在这么多不同的地方指定它?为什么他们有不同的价值观?这些价值有等级吗?例如,60 是否会覆盖 15360,15360 是否会覆盖 1000?
这是我用来生成我正在查看的文件的命令:
ffmpeg -f v4l2 -pixel_format yuyv422 -vcodec rawvideo -framerate 30 -video_size 640x360 -i /dev/video0 \
-f dash -remove_at_exit false -use_template true -use_timeline true -streaming true -window_size 5 -extra_window_size 5 -seg_duration 5 -vcodec libx264 -b:v 1M -maxrate 1M -bufsize 2M -pix_fmt yuv420p -r 30 -s 640x360 -aspect 16:9 /var/www/html/media/live.mpd
Run Code Online (Sandbox Code Playgroud) 我刚刚遇到了VideoView无法播放宽度超过320像素的mp4视频文件的限制.我想知道如何克服这些限制.我试图让我的应用程序尽可能宽容,所以除了使用VideoViews之外还有其他方式来播放这些mp4视频吗?
克里斯