① 在linux下下載了一個.rar的壓縮包,請問怎麼打開,裡面都是一些程序的源代碼
看你是什麼linux了。如果是ubuntu,可以在「添加/刪除」裡面搜索 rar。再選中結果。
注意:在「顯示」裡面選擇「所有可安裝應用程序」。
其他的linux可以上 www.rarlab.com找找看。
② 求ffmpeg音頻壓縮代碼(wav壓縮成wma)
這個簡單。大致的思路是
1.打開wav文件
2.打開要輸出的wma文件
3.不停的讀取數據幀
4.讀取以後解碼並寫入wma
5.關閉wav文件
6.關閉wma文件
重新寫例子太麻煩貼點代碼吧
#include "Debug.h"
#include "FFMpegAVFileReader.h"
#include "FFMpegAVFileReaderFactory.h"
#include <sstream>
#include "yk_convert.h"
static char h264_head[4] = {(char)0x00,(char)0x00,(char)0x00,(char)0x01};
namespace YK
{
FFMpegAVFileReader::FFMpegAVFileReader()
{
ffmpeg_avcodec_init();
ffmpeg_av_register_all();
av_log_set_callback(ffmpeg_log_callback);
m_format_context = 0;
m_input_format = 0;
m_format_parameters = 0;
m_packet = (AVPacket*)av_mallocz(sizeof(AVPacket));
}
FFMpegAVFileReader::~FFMpegAVFileReader()
{
Close();
av_free(m_packet);
}
avfile_reader_param_t* FFMpegAVFileReader::GetParam()
{
//YK::AutoLock l(m_lock);
return &m_param;
}
void FFMpegAVFileReader::Seek(int pts)
{
YK::AutoLock l(m_lock);
int ret = av_seek_frame(m_format_context,-1,(YK::int64_t)pts * (YK::int64_t)1000,AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY);
//if(ret >= 0)
//{
// for(int i = 0; i < m_format_context->nb_streams; i++)
// {
// avcodec_flush_buffers( m_format_context->streams[i]->codec );
// }
//}
//std::stringstream ss;
//ss << "pts = " << pts
// << " ret = " << ret << std::endl;
//OutputDebugString(ss.str().data());
}
void FFMpegAVFileReader::GetDuration(double& start,double& end)
{
//YK::AutoLock l(m_lock);
start = (double)(m_start_time / 1000000);
end = start + (double)(m_ration / 1000000);
}
service_error_t FFMpegAVFileReader::Open(int time_out)
{
YK::AutoLock l(m_lock);
service_error_t service_error;
// 打開文件
if (av_open_input_file(&m_format_context,TToANSI(m_param.input_file_path).data(),m_input_format,0,m_format_parameters) < 0)
{
service_error.init(service_error_type_failed,"av_open_input_file failed");
return service_error;
}
// 查詢流信息
if(av_find_stream_info(m_format_context) < 0)
{
service_error.init(service_error_type_failed,"av_find_stream_info failed");
return service_error;
}
m_start_time = m_format_context->start_time;
m_ration = m_format_context->ration;
#ifdef _DEBUG
pFile = fopen("D:/1.out","w+b");
#endif
// 保存流信息
av_stream_info_t av_stream_info;
for(unsigned int i = 0; i < m_format_context->nb_streams; i++)
{
AVStream *st = m_format_context->streams[i];
AVCodecContext *enc = st->codec;
if(enc->codec_type == AVMEDIA_TYPE_AUDIO)
{
// 音頻
av_stream_info.av_stream_info_type = av_stream_info_type_audio;
av_stream_info.codec_id = codec_id_none;
//channel_layout = enc->channel_layout;
av_stream_info.audio_channels = enc->channels;
av_stream_info.audio_samplepersec = enc->sample_rate;
av_stream_info.audio_bitpersample = yk_sample_format(enc->sample_fmt);
//audio_sample_fmt = enc->sample_fmt;
//input_codecs[nb_icodecs++] = avcodec_find_decoder_by_name(audio_codec_name);
av_stream_info.codec_id = yk_code_id(enc->codec_id);
av_stream_info.extradata_size = enc->extradata_size;
if(av_stream_info.extradata_size)
memcpy(av_stream_info.extradata,enc->extradata,enc->extradata_size);
if(av_stream_info.codec_id == codec_id_mp3)
{
av_stream_info.extradata_size = sizeof(mpeg1_waveformat_extradata);
mpeg1_waveformat_extradata* pMpeg1WaveFormat = (mpeg1_waveformat_extradata*)av_stream_info.extradata;
pMpeg1WaveFormat->dwHeadBitrate = enc->bit_rate;
pMpeg1WaveFormat->dwPTSHigh = 0;
pMpeg1WaveFormat->dwPTSLow = 0;
pMpeg1WaveFormat->fwHeadFlags = 25;
pMpeg1WaveFormat->fwHeadLayer = ACM_MPEG_LAYER3;
pMpeg1WaveFormat->fwHeadMode = ACM_MPEG_STEREO;
pMpeg1WaveFormat->fwHeadModeExt = 1;
pMpeg1WaveFormat->wHeadEmphasis = 1;
}
AddStreamInfo(av_stream_info);
m_stream_audio_index = i;
}
else if(enc->codec_type == AVMEDIA_TYPE_VIDEO)
{
// 視頻
av_stream_info.av_stream_info_type = av_stream_info_type_video;
av_stream_info.codec_id = codec_id_none;
av_stream_info.video_width = enc->width;
av_stream_info.video_height = enc->height;
av_stream_info.video_profile = enc->profile;
av_stream_info.video_level = enc->level;
if(av_stream_info.video_profile < 0)
{
av_stream_info.video_profile = 77;
}
if(av_stream_info.video_level < 0)
{
av_stream_info.video_level = 30;
}
av_stream_info.extradata_size =
③ 基於哈夫曼樹的文件壓縮/解壓程序 源代碼
哈夫曼的C++演算法
#define INT_MAX 10000
#define ENCODING_LENGTH 1000
#include "stdio.h"
#include "string.h"
#include "malloc.h"
typedef enum{none,left_child,right_child} Which;//標記是左孩子還是右孩子
typedef char Elemtype;
typedef struct TNode{
Elemtype letter;
int weight;
int parent;
Which sigh;
char *code;
}HTNode,*HuffmanTree;
int n;
char coding[50];//儲存代碼
char str[ENCODING_LENGTH];//保存要翻譯的句子
void InitTreeNode(HuffmanTree &HT)
{//初始前N個結點,後M-N個結點置空
int i;int w;char c;
int m=2*n-1;
HuffmanTree p;
HT=(HuffmanTree)malloc((m)*sizeof(HTNode));
printf("input %d database letter and weight",n);
p=HT;
getchar();
for (i=1;i<=n;i++){
scanf("%c%d",&c,&w);
p->code='\0';
p->letter=c;
p->parent=0;
p->sigh=none;
p->weight=w;
p++;
getchar();
}
for (;i<=m;i++,p++){
p->code='\0';
p->letter=' ';
p->parent=0;
p->sigh=none;
p->weight=0;
}
}//INITTREENODE
void Select(HuffmanTree HT,int end,int *s1,int *s2)
{//在0~END之間,找出最小和次小的兩個結點序號,返回S1,S2
int i;
int min1=INT_MAX;
int min2;
for (i=0;i<=end;i++){//找最小的結點序號
if (HT[i].parent==0&&HT[i].weight<min1){
*s1=i;
min1=HT[i].weight;
}
}
min2=INT_MAX;
for(i=0;i<=end;i++){//找次小結點的序號
if (HT[i].parent==0&&(*s1!=i)&&min2>HT[i].weight){
*s2=i;
min2=HT[i].weight;
}
}
}
void HuffmanTreeCreat(HuffmanTree &HT)
{//建立HUFFMAN樹
int i;int m=2*n-1;
int s1,s2;
for(i=n;i<m;i++){
Select(HT,i-1,&s1,&s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[s1].sigh=left_child;
HT[s2].sigh=right_child;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
}
void HuffmanTreeCode(HuffmanTree HT)
{//HUFFMAN解碼
int i;
char *temp;
temp=(char *)malloc(n*sizeof(char));
temp[n-1]='\0';
int p;int s;
for (i=0;i<n;i++){
p=i;
s=n-1;
while (HT[p].parent!=0){//從結點回溯,左孩子為0,右孩子為1
if (HT[p].sigh==left_child)
temp[--s]='0';
else if (HT[p].sigh==right_child)
temp[--s]='1';
p=HT[p].parent;
}
HT[i].code=(char *)malloc((n-s)*sizeof(char));//分配結點碼長度的內存空間
strcpy(HT[i].code,temp+s);
printf("%s\n",HT[i].code);
}
}
void GetCodingSen(char *sencence)
{//輸入要編碼的句子
int l;
gets(sencence);
l=strlen(sencence);
sencence[l]='\0';
}
void HuffmanTreeEncoding(char sen[],HuffmanTree HT)
{//將句子進行編碼
int i=0;int j;
while(sen[i]!='\0'){
for(j=0;j<n;j++){
if (HT[j].letter==sen[i]) //字母吻合則用代碼取代
{strcat(coding,HT[j].code);
break;
}
}
i++;
if (sen[i]==32) i++;
}
printf("\n%s",coding);
}
void HuffmanTreeDecoding(HuffmanTree HT,char code[])
{//HUFFMAN解碼過程,將代碼翻譯為句子
char sen[100];
char temp[50];
char voidstr[]=" ";
int i;int j;
int t=0;int s=0;
for(i=0;i<strlen(code);i++){
temp[t++]=code[i];
for(j=0;j<n;j++){
if (strcmp(HT[j].code,temp)==0){//代碼段吻合
sen[s]=HT[j].letter;s++;
strcpy(temp,voidstr);//將TEMP置空
t=0;
break;
}
}
}
printf("\n%s",sen);
}
void main()
{
HTNode hnode;
HuffmanTree huff;
huff=&hnode;
printf("input the letter for coding number\n");
scanf("%d",&n);
InitTreeNode(huff);
HuffmanTreeCreat(huff);
HuffmanTreeCode(huff);
GetCodingSen(str);
HuffmanTreeEncoding(str,huff);
HuffmanTreeDecoding(huff,coding);
}
④ 像JQuery那樣的源碼文件是使用什麼軟體壓縮的
1)Uglify http://lisperator.net/uglifyjs/
自從jQuery等流行庫使用Uglify作為壓縮工具,Uglify慢攔神慢流行起來,如今也是很多開發工具(框架)默認使用的Js壓縮棚衡亮工具,比鏈寬如網路的Fis以及絕大部分的Yeoman腳手架等。YUI Compressor也逐漸被Uglify所替代。
Uglify的壓縮策略較為安全,所以不會對源代碼進行大幅度的改造,壓縮相對較為保守。所以將通過Uglify壓縮後的代碼格式化之後,還是大致能看明白。
⑤ Linux怎麼安裝.tar.gz軟體
通常情況下,.tar.gz 文件是一種源代碼分發格式,需要編譯和安裝。下面是安裝.tar.gz軟體的一般步驟:
下載軟體包:從官網或者其他可靠來源下載軟體包。
解壓縮軟體包:帆宴打開襲轎終端,進入軟體包所在目錄,使用以下命令解壓縮軟體包:
javaCopy codetar -zxvfpackage.tar.gz這將會在當前目錄下解壓出一個新的目錄。
進入解壓出來的目錄:使用 cd 命令進入解壓出來的目錄。
配置:態禪銀使用以下命令進行配置:
bashCopy code./configure配置選項可能因軟體包而異,有些軟體包可能不需要配置。
編譯:使用以下命令進行編譯:
goCopy codemake這個過程可能需要一些時間,取決於軟體包的大小和復雜度。
安裝:使用以下命令進行安裝:
goCopy codemakeinstall安裝後,可以在系統上使用該軟體。
注意:以上步驟只是一般步驟,不同軟體包可能需要不同的步驟和配置。在安裝前,最好先查看軟體包的官方文檔或者 README 文件,以獲取更詳細的安裝說明。
⑥ 求高手幫忙 c++編寫解壓 壓縮文件 代碼!加密 解密 代碼
//由於字數限制,下述代碼有刪節,如需完整代碼,請直接訪//問gdgzzch.blog.163.com
//霍夫曼樹,又稱哈夫曼數,huffman樹
//-----------------------------------------------------------------------------
//huffmantreemain.cpp
//主界面
#include "huffmantree.h"
#include <fstream.h>
#include <conio.h>
#include "compress1.h"
#include "Ceshi.h"
void menu()
{
cout<<endl;
cout<<"\t\t *** 操作菜單 ***\n\n";
cout<<"\t\t\t 1 壓縮文件\n";
cout<<"\t\t\t 2 解壓文件\n";
cout<<"\t\t\t 3 測試\n";
cout<<"\t\t\t 0 退出\n\n\n\n";
return;
}
int main()
{
char meiyong;
cout<<"\n\n\n\n\n\n\n\n\n"
<<"\t &*************** 壓縮軟體 **************&\n"
<<"\t * *\n"
<<"\t * *\n"
<<"\t * *\n\n\n"
<<"\t * 運行本軟體之前,請務必仔細閱讀使用指南 *"
<<"\n\n\n\n\n\n\n\n\n\n";
cin.unsetf(ios::skipws);
cin>>meiyong;
cin.setf(ios::skipws);
ifstream fin("使用說明.txt",ios::binary);
fin.unsetf(ios::skipws);
while(fin>>meiyong)
{
cout<<meiyong;
}
cout<<endl;
getch();
fin.setf(ios::skipws);
fin.close();
cout<<"\n\n\n\n\n\n";
cout<<"\n";
cout<<"\t\t*-------------------------------------------*\n";
cout<<"\t\t * 實驗六: 霍夫曼樹的應用 * \n";
cout<<"\t ******* *******\n";
cout<<"\t\t * 作者: gdgzzch 學號: 15201314 *\n";
cout<<"\t\t*-------------------------------------------*\n\n";
cout<<"\t\t 2005.11.16\n\n";
menu();
int choice;
cout<<"請選擇操作: ";
cin>>choice;
while(1)
{
switch(choice)
{
case 1:
Compress();
break;
case 2:
Decompress();
break;
case 3:
Ceshi();
break;
case 0:
cout<<"\n\n\t\t********* 謝謝您使用本軟體,再見! ***********\n\n\n\n";
return 1;
default:
cout<<"無此操作!\n\n";
}
cout<<endl<<"請選擇操作: ";
cin>>choice;
}
return 1;
}
//----------------------------------------------------------
//compress1.h
//壓縮
#ifndef COMPRESS
#define COMPRESS
#include "huffmantree.h"
#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
//壓縮函數
void Compress()
{
unsigned char ch;
int i,j,k;
int Charnum[256];//
unsigned char Chars[256]; //與下面共同使用 ,記錄字元
int Charnums[256]; //記錄對應字元的個數
int CharKinds; //字元種數
char filenameorg[21]; //文件名不超過20個字元 源文件名
char filenameaim[21]; //目標文件名
int fileorgsize; //源文件大小
int fileaimsize; //壓縮文件大小
HuffmanTree<unsigned char> ht;
CharNameNode NameNode[256]; //存儲字元對應的霍夫曼編碼
BinTreeNode<unsigned char> *btn=NULL;
Code *first=NULL;
Code *last=NULL;
ifstream filein;
ofstream fileout;
cout<<"請輸入你要壓縮的文件的名字:";
cin>>filenameorg;
filein.open(filenameorg,ios::nocreate|ios::binary); //open:filenameorg
if(!filein)
{
cout<<filenameorg<<" 不存在!\n";
filein.clear();
return;
}
cout<<"請輸入你的壓縮文件的名字(*.HFM):"; //以後再用
cin>>filenameaim;
char filetype[5];
int len;
len=strlen(filenameaim);
if(len<=4)
{
cout<<filenameaim<<"文件的擴展名必須為HFM\n";
return ;
}
for(i=len-1,j=3;i>=len-4;i--,j--)
filetype[j]=filenameaim[i];
filetype[4]='\0';
if(strcmp(filetype,".HFM")!=0)
{
cout<<filenameaim<<"文件的擴展名必須為HFM\n";
return ;
}
// ******************************************************
for(i=0;i<256;i++)
{
Charnum[i]=0; //記錄每一個字元的個數
Charnums[i]=0; //記錄字元Char[i]的個數
}
filein.unsetf(ios::skipws);
fileorgsize=0; //計算源文件大小
while(filein>>ch)
{
Charnum[unsigned int(ch)]++; //統計每種字元的頻數
fileorgsize++;
}
filein.setf(ios::skipws);
filein.close(); //close:filenameorg
// ******************************************************
j=0;
for(i=0;i<256;i++)
{
if(Charnum[i])
{
Chars[j]=unsigned char(i); //統計源文件中存在的字元的
Charnums[j]=Charnum[i];
j++;
}
}
CharKinds=j;
// ******************************************************
fileaimsize=0; //計算壓縮文件大小
fileout.open(filenameaim,ios::binary);
fileout<<'0'<<' '; //非法位數(之後修改)
fileout<<filenameorg<<' ';
fileout<<CharKinds<<' '; //存入字元種類
fileaimsize+=7;
for(i=0;i<CharKinds;i++)
{
fileout<<Chars[i]<<' '<<Charnums[i]<<' ';//將字元信息存入臨時文件
fileaimsize+=10;
}
ht.Build(Charnums,Chars,CharKinds,ht); //建立霍夫曼樹
i=0;
ht.Path(ht.GetRoot(),first,last,NameNode,i); //搜索霍夫曼樹求得字元對應的霍夫曼編碼
// ***********************************************************
filein.open(filenameorg,ios::nocreate|ios::binary);
filein.unsetf(ios::skipws);
k=0;
j=0;
while(filein>>ch)
{
i=0;
while(ch!=NameNode[i].charname) //找到ch
i++;
Code *p=NameNode[i].link;
while(p!=NULL)
{
j<<=1;
j+=p->code;
k++;
if(k==8)
{
fileout<<unsigned char(j);
fileaimsize++; //計算壓縮文件大小
k=0;
j=0;
}
p=p->link;
}
}
filein.setf(ios::skipws);
filein.close();
if(k<8)
{
j<<=(8-k);
fileout<<unsigned char(j);
fileaimsize++; //計算壓縮文件大小
}
fileout.seekp(0,ios::beg);
fileout<<8-k; //修改非法代碼的位數
fileout.close();
for(i=0;i<CharKinds;i++)
{
Code *q=NameNode[i].link;
Code *s=NULL;
while(q!=NULL)
{
s=q;
q=q->link;
delete s;
}
NameNode[i].link=NULL; //清除鏈表信息
}
ht.Destroy();
cout<<"文件壓縮成功!壓縮率為:"<<(fileaimsize*100)/fileorgsize<<'%'<<endl;
return;
}
void Decompress()
{
unsigned char ch;
int i,j,k;
unsigned char Chars[256]; //與下面共同使用 ,記錄字元
int Charnums[256]; //記錄對應字元的個數
int CharKinds; //字元種數
unsigned int total; //記錄字元轉化後的數
int fpend; //暫存文件指針的最後位置
char filenameorg[21]; //文件名不超過20個字元 源文件名
char filenameaim[21]; //目標文件名
HuffmanTree<unsigned char> ht;
CharNameNode NameNode[256]; //存儲字元對應的霍夫曼編碼
BinTreeNode<unsigned char> *btn=NULL;
Code *first=NULL;
Code *last=NULL;
ifstream filein;
ofstream fileout;
char filetype[5];
int len;
cout<<"請輸入你要解壓的文件的名字:";
cin>>filenameorg;
len=strlen(filenameorg);
if(len<=4)
{
cout<<filenameorg<<"不是霍夫曼編碼的程序,不能解壓!\n";
return ;
}
for(i=len-1,j=3;i>=len-4;i--,j--)
filetype[j]=filenameorg[i];
filetype[4]='\0';
if(strcmp(filetype,".HFM")!=0)
{
cout<<filenameorg<<"不是霍夫曼編碼的程序,不能解壓!\n";
return ;
}
filein.open(filenameorg,ios::nocreate|ios::binary);
if(!filein)
{
cout<<filenameorg<<" 不存在!\n";
filein.clear();
return;
}
filein.close();
/* cout<<"請輸入你解壓後的文件的名字:";
cin>>filenameaim;*/
filein.open(filenameorg,ios::nocreate|ios::binary);
if(!filein)
{
cout<<"解壓失敗,請重試!\n";
filein.clear();
return;
}
filein.seekg(0,ios::end);
fpend=filein.tellg(); //記錄文件尾的位置
filein.seekg(0,ios::beg); //恢復
filein.unsetf(ios::skipws);
filein>>k>>ch; //最後一個字元不合法的位數
filein>>filenameaim>>ch;
filein>>CharKinds>>ch;
for(i=0;i<CharKinds;i++)
filein>>Chars[i]>>ch>>Charnums[i]>>ch; //載入字元信息
ht.Build(Charnums,Chars,CharKinds,ht); //建立霍夫曼樹
btn=ht.GetRoot();
fileout.open(filenameaim,ios::binary); //以文本文件打開
if(!fileout)
{
cout<<"目標文件創建失敗,請重試!\n";
fileout.clear();
return;
}
while(filein>>ch)
{
total=(unsigned int)(ch); //這里都是正確的
j=0;
if(filein.tellg()==fpend) //到了文件尾
j=k; //留k位不輸出
for(i=7;i>=j;i--)
{
if(total&(1<<i)) //這一位是1向右子樹走
btn=btn->GetRight();
else
btn=btn->GetLeft();
// if(btn->GetData()!=0)
if(btn->GetLeft()==NULL&&btn->GetRight()==NULL)
{
fileout<<btn->GetData();
btn=ht.GetRoot();
}
}
}
fileout.close();
filein.setf(ios::skipws);
filein.close();
ht.Destroy();
cout<<"解壓成功!\n";
cout<<"保存在\""<<filenameaim<<"\"中."<<endl;
return;
}
#endif