我想批量转换包含数百个FLV文件的目录,以便每个文件都具有MP4等效项.我正在尝试通过编写shell脚本并从终端运行它来自动执行此过程.我该怎么做呢?大多数可用的指令都是针对使用ffmpeg的Linux,但我认为OS X没有它.谢谢.
也就是说,取foo.mp4和bar.mp4并生成foobar.mp4,这只是foo.mp4,然后是bar.mp4?(对于额外的功劳,如果能够做到这一点,它还可以结合foo.mp4和bar.mov吗?)
我可能还想做一些其他转码的事情,但是现在我关注的是串联问题.谢谢!
我正在寻找一个库/模块,它可以动态地将MP3(其他格式是加号)转码到OGG.
我需要的是:我正在编写一个相对较小的网络应用程序,供个人使用,这将允许人们通过浏览器收听他们的音乐.对于聆听部分,我打算使用新的强大<audio>标签.但是,很少有浏览器支持MP3.实时转码似乎是最好的选择,因为它不会浪费磁盘空间(就像我要转换整个音乐库一样)而且我不会遇到性能问题,因为最多会有2-3个听众同时出现.
基本上,我需要提供一个MP3(或其他任何东西),然后得到一个类似文件的对象,我可以传回我的框架(flask顺便说一句),以提供给客户端.
我看过的东西:
gstreamer - 虽然对很多格式都有很好的支持,但看起来有点矫枉过正; 文档缺乏可怕性timeside - 看起来不错,使用简单,但它又有很多我不需要的东西(图形,分析,UI ......)建议?
我正在向高比特率的HLS流录制连续的实时流.然后我想异步地将其转码为不同的格式/比特率.除了音频人工制品出现在每个片段(间隙和弹出片段)之外,我主要使用它.
这是一个示例ffmpeg命令行:
ffmpeg -threads 1 -nostdin -loglevel verbose \
-nostdin -y -i input.ts -c:a libfdk_aac \
-ac 2 -b:a 64k -y -metadata -vn output.ts
Run Code Online (Sandbox Code Playgroud)
检查示例声音文件显示音频末尾有间隙:

并且文件的开头看起来可疑地减弱了(尽管这可能不是问题):

我怀疑这些人工制品正在发生,因为转码是在没有整个流的背景下发生的.
关于如何说服FFMPEG产生适合HLS流的音频的任何想法?
**更新1**
以下是原始细分的开始/结束.正如你所看到的,开始时看起来仍然相同,但最终在30s结束时干净利落.我期望有一定程度的填充与有损编码,但我有一些方法,HLS设法做无间隙播放(这与iTunes方法与自定义元数据有关吗?)

**更新2**
因此,我将原始(128k aac in MPEG2 TS)和转码(64k aac in aac/adts容器)转换为WAV并将两者并排放置.这是结果:

我不确定这是否代表了客户端如何播放它,但解码转码后的解码器在开始时引入了一个间隙并使段更长时间似乎有点奇怪.鉴于它们都是有损编码,我希望填充在两者中同样存在(如果有的话).
**更新3**
根据http://en.wikipedia.org/wiki/Gapless_playback-只有少数编码器支持无间隙 - 对于MP3,我在ffmpeg中已经变得蹩脚,到目前为止,这个问题似乎已经消失了.
对于AAC(请参阅http://en.wikipedia.org/wiki/FAAC),我尝试了libfaac(而不是libfdk_aac),它似乎也产生了无间隙音频.然而,后者的质量并不是那么好,我宁愿使用libfdk_aac也是可能的.
我正在使用ffmpeg库编写音频转码应用程序.这是我的代码
/*
* File: main.cpp
* Author: vinod
* Compile with "g++ -std=c++11 -o audiotranscode main.cpp -lavformat -lavcodec -lavutil -lavfilter"
*
*/
#if !defined PRId64 || PRI_MACROS_BROKEN
#undef PRId64
#define PRId64 "lld"
#endif
#define __STDC_FORMAT_MACROS
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <stdint.h>
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/frame.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
#include <libavfilter/buffersrc.h>
#include <libavfilter/buffersink.h>
#include <libswscale/swscale.h>
#include <libavutil/opt.h>
#ifdef __cplusplus
}
#endif
#include <iostream>
using namespace std;
int select_stream, …Run Code Online (Sandbox Code Playgroud) 我有一个Movie.Manifest.mpd文件,由5个.webm视频流(由不同大小和bps组成)和1个音频文件组成.我问的问题是:它可以通过"简单"的HTML5视频标签播放吗?
我试过这个并不起作用:
<video controls>
<source src = "Movie_Manifest.mpd"/>
</video>
Run Code Online (Sandbox Code Playgroud)
它有效,但它选择质量最低的视频流,输出是滞后的.我希望它有自适应比特流.您可能会想,"您认为您的带宽是那么慢吗?" 是的,我的带宽很慢,但不是那么慢.此外,当我自己运行低质量的webm文件时,它运行顺畅.
重申一下:
1)我可以使用"简单"HTML5视频标签进行自适应比特流传输吗?
要么
2)我是否必须使用开源媒体播放器(视频标签将通过javascript访问)?
谢谢,快乐流媒体
我正在使用带有node.js的fluent-ffmpeg库将最初采用flash电影格式的视频转码为具有多种分辨率,1080p等的mp3格式.一旦转码完成,我想将转码后的视频移动到s3桶.
我从源s3存储桶中提取原始的.flv文件,并将该流传递给ffmpeg构造函数.问题是在转码完成后,我如何获得要发送到s3的mp4数据流.
这是我到目前为止的代码:
var params = {
Bucket: process.env.SOURCE_BUCKET,
Key: fileName
};
s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
var format = ffmpeg(data)
.size('854x480')
.videoCodec('libx264')
.format('flv')
.toFormat('mp4');
.on('end', function () {
//Ideally, I would like to do the uploading here
var params = {
Body: //{This is my confusion, how do I get the stream to add here?},
Bucket: process.env.TRANSCODED_BUCKET,
Key: fileName
};
s3.putObject(params, function (err, data) {
});
})
.on('error', function (err) {
console.log('an …Run Code Online (Sandbox Code Playgroud) 我有多个 360 度视频,正在尝试在 ffmpeg 中连接。命令本身非常简单:
ffmpeg -f concat -i 0036_concat.txt -c copy -strict unofficial 36.mp4
Run Code Online (Sandbox Code Playgroud)
其中0036_concat.txt只是单个文件的列表。我遇到的问题是我无法让 ffmpeg 保留辅助数据。非常简单地说,ffprobe任何源文件都包含以下内容:
Side data:
spherical: equirectangular (0.000000/0.000000/0.000000)
Run Code Online (Sandbox Code Playgroud)
而且我一生都无法将其传播到输出文件。
这个问题有一个适用于单个文件的解决方案,但在连接多个文件时不起作用。
如果有人知道如何注入整个字符串,我会非常好。
我一直在尝试实现一个类似 Plex 的视频播放器,可以按需转码任意视频文件,并在网页上使用 MPEG-Dash 播放它。我能够使用dash.js参考实现来实现客户端播放器,因此它将动态地从服务器请求片段(SegmentTemplate在 mpd 文件中使用)。
但我在实时生成这些块时遇到一些问题。Ffmpeg 允许我设置-ss和-t定义所需片段的边界,但它们无法在播放器中正常播放,因为它们是“完整”视频文件而不是 Dash 片段。
那么,如何调整 ffmpeg 命令以将我需要的部分转码为 Dash 片段,而无需提前生成整个视频文件的片段?
输入视频文件可以是任何格式,因此不能假设它采用 mp4/dash 兼容的编解码器。因此需要转码(使用ffmpeg或类似工具)。
我当前的 ffmpeg 命令如下所示(经过多次尝试):
ffmpeg -ss 10 -t 5 -i video.mkv -f mp4 -c:a aac -c:v h264 -copyts -movflags empty_moov+frag_keyframe temp/segment.mp4
Run Code Online (Sandbox Code Playgroud)
客户端播放器应该能够缓冲接下来的 X 段,并且用户应该能够查看持续时间栏上的当前位置并寻找不同的位置。因此,将其视为直播并不是一个选择。
24 位样本大小对于 PCM/WAV 数据来说并不罕见,因此我很惊讶地看到这一点:
Invalid sample format 's24'
Run Code Online (Sandbox Code Playgroud)
...当我运行这个时:
ffmpeg -i input.oga -y -f wav -ar 44100 -sample_fmt s24 -ac 2 output.wav
Run Code Online (Sandbox Code Playgroud)
当我查看 ffmpeg FAQ 页面时,它说它不支持签名的 24 位样本大小。
很公平,但我很难接受这个支持大量格式的非常强大的工具在某种程度上缺少对这种真正常见的样本宽度的支持。
我能想到的是,也许这是一个构建配置问题。
所以这个问题是...
有没有办法配置 ffmpeg 以支持签名的 24 位 WAV 输出?