标签: ffmpeg

YouTube 和 Facebook 视频上传的 FFmpeg 设置

任何 FFmpeg 专家能否将他们首选的视频转换设置分享到 YouTube 和 Facebook?

对于 Youtube,我遵循这些准则,我的视频大小为 480P @ 24 fps

  • 音频编解码器:AAC-LC
  • 通道:立体声或立体声 + 5.1
  • 采样率 96khz 或 48khz
  • 视频编解码器:H.264
  • 逐行扫描(无隔行扫描)
  • 高调
  • 2个连续的B帧
  • 封闭的共和党。GOP 帧速率的一半。
  • CABAC
  • 可变比特率。无需比特率限制
  • 色彩空间:4.2.0

高级编码规范 - YouTube帮助

ffmpeg youtube-api

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

ffmpeg/avconv 强制缩放输出可被 2 整除

我用 avconv(又名 ffmpeg)录制我的桌面,然后将其缩放到 720p。

我最近添加到我的脚本中,以便他们可以使用 xwininfo 选择一个窗口,它会专门记录该窗口。

但是,如果输出格式不能被 2 整除,编码器就会出问题,我就看不到视频了。

有没有办法在 ffmpeg 中解决这个问题,这样我就不必在 bash 中进行大量手动数学运算来设置比例值?

如果它们不均匀,是否可以让比例过滤器在宽度/高度上减去/加一?(圆形的?)

是否可以在可以完成此操作的原始比例之后应用另一个过滤器?(这将舍入输入大小不均匀且没有缩放的视频)

#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Run Code Online (Sandbox Code Playgroud)

一些旧的邮件列表建议round()您可以在过滤器中使用一个函数,但我似乎无法正确理解语法。如果它有效scale=round(iw,2):round(ih,2),最后应用的过滤器将立即解决我的所有问题。iw并且ih似乎不起作用。

bash ffmpeg

10
推荐指数
3
解决办法
7204
查看次数

ffmpeg:无声删除部分:有效删除视频的几个部分

我正在尝试删除没有(或很少)音频的视频部分。为此,我使用了 audacity ( Analyze->Sound finder ) 并导出了Label Track。这会导致如下结果:

0.000000    5.170000    1
12.520000   12.630000   2
14.400000   15.660000   3
17.430000   22.150000   4
...
Run Code Online (Sandbox Code Playgroud)

使用这个正则表达式:([\d]+.[\d]{6})\t([\d]+.[\d]{6})\t([\d]+)\n>ffmpeg -i VL1.mp4 -strict -2 -ss \1 -to \2 buff.mp4\nffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'\nfile '/home/rene/videotest/buff.mp4'") -c copy output2.mp4\nrm buff.mp4\nmv output2.mp4 output.mp4\n和一些手动编辑,我得到了这个:

#!/bin/bash

ffmpeg -i VL1.mp4 -strict -2 -ss 0.000000 -to 5.170000 output.mp4
ffmpeg -i VL1.mp4 -strict -2 -ss 12.520000 -to 12.630000 buff.mp4
ffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'
file '/home/rene/videotest/buff.mp4'") …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg audacity

10
推荐指数
2
解决办法
5941
查看次数

在ffmpeg中合并两个具有透明度的视频

我使用以下命令将两个视频合并到一个文件中。不幸的是,第二个视频涵盖了第一个视频,并且不可见。如何使第二个视频透明(例如 50%)?

ffmpeg
    -i in1.mp4 -i in2.mp4
    -filter_complex "nullsrc=size=480x360 [base];
        [0:v] setpts=PTS-STARTPTS, scale=480x360 [top];
        [1:v] setpts=PTS-STARTPTS, scale=480x360 [bottom];
        [base][top] overlay=shortest=1 [temp];
        [temp][bottom] overlay=shortest=1"
    -acodec libvo_aacenc -vcodec libx264 out.pm4
Run Code Online (Sandbox Code Playgroud)

video ffmpeg transparency

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

从视频中提取的 ffmpeg 管道图像

我可以使用以下命令从使用 ffmpeg 的视频中提取图像,并将它们保存到文件系统:

... | ffmpeg -i - -f image2 'img-%03d.png'
Run Code Online (Sandbox Code Playgroud)

我想将这些图像通过管道传输到另一个应用程序,而不是将它们保存到文件系统 - 它们在管道中的分离方式并不重要,因为它将是我自己控制的 NodeJS 脚本。

以下不起作用:

... | ffmpeg -i - -f image2 pipe: | ...
Run Code Online (Sandbox Code Playgroud)

错误与

[image2 @ 0xe1cfc0] Could not get frame filename number 2 from pattern 'pipe:' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用文件系统的情况下使用 ffmpeg 从视频中提取图像?

video linux ffmpeg pipe

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

如何使用 FFMPEG 将 MP4 转换为 OGV,同时仍保持相同的质量?

我根本不熟悉 FFMPEG,想知道如何将 MP4 转换为 OGV 格式,同时仍保持相同的视频和音频质量?

ffmpeg

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

FFmpeg:无需重新编码即可重新创建时间戳

我有一个包含 H264 视频 (25 FPS) 的 MP4 文件。某些时间戳不正确(出于某些原因......)。我可以处理文件并只重新生成时间戳而不重新编码吗?我试过这个

ffmpeg -r 25 -i infile -c copy outfile
Run Code Online (Sandbox Code Playgroud)

