gpt4 book ai didi

java - 录制的视频失真(FFMPEG)

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:46 26 4
gpt4 key购买 nike

来源取自here .

我正在初始化这个:

private void initRecorder() {
Log.i(LOG_TAG, "init mFrameRecorder");

String recordedTime = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault())
.format(new Date());
mVideo = CameraHelper.getOutputMediaFile(recordedTime, CameraHelper.MEDIA_TYPE_VIDEO);
Log.i(LOG_TAG, "Output Video: " + mVideo);

mFrameRecorder = new FFmpegFrameRecorder(mVideo, videoWidth, videoHeight, 1);
mFrameRecorder.setFormat("mp4");
mFrameRecorder.setSampleRate(sampleAudioRateInHz);
mFrameRecorder.setFrameRate(frameRate);
// Use H264
mFrameRecorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
mFrameRecorder.setVideoQuality(2);

mFrameRecorder.setVideoOption("crf", "20");
mFrameRecorder.setVideoOption("preset", "superfast");
mFrameRecorder.setVideoOption("tune", "zerolatency");

Log.i(LOG_TAG, "mFrameRecorder initialize success");
}

其中frameRate = 60

和视频录制:

class VideoRecordThread extends RunningThread {
@Override
public void run() {
List<String> filters = new ArrayList<>();
// Transpose
String transpose = null;
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(mCameraId, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
switch (info.orientation) {
case 270:
transpose = "transpose=cclock"; // Mirrored horizontally as preview display
break;
case 90:
transpose = "transpose=clock"; // Mirrored horizontally as preview display
break;
}
} else {
switch (info.orientation) {
case 270:
transpose = "transpose=cclock";
break;
case 90:
transpose = "transpose=clock";
break;
}
}
if (transpose != null) {
filters.add(transpose);
}
// Crop (only vertically)
int width = previewHeight;
int height = width * videoHeight / videoWidth;
String crop = String.format(Locale.getDefault(),"crop=%d:%d:%d:%d",
width, height,
(previewHeight - width) / 2, (previewWidth - height) / 2);
filters.add(crop);
// Scale (to designated size)
String scale = String.format(Locale.getDefault(),"scale=%d:%d", videoHeight, videoWidth);
filters.add(scale);

FFmpegFrameFilter frameFilter = new FFmpegFrameFilter(TextUtils.join(",", filters),
previewWidth, previewHeight);
frameFilter.setPixelFormat(avutil.AV_PIX_FMT_NV21);
frameFilter.setFrameRate(frameRate);
try {
frameFilter.start();
} catch (FrameFilter.Exception e) {
e.printStackTrace();
}

isRunning = true;
FrameToRecord recordedFrame;

while (isRunning || !mFrameToRecordQueue.isEmpty()) {
try {
recordedFrame = mFrameToRecordQueue.take();
} catch (InterruptedException ie) {
ie.printStackTrace();
try {
frameFilter.stop();
} catch (FrameFilter.Exception e) {
e.printStackTrace();
}
break;
}

if (mFrameRecorder != null) {
long timestamp = recordedFrame.getTimestamp();
if (timestamp > mFrameRecorder.getTimestamp()) {
mFrameRecorder.setTimestamp(timestamp);
}
long startTime = System.currentTimeMillis();
Frame filteredFrame = null;
try {
frameFilter.push(recordedFrame.getFrame());
filteredFrame = frameFilter.pull();
} catch (FrameFilter.Exception e) {
e.printStackTrace();
}
try {
mFrameRecorder.record(filteredFrame);
} catch (FFmpegFrameRecorder.Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
long processTime = endTime - startTime;
mTotalProcessFrameTime += processTime;
Log.d(LOG_TAG, "This frame process time: " + processTime + "ms");
long totalAvg = mTotalProcessFrameTime / ++mFrameRecordedCount;
Log.d(LOG_TAG, "Avg frame process time: " + totalAvg + "ms");


}
Log.d(LOG_TAG, mFrameRecordedCount + " / " + mFrameToRecordCount);
mRecycledFrameQueue.offer(recordedFrame);
}
}

public void stopRunning() {
super.stopRunning();
if (getState() == WAITING) {
interrupt();
}
}
}

事实是,录制视频时没有明显的滞后(卡住)。录制完视频后,仔细观察会发现卡顿现象很明显,如果录制时快速移动手机,那么录制后就会出现卡顿的情况,就像粘了几张GIF一样。

我尝试了一切我能做的:帧速率更改为 30、60、100。我更改了视频质量、像素格式(尽管我不知道为什么)以及许多其他内容

我没听懂。但还是没有用。也许有人能理解。告诉我如何纠正这些扭曲(卡住)?

UPD: LogCat:

> 12-13 08:51:21.987 2968-2968/io.dev.videosample
> D/FFmpegRecordActivity: Preview frame interval: 98ms
> 12-13 08:51:22.056 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 69ms
> 12-13 08:51:22.137 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 81ms
>12-13 08:51:22.205 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 68ms
>12-13 08:51:22.254 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 49ms
>12-13 08:51:22.305 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 51ms
>12-13 08:51:22.336 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 31ms
>12-13 08:51:22.454 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 118ms
>12-13 08:51:22.494 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 40ms
>12-13 08:51:22.585 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 91ms
>12-13 08:51:22.634 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 49ms
>12-13 08:51:22.720 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 86ms
>12-13 08:51:22.783 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 63ms
>12-13 08:51:22.835 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 52ms
>12-13 08:51:22.903 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 67ms
>12-13 08:51:22.983 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 81ms
>12-13 08:51:23.070 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 87ms
>12-13 08:51:23.149 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 78ms
>12-13 08:51:23.234 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 86ms
>12-13 08:51:23.312 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 78ms
>12-13 08:51:23.395 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 83ms
>12-13 08:51:23.472 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 77ms
>12-13 08:51:23.540 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 67ms
>12-13 08:51:23.627 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 88ms
>12-13 08:51:23.660 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 33ms
>12-13 08:51:23.727 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 67ms
>12-13 08:51:23.792 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 65ms
>12-13 08:51:23.874 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:23.942 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 68ms
>12-13 08:51:23.995 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 53ms
>12-13 08:51:24.090 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 95ms
>12-13 08:51:24.139 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 49ms
>12-13 08:51:24.224 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 85ms
>12-13 08:51:24.272 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 48ms
>12-13 08:51:24.307 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 35ms
>12-13 08:51:24.371 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 64ms
>12-13 08:51:24.437 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 66ms
>12-13 08:51:24.521 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 84ms
>12-13 08:51:24.587 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 66ms
>12-13 08:51:24.636 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 49ms
>12-13 08:51:24.719 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 83ms
>12-13 08:51:24.808 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 89ms
>12-13 08:51:24.869 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 61ms
>12-13 08:51:24.905 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 36ms
>12-13 08:51:24.952 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 46ms
>12-13 08:51:25.017 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 66ms
>12-13 08:51:25.068 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 51ms
>12-13 08:51:25.102 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 34ms
>12-13 08:51:25.204 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 102ms
>12-13 08:51:25.299 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 95ms
>12-13 08:51:25.413 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 114ms
>12-13 08:51:25.481 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 68ms
>12-13 08:51:25.563 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:25.630 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 67ms
>12-13 08:51:25.712 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:25.761 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 49ms
>12-13 08:51:25.844 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 83ms
>12-13 08:51:25.862 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 18ms
>12-13 08:51:25.910 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 48ms
>12-13 08:51:25.946 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 36ms
>12-13 08:51:26.033 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 87ms
>12-13 08:51:26.126 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 93ms
>12-13 08:51:26.192 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 66ms
>12-13 08:51:26.225 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 33ms
>12-13 08:51:26.275 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 50ms
>12-13 08:51:26.357 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:26.440 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 83ms
>12-13 08:51:26.522 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:26.589 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 67ms
>12-13 08:51:26.640 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 50ms
>12-13 08:51:26.721 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 82ms
>12-13 08:51:26.826 2968-2968/io.dev.videosample D/FFmpegRecordActivity: Preview frame interval: 105ms
>12-13 08:51:28.408 1976-4266/? E/VDO_LOG: u4FrameTsInterval value is 0x411a, u4FrameTimingInfo 0xf000
>12-13 08:51:28.421 1976-4266/? E/MtkOmxVdecEx: [0xb872bb60] ERROR: query VDEC_DRV_GET_TYPE_GET_FRAME_INTERVAL failed

最佳答案

请浏览http://androidwarzone.blogspot.in/2011/12/ffmpeg4android.html您需要根据需要检查 fps、视频分辨率。您必须使用 ffmpeg 命令的多个试验值来检查

关于java - 录制的视频失真(FFMPEG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47754884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com