VBSを使用してローカルファイルを参照する3つの方法、フルパスを取得する
2022-02-07 17:02:16
システムの構成要素が異なるため、コードも異なります。
XPの場合。
#include <jni.h>
#include <android/log.h>
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/avutil.h"
#include "libavutil/rational.h"
#include "libavutil/mathematics.h"
#include "libswscale/swscale.h"
#include "libavutil/opt.h"
#include "libavutil/mem.h"
#include "libavutil/fifo.h"
#include "libavdevice/avdevice.h"
#define LO
#define ERRCODE(a) (-10000-a)
static int rv;
static int split(const char* filepath,const char* outpath,int begin/*seconds*/,int end/*seconds*/);
#define TAG "myhello-jni-test" // This is the custom LOG's identifier
#define LOGD(...) {__android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) // Define LOGD type
JNIEXPORT void JNICALL Java_com_yiche_lecargemproj_VideoEditActivity_setModify (JNIEnv *env, jobject thiz,jint a,jint b, jstring origin, jstring end)
{
//clip the video
int ret;
const char* strin;
const char* strout;
strin = (*env)->GetStringUTFChars(env,origin,NULL);
if(strin == NULL) {
return; /* OutOfMemoryError already thrown */
}
strout = (*env)->GetStringUTFChars(env,end,NULL);
if(strout == NULL) {
return; /* OutOfMemoryError already thrown */
}
//LOGD("outfile = %s",strout);
ret = split(strin,strout,(int)a,(int)b);
//LOGD("return value = %d",ret);
rv = (ret == 0)?1:0;
(*env)->ReleaseStringUTFChars(env,origin, strin);
(*env)->ReleaseStringUTFChars(env,end, strout);
}
JNIEXPORT jint JNICALL Java_com_yiche_lecargemproj_VideoEditActivity_getResult(JNIEnv *env, jobject thiz)
{
// return status when video editing is done, 1: success, 0: failure
return (jint)rv;
}
int split(const char* filepath,const char* outpath,int begin/*seconds*/,int end/*seconds*/)
{
AVFormatContext* ifmtctx = NULL;
AVCodecContext* vcdcctx = NULL;
AVCodecContext* acdcctx = NULL;
AVCodec* vcdc = NULL;
AVCodec* acdc = NULL;
AVFrame* afrm = NULL;
AVFrame* vfrm = NULL;
AVPacket pkt;
AVFormatContext* ofmtctx = NULL;
AVOutputFormat* ofmt = NULL;
AVIOContext* ioctx = NULL;
AVStream* ovStm = NULL;
AVStream* oaStm = NULL;
int width;
int height;
int fin;
int vndx;
int andx;
int frmrate;
int start_frmnum;
int end_frmnum;
int frm_counter;
int bsave;
int rt = 0;
av_register_all();
avcodec_register_all();
//LOGD("infile = %s,outfile = %s,begin = %d,end = %d",filepath,outpath,begin,end);
//LOGD("avcodec_version = %d",avcodec_version());
ifmtctx = avformat_alloc_context();
if(rt = avformat_open_input(&ifmtctx,filepath,NULL,NULL) ! = 0)
{
//LOGD("Couldn't open file : %d(%s)", rt , buf);
return rt;
}
//LOGD("avformat_open_input");
if(avformat_find_stream_info(ifmtctx,NULL) < 0)
{
return ERRCODE(2);
}
//LOGD("avformat_find_stream_info");
vndx = -1;
andx = -1;
int i = 0;
for(i = 0 ; i < ifmtctx->nb_streams ; i++)
{
if(ifmtctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO
&& vndx == -1)
{
vndx = i;
}
if(ifmtctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO
&& andx == -1)
{
andx = i;
}
}
if(vndx ! = -1)
{
vcdcctx = ifmtctx->streams[vndx]->codec;
vcdc = avcodec_find_decoder(vcdcctx-> codec_id);
if(vcdc == NULL)
{
return ERRCODE(3);
}
if(avcodec_open2(vcdcctx,vcdc,NULL) ! = 0)
{
return ERRCODE(4);
}
vfrm = av_frame_alloc();
width = vcdcctx->width;
height = vcdcctx->height;
}
if(andx ! = -1)
{
acdcctx = ifmtctx->streams[andx]->codec;
acdc = avcodec_find_decoder(acdcctx->codec_id);
if(acdc == NULL)
{
return ERRCODE(5);
}
if(avcodec_open2(acdcctx,acdc,NULL) ! = 0)
{
return ERRCODE(6);
}
afrm = av_frame_alloc();
}
frmrate = vcdcctx->framerate.num / vcdcctx->framerate.den;
start_frmnum = frmrate*begin;
end_frmnum = frmrate*end;
frm_counter = 0;
bsave = -1;
ofmtctx = avformat_alloc_context();
ofmt = av_guess_format("mp4",NULL,NULL);
ofmtctx->oformat = ofmt;
//add video stream
ovStm = avformat_new_stream(ofmtctx,0);
oaStm = avformat_new_stream(ofmtctx,0);
avcodec_copy_context(ovStm->codec,vcdcctx);
avcodec_copy_context(oaStm->codec,acdcctx);
/*ovStm->codec->codec_id = vcdcctx->codec_id;
ovStm->codec->codec_type = vcdcctx->codec_type;
ovStm->codec->bit_rate = vcdcctx->bit_rate;
ovStm->codec->time_base = vcdcctx->time_base;
ovStm->codec->ticks_per_frame = vcdcctx->ticks_per_frame;
ovStm->codec->pix_fmt = vcdcctx->pix_fmt;
ovStm->codec->width = vcdcctx->width;
ovStm->codec->height = vcdcctx->height;
ovStm->codec->has_b_frames = vcdcctx->has_b_frames;
oaStm->codec->channel_layout = av_get_default_channel_layout(1);
oaStm->codec->channels = acdcctx->channels;
oaStm->codec->bit_rate = acdcctx->bit_rate;
oaStm->codec->sample_rate = acdcctx->sample_rate;
oaStm->codec->sample_fmt = acdcctx->sample_fmt;*/
ovStm->codec->codec_tag = 0;
oaStm->codec->codec_tag = 0;
if (ofmtctx->oformat->flags & AVFMT_GLOBALHEADER)
{
ovStm->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
oaStm->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
if(avio_open2(&ofmtctx->pb,outpath,AVIO_FLAG_WRITE,NULL,NULL) < 0)
{
return ERRCODE(7);
}
//LOGD("avio_open2");
avformat_write_header(ofmtctx,NULL);
//LOGD("avformat_write_header");
av_init_packet(&pkt);
pkt.data = NULL;
pkt.size = 0;
while(av_read_frame(ifmtctx,&pkt) >= 0)
{
if(pkt.stream_index == vndx)
{
if((frm_counter >= start_frmnum) && (pkt.flags & AV_PKT_FLAG_KEY) && (bsave == -1))
{
bsave = 1;
}
if(frm_counter > end_frmnum)
{
bsave = 2;
goto quit;
}
frm_counter++;
}
if(bsave == 1)
{
AVStream *in_stream = ifmtctx->streams[pkt.stream_index];
AVStream *out_stream = ofmtctx->streams[pkt.stream_index];
pkt.pts = av_rescale_q_rnd(pkt.pts , in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF );
pkt.dts = av_rescale_q_rnd(pkt.dts , in_stream->time_base, out_stream->time_base, AV_ROUND_NEAR_INF );
pkt.duration = av_rescale_q(pkt.duration
Windows 2003の場合は「Under 2003」。
安卓makefile:
ブラウザからのアプローチ
# Copyright (C) 2009 The Android Open Source Project
#
# lizenziert unter der Apache License, Version 2.0 (die "Lizenz");
# Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.
# Sie können eine Kopie der Lizenz erhalten unter
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird Software
# die unter dieser Lizenz vertrieben wird, auf einer "AS IS" BASIS vertrieben,
# OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend.
# Siehe die Lizenz für den spezifischen Wortlaut, der die Erlaubnisse und
# Einschränkungen unter der Lizenz.
#
LOCAL_PATH := $(call my-dir)
einschließen $(CLEAR_VARS)
PATH_TO_FFMPEG_SOURCE:=$(LOCAL_PATH)/ffmpeg
LOCAL_C_INCLUDES += /home/a/android-ndk-r9/sources/ffmpeg-2.6.2/include/
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libavutil libswscale libswresample libc libz
LOCAL_LDLIBS :=-llog
LOCAL_MODULE := video
LOCAL_SRC_FILES := video.c
einschließen $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.6.2/android/arm)
あなたは、上記のコードが使用することはできませんが、利用可能な共有するスクリプトホームエディタをああ、ここに実行することは容易ではないことがわかりました参照または良い、今、プラットフォームが原因するために喜んで、それはこれらのコードが利用可能であることが判明していることを学びます。
Function ChooseFile()
Dim Result
Result = ""
Dim IE : Set IE = CreateObject("InternetExplorer.)
With IE
.Visible = False
.Navigate("about:blank")
Do Until .ReadyState = 4 : Loop
With .Document
.Write "<html><body><input id='f' type='file'></body></html>"
With .All.f
.Focus
.Click
Result = .Value
End With
End With
.Quit
End With
Set IE = Nothing
ChooseFile = Result
End Function
ChooseFile
さて、今回はvbsのローカルファイル選択関数についてのコードを紹介します。
関連
-
管理者権限でbatファイルを自動実行(vbsとbatの2つの方法)
-
vbsによるテキストループの読み込み
-
vbscriptの基本 - vbs変数の定義と使用法
-
VBSでスペースを含むパスを解決する3つの方法
-
CPU使用率を取得するVBScriptメソッド
-
vbscriptを用いた36ビット自動増加数生成コード
-
Iisext.vbsを使ってWebサービスの拡張機能を一覧表示する方法
-
iisext.vbsを使用してアプリケーションの依存関係を追加する方法
-
iisext.vbsでアプリケーションを有効にする方法
-
Iisftpdr.vbs による FTP 仮想ディレクトリの削除 (ローカルおよびリモートサポート)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン