<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      FFmpeg開發筆記(五十七)使用Media3的Transformer加工視頻文件

      ?繼音視頻播放器ExoPlayer之后,谷歌又推出了音視頻轉換器Transformer,要在音視頻加工領域施展拳腳。根據Android開發者官網介紹:Jetpack Media3是Android媒體庫的新家,可讓App呈現豐富的視聽體驗。Media3提供了一個簡單的架構,能夠基于設備功能開展自定義與可靠性優化,可以解決媒體部分的碎片化問題。

      Transformer作為Media3架構中的轉換組件,可以用于編輯加工音視頻,包括在不同格式之間轉換編碼與修改媒體內容,例如從較長的視頻剪輯片段、或者應用自定義的濾鏡效果,以及其他音視頻編輯操作等等。
      谷歌官方也提供了Transformer的代碼應用例子,示例源碼的托管地址為https://github.com/androidx/media/tree/release/demos,托管頁面打開之后訪問transformer目錄,即可找到Transformer組件的實際運用模塊代碼。
      因為Transformer被Media3囊括在內,所以它對運行環境要求頗高,具體環境要求參見之前的文章《使用Media3的Exoplayer播放網絡視頻》。準備好了開發環境之后,再按照以下描述引入Media3的ExoPlayer庫,詳細步驟說明如下。

      一、修改模塊的build.gradle

      在build.gradle的dependencies節點內部補充下面的導包語句,把Transformer用到的相關庫都加進來。

      implementation "androidx.media3:media3-transformer:1.4.0"
      implementation "androidx.media3:media3-effect:1.4.0"
      implementation "androidx.media3:media3-common:1.4.0"

      二、活動頁面代碼增加Transformer的處理代碼

      首先創建音視頻的時間處理效果,比如下面代碼構建了一個剪輯視頻片段的媒體項目,準備把視頻文件的第10秒到第20秒單獨剪輯出來。

      MediaItem.ClippingConfiguration clippingConfiguration =
        new MediaItem.ClippingConfiguration.Builder()
          .setStartPositionMs(10_000) // start at 10 seconds
          .setEndPositionMs(20_000) // end at 20 seconds
          .build();
      MediaItem mediaItem = new MediaItem.Builder()
          .setUri(mVideoUri)
          .setClippingConfiguration(clippingConfiguration)
          .build();

      接著創建音視頻的空間處理效果,包括旋轉、縮放視頻畫面等等,并對上一步的媒體項目運用指定的空間效果。創建代碼如下:

      ScaleAndRotateTransformation rotateEffect =
        new ScaleAndRotateTransformation.Builder()
          //.setRotationDegrees(90f)
          .setScale(0.5f, 0.5f)
          .build();
      Effects effects = new Effects(
          ImmutableList.of(),
          ImmutableList.of(rotateEffect)
      );
      EditedMediaItem editedMediaItem =
        new EditedMediaItem.Builder(mediaItem)
          .setEffects(effects)
          .build();

      然后按照以下代碼構建轉換器對象,指定輸出視頻格式為H265,輸出音頻格式為AAC,并且監聽轉換操作的結束事件和失敗事件。構建代碼如下:

      Transformer transformer = new Transformer.Builder(this)
          .setVideoMimeType(MimeTypes.VIDEO_H265)
          .setAudioMimeType(MimeTypes.AUDIO_AAC)
          .addListener(new Transformer.Listener() {
              @Override
              public void onCompleted(Composition composition, ExportResult exportResult) {
                  Toast.makeText(mContext, "轉換成功", Toast.LENGTH_SHORT).show();
              }
      
              @Override
              public void onError(Composition composition, ExportResult exportResult, ExportException exportException) {
                  Toast.makeText(mContext, "轉換失敗", Toast.LENGTH_SHORT).show();
                  Log.d(TAG, "exportException: "+exportException.toString());
              }
          })
          .build();

      最后填寫輸出文件的保存路徑,調用轉換器對象的start方法,開始執行音視頻轉換動作。轉換代碼如下:

      String outputPath = mPath + DateUtil.getNowDateTime() + ".mp4";
      transformer.start(editedMediaItem, outputPath);

      編譯運行App,即可在真機上選取視頻文件并執行對應的編輯加工操作。

      更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。

       

      ?
      posted @ 2024-10-16 14:31  aqi00  閱讀(610)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本高清色WWW在线安全| 免费一级黄色好看的国产| 99精品久久久中文字幕| 超清无码一区二区三区| 久久精品国产成人午夜福利| 又色又爽又黄18禁美女裸身无遮挡 | 中文字幕无码视频手机免费看 | 国产一区二区三区小说| 99国产午夜福利在线观看| 日韩精品一区二区三区激情视频| 韩国无码av片在线观看| 久久精品噜噜噜成人av| 无码专区 人妻系列 在线| 亚洲欧美综合中文| 性饥渴少妇AV无码毛片| 四虎在线永久免费看精品| 日韩乱码人妻无码中文字幕视频 | 日本五十路熟女一区二区| 日本大片在线看黄a∨免费| 国产一区二区三区十八禁| 国产精品天干天干综合网| 亚洲三区在线观看无套内射| 高清免费毛片| 亚洲精品国产一区二区三区在线观看| 国内不卡一区二区三区| 色综合色狠狠天天综合网| 国产黄大片在线观看画质优化 | 国产馆在线精品极品粉嫩| 人人人澡人人肉久久精品| 国产成人亚洲精品成人区| 漂亮人妻中文字幕丝袜| 新绛县| 国产精品免费观看色悠悠| 蜜芽久久人人超碰爱香蕉| 成在线人视频免费视频| 亚洲暴爽av人人爽日日碰| 亚洲 a v无 码免 费 成 人 a v| 国产熟女50岁一区二区| 欧产日产国产精品精品| 亚洲综合伊人久久大杳蕉| 国产稚嫩高中生呻吟激情在线视频|