标签: transcode

FFMPEG 2视频转码并在1帧中并排?

我有2个视频:HEADSHOT.MOV和SCREEN.MOV.它们都是大文件,我希望缩小(大小,比特率​​等)并将这两个并排放置在同一个非常宽的视频帧中.最终的结果是,当您播放output_video.mp4时,您将拥有一个非常宽的帧,两个视频同步并以相同的速率播放.

这是我想要做的合成不正确的版本:

ffmpeg -i HEADSHOT.MOV -t 00:02:00 -acodec libfaac -ab 64k -vcodec libx264 -r 30 -pass 1 -s 374x210 -vf "movie=SCREEN.MOV [small]; [in][small] -an -r 30 -pass 1 -s 374x210 overlay=10:10 -t 00:02:00 [out]" -threads 0 output_movie.mp4
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我也尝试将测试电影的持续时间设置为2分钟,这引出了另一个问题:处理2部不同长度的电影的最佳方式是什么(如果它们很接近)?

到目前为止我发现有用的资源是:

多个视频源合并为一个

http://ffmpeg.org/ffmpeg.html#overlay-1

非常感谢任何帮助/建议.我在使用FFMPEG语法时遇到问题!谢谢!

video transcode ffmpeg

24
推荐指数
1
解决办法
2万
查看次数

以编程方式将视频转换为FLV

我目前正在开发一个Web应用程序,需要接受用户以任何格式(.avi,.mov等)上传的视频,并将它们转换为flv,以便在基于flash的播放器中播放.

由于该站点是基于OpenCms的,因此最好的解决方案是OpenCms的现成插件,允许上传和播放在后台进行转码操作的视频,但只需要一组Java类来进行转码就可以了.我可以自己制作上传表格和播放部分.

java video transcode flv opencms

19
推荐指数
3
解决办法
2万
查看次数

ffmpeg转码重置文件的开始时间

我使用分段器将我的MPEG 2 Ts文件分割成一系列用于HTTP直播的媒体段

并且每个段的开始时间跟在前一段之后(例如:段的开始时间:00:00,00:10,00:20,00:30,......)

(在Ubuntu中)

问题是:

当我使用ffmpeg转码其中一个媒体片段(ex 800k bps到200k bps)

转码媒体段的开始时间将重置为0

例如:当我转码第三段时,

开始段的时间改变为:00:00,00:10,00:00,00:30,...

一旦播放转码媒体片段,它会导致我的播放器冻结

有相同的开始时间转码媒体文件的解决方案吗?

我想这是ffmpeg重置段的PTS(演示时间戳)

但我不知道如何解决它...

这是我的ffmpeg命令(转码为250k bps)

============================

ffmpeg -y -i sample-03.ts -f mpegts -acodec libfaac -ar 48000 -ab 64k -vcodec libx264 -b 250k -flags +loop -cmp +chroma \
 -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 \
 -sc_threshold 40 -i_qfactor 0.71 -maxrate 250k -bufsize 250k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 \
 -qmin 10 -qmax 51 -qdiff 4 -level 30 …
Run Code Online (Sandbox Code Playgroud)

transcode ffmpeg http-live-streaming

11
推荐指数
1
解决办法
9458
查看次数

将FileInputStream和FileOutputStream传递给ffmpeg进行转码(使用JAVE-Java音频视频编码)

我试图使用调用ffmpeg的JAVE将*.mov文件转码为*.mp4文件.输入文件和输出文件都是InputStream和OutputStream形式.这意味着我需要将InputStream和OutputStream作为-f和-y parematers传递给ffmpeg.我怎么做 ?

    //Read a movfile.mov converted into a FileInputStream  
    InputStream fileInputStream = getFileInputStream();  
    OutputStream fileOutputStream = new FileOutputStrea(outputMP4File) //Output        
    Process p = Runtime.exec("ffmpeg -i - -y -");  
    InputStream pInStrm = p.getInputStream();  
    OutputStream pOutStrm = p.getOutputStream();  
    int vin = 0, vout = 0;   

    Thread read = new Thread() {  
         byte[] buff = new byte[4096];  
          void run() {   
            while ((vin=fileInputStream.read(buf))!=-1) {   
                 pOutStrm.write(buf, 0, vin);   
            }   
         }   
      }; read.start();

    Thread write = new Thread() {  
        byte[] buff = new byte[4096];  
        void run() …
Run Code Online (Sandbox Code Playgroud)

java linux windows transcode ffmpeg

6
推荐指数
1
解决办法
2075
查看次数

将SVG转码为PNG时获取空图像

我正在尝试生成一个SVG图像,然后使用Apache Batik将其转码为PNG.但是,我最终得到一个空图像,我不明白为什么.

我使用SVGDomImplementation中的Document作为我的代码转换的基础(避免将SVG写入磁盘并再次加载).这是一个例子:

  DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();
  String namespace = SVGDOMImplementation.SVG_NAMESPACE_URI;
  Document document = domImpl.createDocument(namespace, "svg", null);

  //stuff that builds SVG (and works)

  TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory());
  PNGTranscoder transcoder = new PNGTranscoder();
  transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(svgWidth));
  transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(svgHeight));

  try {
     File temp = File.createTempFile(key, ".png");
     FileOutputStream outputstream = new FileOutputStream(temp); 

     TranscoderOutput output = new TranscoderOutput(outputstream);

     transcoder.transcode(transcoderInput, output);
     outputstream.flush();
     outputstream.close();
     name = temp.getName();
  } catch (IOException ioex) {
     ioex.printStackTrace();
  } catch (TranscoderException trex) {
     trex.printStackTrace();
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是结果图像是空的,我不明白为什么.任何提示?

java transcode svg png batik

5
推荐指数
1
解决办法
3202
查看次数

将视频+音频(通过 ffmpeg)分段和转码为点播 HLS 流的精确方法?

最近我一直在摆弄 FFMPEG 和通过 Nodejs 进行流传输。我的最终目标是通过 HTTP 提供来自任何输入文件类型的转码视频流,根据分段需要实时生成。

我目前正在尝试使用 HLS 来处理这个问题。我使用输入视频的已知持续时间预先生成一个虚拟 m3u8 清单。它包含一堆指向各个恒定持续时间段的 URL。然后,一旦客户端播放器开始请求各个 URL,我就会使用请求的路径来确定客户端需要哪个时间范围的视频。然后我对视频进行转码并将该片段传输回给他们。

现在解决问题:这种方法大部分有效,但有一个小的音频错误。目前,对于大多数测试输入文件,我的代码生成的视频虽然可播放,但在每个片段的开头似乎有一个非常小的(< 0.25 秒)音频跳跃。

认为这可能是 ffmpeg 中分割使用时间的问题,其中音频流可能无法在视频的确切帧处准确地切片。到目前为止,我一直无法找到解决这个问题的方法。

如果有人有任何方向,他们可以指导我 - 甚至是解决这个用例的现有库/服务器 - 我很感谢指导。我对视频编码的了解相当有限。

我将在下面包含我的相关当前代码的示例,以便其他人可以看到我陷入困境的地方。您应该能够将其作为 Nodejs Express 服务器运行,然后将任何 HLS 播放器指向 localhost:8080/master 以加载清单并开始播放。请参阅transcode.get('/segment/:seg.ts'末尾的行,了解相关的转码位。

'use strict';
const express = require('express');
const ffmpeg = require('fluent-ffmpeg');
let PORT = 8080;
let HOST = 'localhost';
const transcode = express();


/*
 * This file demonstrates an Express-based server, which transcodes & streams a video file.
 * All transcoding is handled …
Run Code Online (Sandbox Code Playgroud)

video transcode ffmpeg node.js http-live-streaming

5
推荐指数
1
解决办法
3338
查看次数

FFMPEG:将 UHD H265 转码为 SDR H264,无颜色损失

我正在我的服务器上测试 FFMPEG。我正在尝试将 H265 10 位转码为 H264 8 位,以支持在所有主要网络浏览器上播放视频。

1 . 这是第一条命令:

ffmpeg -i 4K.ts -c:a aac -c:v h264 -crf 19 -preset ultrafast out.mp4
Run Code Online (Sandbox Code Playgroud)

结果:视频只能在 VLC 媒体播放器上播放。无法在任何浏览器上播放

2 . 然后我尝试使用这个命令:

ffmpeg -i 4K.ts -c:a aac -c:v h264 -crf 19 -profile:v main -preset ultrafast -vf "format=yuv420p" out.mp4
Run Code Online (Sandbox Code Playgroud)

结果:视频可以在任何地方播放,但颜色损失很大。

3 . 然后我尝试了另一个命令:

ffmpeg -i 4K.ts -c:a aac -c:v h264 -crf 19 -profile:v main -preset ultrafast -vf "format=yuvj420p" out.mp4
Run Code Online (Sandbox Code Playgroud)

结果:视频可以在任何地方播放,但颜色范围增加

我不知道我是否遗漏了任何内容,或者我是否应该完全禁止用户上传 10 位深度的视频。任何帮助将不胜感激

如果有人对我正在测试的视频感兴趣,请点击以下链接:https://drive.google.com/uc?export =download&id=1pGsnknkoIDRPKrW-YPFS7U31J09PeM4N

我通过许多谷歌结果得出了这些命令,其中一些是:

  1. FFMPEG 将 H265 视频从 …

video transcode command-line ffmpeg

5
推荐指数
1
解决办法
4392
查看次数

如何使用FFMPEG转码文件并在Java servlet的响应中流式传输输出文件?

基本上,这就是我要做的事情:1.用户将URL作为GET参数传递给我的servlet.2. Servlet使用ProcessBuilder将该URL中包含的媒体转换为有效的媒体格式(即:MP3).3. servlet将由FFMPEG转码的输出文件流回到浏览器.

1和2工作正常,但它是3我有问题.我能做的最好的事情是为正在转码的输出文件创建一个FileInputStream,并将其作为响应发送,但它不起作用.我的猜测是,因为我正在尝试流式传输文件.

无论如何拦截FFMPEG中的输出文件参数并将其读入InputStream?在我看来,似乎不应该难以获取输入文件A,将其转码为输出文件B,然后将输出文件B流式传输回客户端.

ProcessBuilder pb = new ProcessBuilder("ffmpeg.exe", "-i", url, "file.mp3");
    Process p = pb.start();

    final InputStream inStream = p.getErrorStream();

    new Thread(new Runnable() {

    public void run() {
            InputStreamReader reader = new InputStreamReader(inStream);
            Scanner scan = new Scanner(reader);
            while (scan.hasNextLine()) {
                System.out.println(scan.nextLine());
            }
        }
    }).start();

    ServletOutputStream stream = null;
    BufferedInputStream buf = null;
    try {

        stream = response.getOutputStream();
        File mp3 = new File(file.mp3");

        //set response headers
        response.setContentType("audio/mpeg");

        response.addHeader("Content-Disposition", "attachment; filename=file.mp3");

        response.setContentLength(-1);

        //response.setContentLength((int) mp3.length());

        FileInputStream input = new FileInputStream(mp3); …
Run Code Online (Sandbox Code Playgroud)

java transcode mp3 servlets ffmpeg

3
推荐指数
1
解决办法
3349
查看次数

发生错误:产生ENOENT,node.js和FFmpeg

我在一次噩梦中试图解决这个问题。昨天我问了一个问题,但到目前为止,长话短说,我一生无法解决。

我要做的就是在node.js应用程序中使用FFmpeg将.avi文件转码为.flv文件,这仅适用于FFmpeg的命令行,而在应用程序中无效,这是代码:

var ffmpeg = require('fluent-ffmpeg');

//make sure you set the correct path to your video file
var proc = new ffmpeg({ source: 'C:/Users/Jay/Documents/movie/drop.avi', nolog: true });

//Set the path to where FFmpeg is installed
proc.setFfmpegPath("C:\\Users\\Jay\\Documents\\FFMPEG\\bin");

proc
//set the size
//.withSize('50%') <-- error appears after this line

// set fps
//.withFps(24)

// set output format to force
//.toFormat('flv')

// setup event handlers
.on('end', function() {
    console.log('file has been converted successfully');
})
.on('error', function(err) {
    console.log('an error happened: ' + err.message); …
Run Code Online (Sandbox Code Playgroud)

transcode ffmpeg node.js

3
推荐指数
1
解决办法
9068
查看次数

VLC 录制 rtsp 流

我在使用 VLC 播放器录制 rtsp 流时遇到问题。实际上我的方法适用于 MacOS X,但不适用于 Windows。命令行:

vlc -vvv rtsp://admin:admin@192.168.0.151/live/h264/ --sout="#transcode{vcodec=mp4v,vfilter=canvas{width=800,height=600}}:std{access=file,mux=mp4,dst=C:\123.mp4}"
Run Code Online (Sandbox Code Playgroud)

在 MacOS 上它工作正常,但在 Windows 下它会创建不可读的文件。媒体信息输出:

General
Complete name                            : C:\123.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom
File size                                : 1.08 MiB
Run Code Online (Sandbox Code Playgroud)

有什么建议?

transcode record vlc stream rtsp

2
推荐指数
2
解决办法
1万
查看次数

ffmpeg使用-ss和-to进行部分转码

我正在尝试使用ffmpeg实现部分转码.我目前使用的命令是:

ffmpeg.exe -ss start-time -i 源文件 -t duration -y -s 640x360 -b:v 1024k -vcodec libx264 -r 29.7 -movflags faststart -pix_fmt yuv420p outputfile

在ffmpeg文档中,我读到了-to参数:

- 到位置(输出)停止将输出写入位置.position可以是以秒为单位的数字,也可以是hh:mm:ss [.xxx]形式.

-to和-t是互斥的,-t具有优先权.

但是,当我试图以诚代替"-t",输出是一样的,我的意思后的值-to被当作了把视频的持续时间.我认为它会像结束时间那样对待价值.我错过了什么吗?

transcode command-line ffmpeg

1
推荐指数
1
解决办法
1230
查看次数

在视频中使用带有音频的 ffmpeg

我正在使用 ffmpeg 将一种视频格式转换为另一种:

“ffmpeg -ac 1 -i vid1.mp4 -sameq vid1.avi”

我收到错误:

“mp2 中不允许编码 6 个通道”

现在我明白这意味着什么 - 如果我关闭声音转码(使用“-an”选项),转码工作正常。我如何解决这个问题并仍然保留声音?

更多信息

输入文件:

似乎流 0 编解码器帧速率与容器帧速率不同:47.95 (5000000/104271) -> 23.98 (24000/1001) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'vid1.mp4': Duration : 00:02:03.24, 开始: 0.000000, 比特率: 8236 kb/s Stream #0.0(und): Video: h264, yuv420p, 1920x816, 23.98 tbr, 23.98 t95: aundc.ac. , 48000 Hz, 5.1, s16 必须至少指定一个输出文件

video transcode ffmpeg

1
推荐指数
1
解决办法
3391
查看次数