但即使“-r”的文档说:

作为输入选项,忽略存储在文件中的任何时间戳, 而是假设恒定帧速率 fps 生成时间戳。

我也试过提到的建议,这里的底部:

ffmpeg -fflags +genpts -i infile -c copy outfile
Run Code Online (Sandbox Code Playgroud)

这也不会更改输出文件中的时间戳。还有其他方法可以执行此任务吗?时间戳是一种元数据,所以我认为它应该以某种方式成为可能。

ffmpeg timestamp

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

使用无损视频编解码器归档(单色)科学视频数据

基本问题: 以无损方式存储/存档科学视频数据的合适编解码器是什么

我正在尝试帮助我的研究小组存储/存档一些用显微镜记录的视频。这些(灰度)视频采用未压缩(原始视频)BGR24 格式,660x492@61fps,通常时长约 1 分钟。我的实验室伙伴们对这些文件的庞大规模(每个千兆字节)感到疯狂。我建议使用无损编解码器压缩它们。(这里需要无损是因为视频是科学数据;因此有损编解码器可能会以不良/意外方式改变内容。)

这是我尝试过的。首先,我抓取了其中一个视频的前 10 秒,并使用 FFMpeg 转换为单色(原始)格式。

ffmpeg -t 10 -i RecordedData.avi -c:v rawvideo -pix_fmt gray raw_gray.mkv
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用 libx264 的无损模式(通过设置-crf 0)来压缩生成的文件

ffmpeg -i raw-gray.mkv -c:v libx264 -crf 0 -pix_fmt yuv420p -color_range pc x264-yuv420p.mkv
Run Code Online (Sandbox Code Playgroud)

最后,我从 raw 和 h264 MKV 文件中提取了原始 YUV 数据并进行了比较。

ffmpeg -i raw-gray.mkv -c:v rawvideo -pix_fmt gray raw-gray.yuv
ffmpeg -i x264-yuv420p.mkv -c:v rawvideo -pix_fmt gray x264-decompressed.yuv
diff -sq raw-gray.yuv x264-decompressed.yuv
Run Code Online (Sandbox Code Playgroud)

在这里,diff命令报告当我期望它们相同时文件不同。为什么是这样?这只是一些轻微的舍入错误,还是我在进行 H264(据称是无损)压缩后可能会丢失一些东西?发生了一些像素格式转换 ( gray (YUV400) <-> YUV420),但颜色 (UV) …

video compression codec ffmpeg

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

将 Opus 转换为 AAC 的推荐设置

我正在从 Youtube 下载一些音乐,似乎在大多数情况下(流行视频),最佳质量的音频是 opus 文件。

我知道 (1) Opus 是最新且更高效的编解码器,并且 (2) 不建议从一种有损编解码器转换为另一种。

但是,由于我想在 Windows/iOs/car 中使用相同的文件,即使用相同的容器,我想转换为 AAC 或 MP3。

我在这里读到,您可以通过为目标编解码器使用更高的比特率来在一定程度上减轻生成损失。

那么您建议使用哪些设置(例如 ffmpeg)将 opus 文件转换为 AAC 以保持相同的音频质量(我知道这是主观的...)?

根据youtube-dl -F数据是 160kbs,但下载时,MediaInfo 给出了 127Kbps 的整体比特率和 48Khz 的采样率。

192kbs 是 AAC 文件的好选择吗?(我认为 AAC 在任何情况下都比 MP3 更好?)我知道从 CD 或无损中,最推荐使用 VBR,但是对于 Opus 的转码,CBR 会更好吗?我应该保留 opus 文件中的 48khz 采样率,还是下采样到通常的 AAC 的 44.1khz?

最后,youtube-dl 还可以下载 128 kbs 的 AAC 文件。鉴于 opus 更高效/更好,在相同比特率下质量会更高。但是将作品转码为 AAC(例如 192kbs/212kbs)会保持这种质量差异,还是转码(甚至到更高的比特率)会导致伪影,因此 192kbs AAC 文件的音频质量实际上会比 AAC 128kbs 差文件 ?

编辑

让我解释一下为什么我在“概念上”难以理解如何确定转码的优化设置。

在大多数情况下,您从无损文件(例如 …

audio codec ffmpeg aac youtube-dl

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

使用 h265 编解码器生成 hls 流

我正在尝试将h264视频转换为使用h265编解码器的 hls 流。由于这bitmovin文章指出,我们需要使用fragmented mp4hls/h265流工作在Safari。

  1. 我可以使用此命令正确转换h264h265

    ffmpeg -i input.mp4 -c:v libx265 -tag:v hvc1 out.mp4
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我可以使用此命令将输入视频 ( h264)转换为 hls ( fragmented mp4)

    ffmpeg -y -i input.mp4 \
        -c copy -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
        -hls_flags delete_segments+append_list+split_by_time \ 
        -hls_playlist_type vod manifest.m3u8
    
    Run Code Online (Sandbox Code Playgroud)

现在,当我通过指定使用上述命令时h265,输出 hls 流在 Safari 中不起作用。它抛出这个错误

Plugin Handled Load
Run Code Online (Sandbox Code Playgroud)

命令

ffmpeg -y -i input.mp4 \
    -vf scale=640:360 -c:v libx265 -tag:v hvc1 -c:a copy \ …
Run Code Online (Sandbox Code Playgroud)

ffmpeg streaming h.265 hls

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