Rob*_*ert 0 audio video ffmpeg video-processing
我正在使用ffmpeg将.mkv和.mka文件合并为.mp4文件。我当前的命令如下所示:
ffmpeg -i video.mkv -i audio.mka output_path.mp4
Run Code Online (Sandbox Code Playgroud)
音频和视频文件是Amazon S3的预签名URL。即使在具有足够资源的服务器上,此过程也会非常缓慢。我研究了可以告诉ffmpeg跳过每个帧重新编码的情况,但是我认为在我的情况下实际上确实需要重新编码每个帧。
我已经将2个示例文件下载到了我的Macbook Pro,并通过自制软件在本地安装了ffmpeg。当我运行命令
ffmpeg -i video.mkv -i audio.mka -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, matroska,webm, from '319_audio_1498590673766.mka':
Metadata:
encoder : GStreamer matroskamux version 1.8.1.1
creation_time : 2017-06-27T19:10:58.000000Z
Duration: 00:00:03.53, start: 2.831000, bitrate: 50 kb/s
Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
title : Audio
Input #1, matroska,webm, from '319_video_1498590673766.mkv':
Metadata:
encoder : GStreamer matroskamux version 1.8.1.1
creation_time : 2017-06-27T19:10:58.000000Z
Duration: 00:00:03.97, start: 2.851000, bitrate: 224 kb/s
Stream #1:0(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 30 tbr, 1k tbn, 1k tbc (default)
Metadata:
title : Video
[mp4 @ 0x7fa4f0806800] Could not find tag for codec vp8 in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
Stream #1:0 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)
Last message repeated 1 times
Run Code Online (Sandbox Code Playgroud)
因此看来,我正在使用的特定编码是vp8视频和opus音频文件,我认为它们与.mp4输出容器不兼容。我希望能得到涵盖将vp8和opus最佳地合并到.mp4输出中的方式的答案,或者将我指向与vp8和opus兼容并且可以在Web和移动设备上播放的输出媒体格式的方向,以便我可以绕过重新编码步骤。
编辑:
在遵循LordNeckbeard的建议后,只想提供一个基准:
4 min 41 second video transcoded locally on my mac
LordNeckbeard’s approach : 15 mins 55 seconds (955 seconds)
Current approach : 18 mins 49 seconds (1129 seconds)
18% speed increase
Run Code Online (Sandbox Code Playgroud)
您可以用于ffmpeg将MKV和MKA多路复用和/或重新编码为Web浏览器兼容格式,例如Webm或MP4。
如果您输入的是VP8或VP9视频以及Vorbis或Opus音频,例如问题中的输入,则可以将其混入Webm。这应该很快,因为它不会重新编码:
ffmpeg -i video.mkv -i audio.mka -c copy output.webm
Run Code Online (Sandbox Code Playgroud)
默认的流选择行为是为每种流类型选择一个流,因此-map可以告诉它选择哪些流以防止错误。例如,如果两个输入都包含多个流,但您只想从中的第一个视频流video.mkv和第一个音频的流audio.mka:
ffmpeg -i video.mkv -i audio.mka -map 0:v:0 -map 1:a:0 -c copy -movflags +faststart output.webm
Run Code Online (Sandbox Code Playgroud)
ffmpeg -i video.mkv -i audio.mka -c copy -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)
-movflags +faststart之所以被添加是因为您提到了网络播放。这将允许视频在客户端完全下载之前开始播放。您需要重新编码:
ffmpeg -i video.mkv -i audio.mka -c:v libvpx-vp9 -crf 33 -b:v 0 -c:a libopus output.webm
Run Code Online (Sandbox Code Playgroud)
VP9真的很慢。如果要VP8,请使用-c:v libvpx。有关更多信息,请参见FFmpeg Wiki:VP8和FFmpeg Wiki:VP9。
如果没有libopus支持,请改用libvorbis。
ffmpeg -i video.mkv -i audio.mka -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)
对于视频,请使用来控制质量,-crf并使用来控制编码速度-preset。有关更多信息,请参见FFmpeg Wiki:H.264和FFmpeg Wiki:AAC。
如果目标设备受H.264配置文件限制,则可以添加-profile:v main或添加-profile:v baseline。
ffprobe 用于脚本您可以制作一个脚本来自动执行此操作。ffprobe可以用来确定格式:
$ ffprobe -loglevel error -select_streams v:0 -show_entries stream=codec_name -of csv=p=0 video.mkv
h264
$ ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of csv=p=0 audio.mka
aac
Run Code Online (Sandbox Code Playgroud)
的ffprobe输出可被用作在if / then语句变量。
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |