我想批量转换包含数百个FLV文件的目录,以便每个文件都具有MP4等效项.我正在尝试通过编写shell脚本并从终端运行它来自动执行此过程.我该怎么做呢?大多数可用的指令都是针对使用ffmpeg的Linux,但我认为OS X没有它.谢谢.
要跟踪视频帧上的对象,首先我从视频中提取图像帧并将这些图像保存到文件夹中.然后我应该处理这些图像以找到一个对象.实际上我不知道这是否是实用的,因为所有的算法都是一步完成的.它是否正确?
我想使用bash脚本将audio.mp3音轨添加到无声的video.mp4文件中,"cvlc""ffmpeg"命令行的正确语法是什么?
我用VLC和--no-audio选项录制了视频,因此没有可以从原始视频复制的比特率或编码等设置.
我正在尝试使用硬件支持的视频工具包解码器编写视频解码器.但是,如果我尝试初始化解码会话,如下面发布的示例,我在调用VTDecompressionSessionCreate时收到错误-8971.谁能告诉我这里做错了什么?
感谢你并致以真诚的问候,
奥利弗
OSStatus status;
int tmpWidth = sps.EncodedWidth();
int tmpHeight = sps.EncodedHeight();
NSLog(@"Got new Width and Height from SPS - %dx%d", tmpWidth, tmpHeight);
const VTDecompressionOutputCallbackRecord callback = { ReceivedDecompressedFrame, self };
status = CMVideoFormatDescriptionCreate(NULL,
kCMVideoCodecType_H264,
tmpWidth,
tmpHeight,
NULL,
&decoderFormatDescription);
if (status == noErr)
{
// Set the pixel attributes for the destination buffer
CFMutableDictionaryRef destinationPixelBufferAttributes = CFDictionaryCreateMutable(
NULL, // CFAllocatorRef allocator
0, // CFIndex capacity
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
SInt32 destinationPixelType = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
CFDictionarySetValue(destinationPixelBufferAttributes,kCVPixelBufferPixelFormatTypeKey, CFNumberCreate(NULL, kCFNumberSInt32Type, &destinationPixelType));
CFDictionarySetValue(destinationPixelBufferAttributes,kCVPixelBufferWidthKey, CFNumberCreate(NULL, kCFNumberSInt32Type, &tmpWidth)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试为视频获取有代表性的帧,以便删除可能出现在视频中的冗余帧.这是我用来获取帧的方法.
./ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png
我也试过了
./ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr thumb%04d.png
这方面的主要问题是模糊.如果我只是每5秒对帧进行一次采样,我看不到任何模糊,但是使用上面两个命令我会得到很多模糊.
该视频可在此处找到,http://www.cs.umd.edu/~bharat/video.mp4
为了每10秒对视频进行一次采样,我使用以下内容:
./ffmpeg -i video.mp4 -r 1/10 filename%03d.jpg
使用正常采样输出:

使用select输出:

但是,对于某些视频,正常采样可能不好,并且可能会创建冗余帧.有没有办法在ffmpeg中使用一些选项并获得没有这种模糊的帧?如果正常采样可以获得良好的帧,则附近应该存在没有模糊的帧.我已经查看了ffmpeg中的场景切换等选项,但我不熟悉将它们用于此应用程序.
video ffmpeg image-processing video-processing computer-vision
我想在python脚本中运行以下命令,我还想让它循环遍历文件夹中的几个视频.这是我想要运行的命令.
ffmpeg -i mymovie.avi -f image2 -vf fps=fps=1 output%d.png
我希望适合这样的事情:
import ffmpy
import os
path = './Videos/MyVideos/'
for filename in os.listdir(path):
name = filename.replace('.avi','')
os.mkdir(os.path.join(path,name))
*ffmpeg command here*
Run Code Online (Sandbox Code Playgroud)
我找到了一个名为ffmpy的ffmpeg包装器,这可能是一个解决方案吗?
我想要记录屏幕(通过每秒捕获15个屏幕截图).这部分我知道怎么做.但我不知道如何将其写成一些流行的视频格式.我找到的最佳选择是将帧写入分离的PNG文件并使用命令行Mencoder,它可以将它们转换为多种输出格式.但也许有人有另一个想法?
要求:
问候
NV12格式定义了具有 420 次采样的 YUV 颜色空间的特定颜色通道排序。
NV12格式主要用于视频编码/解码管道。
NV12 是一种双平面格式,具有全尺寸 Y 平面,后跟具有编织 U 和 V 值的单个色度平面。NV21 相同,但具有编织的 V 和 U 值。NV12中的12指的是每像素12位。NV12 具有半宽和半高色度通道,因此是 420 子采样。
在 NV12 上下文中,YUV 格式主要指YCbCr颜色空间。NV12 元素每个元素(类型)
有 8 位。
在帖子的上下文中,YUV 元素处于“有限范围”标准:Y 范围为 [16, 235],U,V 范围为 [16, 240]。 uint8
sRGB(标准红绿蓝)是 PC 系统使用的标准色彩空间。
在本文中,sRGB颜色分量范围为 [0, 255](uint8类型)。
RGB 元素排序与帖子无关(假设有 3 个颜色平面)。
目前至少有 2 种可能的 YCbCr 格式应用 NV12:
NV12 元件订购示例:
YYYYYY
YYYYYY …
我在处理过程中遇到了问题。我使用10美元的数字托管套餐中的真实联合服务器,并使用Amazon s3的云服务。问题是上传视频时,无论视频大小如何,无论其大小是 1 MB 还是 2 Giga。上传过程结束后,处理过程开始上传,没有问题但是当处理过程需要很长时间以至于我无法完成时,解决方案是什么,是我有问题还是这个过程普通的?我使用 laravel-ffmpeg 并通过 laravel 队列将视频切割成多种质量,我将在下面将代码附加给您。
public function handle()
{
//180p
$lowBitrate1 = (new X264('aac'))->setKiloBitrate(613);
//270p
$lowBitrate2 = (new X264('aac'))->setKiloBitrate(906);
//360p
$midBitrate1 = (new X264('aac'))->setKiloBitrate(1687);
//540p
$midBitrate2 = (new X264('aac'))->setKiloBitrate(2227);
//720p
$highBitrate1 = (new X264('aac'))->setKiloBitrate(4300);
//1080
$highBitrate2 = (new X264('aac'))->setKiloBitrate(7917);
FFMpeg::fromDisk('s3')
->open($this->movie->path)
->exportForHLS()
->onProgress(function ($percent) {
$this->movie->update([
'percent' => $percent
]);
})
->setSegmentLength(10)// optional
->addFormat($lowBitrate1)
->addFormat($lowBitrate2)
->addFormat($midBitrate1)
->addFormat($midBitrate2)
->addFormat($highBitrate1)
->addFormat($highBitrate2)
->toDisk('s3')
->save("public/Movies/{$this->movie->id}/{$this->movie->id}.m3u8");
}//end of handle
Run Code Online (Sandbox Code Playgroud) 我有一段人们说话的视频。我还有一份成绩单。我将单词分成句子,这样我就可以在屏幕上一次显示一个句子,就像电影中的普通字幕一样。为此,我创建了一个 csv,其中每个帧都有一行,并且每行都包含该句子时间块内的完整句子。这样,我循环遍历所有帧,并将该句子的文本放在该句子内的每个帧上。我是在 OpenCV 中做的。
\n样本成绩单 csv:
\nframe sentence\n0 hello\n1 hello\n2 how are you\n3 how are you\n4 how are you\n5 how are you\n6 how are you\n7 how are you \n8 fine\n...\nRun Code Online (Sandbox Code Playgroud)\ncsv 的长度与视频中的帧数相同。要绘制字幕,我这样做:
\nimport cv2\nimport pandas as pd\n\ndf = pd.read_csv('data.csv')\nvideo = cv2.VideoCapture('vid.mp4')\nnum_frames = video.get(cv2.CAP_PROP_FRAME_COUNT)\n\nassert len(df) == num_frames\n\nfor i in list(range(0, num_frames)):\n ret, frame = video.read()\n cv2.putText(frame, str(df.sentence), (0,50),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3, cv2.LINE_AA, True)\n\n # additional standard cv2 code below...\nRun Code Online (Sandbox Code Playgroud)\n这可行,但现在我没有任何音频。我知道 OpenCV 不适用于任何音频,但是还有其他解决方法吗?这种方法在我的管道中效果很好,因此我希望能够将这些帧写入新视频,但保留音频,同时使用尽可能少的附加库。
\nvideo-processing ×10
ffmpeg ×4
python ×3
macos ×2
opencv ×2
video ×2
c++ ×1
delphi ×1
ffmpeg-php ×1
file-upload ×1
freepascal ×1
h.264 ×1
ios ×1
laravel ×1
lazarus ×1
numpy ×1
nv12-nv21 ×1
shell ×1
transcoding ×1
unix ×1
vlc ×1
xcode ×1