我需要提供什么来防止Handbrake在转换为MP4时丢失源视频的质量.我已经阅读了所有文档,我可以看到它的限制,但我找不到如何告诉Handbrake忽略默认设置并保留现有设置.
我正在考虑将来使用VP9对我的BluRays进行编码,因为它是一个开源编解码器.但我无法让Handbrake或ffmpeg使用超过50%(4)的我的(8)核心.因此,编码时间比使用所有内核的x264/5差得多.
在Handbrake我只是将编码器设置为VP9和CQ19.如果我在参数字段中添加"threads 8","threads 16"或"threads 64",则没有区别.
在命令行中测试ffmpeg(" - c:v libvpx-vp9 -crf 19 -threads 16 -tile-columns 6 -frame-parallel 1 -speed 0")也不再使用任何cpu线程.
当前编码器是否能够在4个以上的线程上进行编码,或者我做错了什么?
我正在创建这个与handbrakecli一起使用的批处理文件,将avi批量转换为mp4.
但是我陷入了如何继续循环并跳过循环中的当前文件.
FOR /R "%somepath%" %%G in (*.avi) DO (
rem skip if filename contains word trailer
rem skip if file name contains word sample
rem do conversion
)
Run Code Online (Sandbox Code Playgroud)
这当前不能跳过包含预告片或示例的文件
我尝试过使用find或findstr,但都无法跳过.
echo "%%G" | c:\windows\system32\findstr /i "trailer" > NUL
If %ERRORLEVEL% EQU 1 set skip Yes
Run Code Online (Sandbox Code Playgroud)
这是样品.
echo "%%G" | c:\windows\system32\findstr /i "sample" > NUL
If %ERRORLEVEL% EQU 1 set skip Yes
Run Code Online (Sandbox Code Playgroud)
如果文件包含预告片或样本,我不想进行任何handbrakecli转换,只是跳过它.
我做echo来显示哪些文件被转换,它确实包含名称中包含Sample或sample的文件.
我尝试过使用find或findstr,但都没有将skip设置为yes
如果跳过==不做(rem做转换)
我只想转换非预告片/样本avi文件.
感谢您的时间.
我想用HandBrake将许多.iso文件转换为.mp4,所以我试图使用命令行界面.我更愿意在powershell而不是批处理文件中编写我的脚本.但是,如果我使用PowerShell,则标准错误包含随机位置的换行符.
为了排除故障,我在PowerShell和批处理中创建了一个简化的脚本.
电源外壳:
& "$Env:ProgramFiles\HandBrake\HandBrakeCLI.exe" @(
'--input', 'V:\',
'--title', '1', '--chapter', '1',
'--start-at', 'duration:110', '--stop-at', 'duration:15',
'--output', 'pmovie.mp4',
'--format', 'av_mp4'
) > ".\pstd.txt" 2> ".\perr.txt"
Run Code Online (Sandbox Code Playgroud)
批处理文件:
"%ProgramFiles%\HandBrake\HandBrakeCLI.exe" --input V:\ --title 1 --chapter 1 --start-at duration:110 --stop-at duration:15 --output ".\cmovie.mp4" --format av_mp4 > ".\cstd.txt" 2> ".\cerr.txt"
Run Code Online (Sandbox Code Playgroud)
两个脚本都创建相同的.mp4文件,区别仅在于它们创建的标准错误输出:
电源外壳:
HandBrakeCLI.exe : [10:41:44] hb_init: starting libhb thread
At C:\Test\phandbrake.ps1:1 char:2
+ & <<<< "$Env:ProgramFiles\HandBrake\HandBrakeCLI.exe" @(
+ CategoryInfo : NotSpecified: ([10:41:44] hb_i...ng libhb thread
:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
[10:41:44] thread 541fc20 …
Run Code Online (Sandbox Code Playgroud) powershell powershell-1.0 io-redirection redirectstandardoutput handbrake
首先,我四处寻找我的问题。但没有人能解决它。
我想转换一个目录中的所有视频文件,输出将保存在另一个目录中。我从某个我不记得的地方得到了一个 bash 脚本。
#!/bin/bash
SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE"
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100"
DEST_EXT=mp4
HANDBRAKE_CLI=HandBrakeCLI
PRESET="iPhone & iPod Touch"
for FILE in "`ls $SRC`"
do
filename=$(basename $FILE)
extension=${filename##*.}
filename=${filename%.*}
$HANDBRAKE_CLI -i "$SRC"/$FILE -o "$DEST"/"$filename".$DEST_EXT "$PRESET"
done
Run Code Online (Sandbox Code Playgroud)
问题是,文件的输出将没有文件名......只有“.mp4”。并且,只生成了 1 个文件.. 意味着,从文件夹中的 50 个视频中,只生成了 1 个名为“.mp4”的文件,之后,HandBrakeCLI 退出。谁能修复我的代码?我在 bash 编码方面没有经验......所以,正确的脚本将不胜感激:)
我想将一堆视频从 x264 转换为 x265,但我需要在终端中使用 ffmpeg 来执行此操作,因为它是远程服务器。这些是我的手刹选项(所列项目已勾选):
摘要选项卡
尺寸选项卡 不变
过滤器选项卡
视频选项卡
视频编解码器 - H.265 (x265)
帧速率 (FPS) - 30 - 峰值帧速率
质量 - 稳定的质量 - 28
编码器预设 - 中
编码器调整 - 无
编码器配置文件 - 自动
音频选项卡
字幕选项卡-无字幕(如果存在则删除)
这是到目前为止我已经成功编译的 ffmpeg 命令:
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac -b:a 128k -max_muxing_queue_size 400 -movflags +faststart output.mp4
我有以下两个问题:
-max_muxing_queue_size …
我试图找出是否有一种方法可以确定是否使用Dolby Pro Logic II数据对AAC编码的音轨进行了编码。有没有一种检查文件的方式,以便您可以查看此信息?例如,我已经在Handbrake中使用(截断为音频选项)对媒体文件进行了编码-E av_aac -B 320 --mixdown dpl2
,这是显示的音频轨道mediainfo
:
Audio #1
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 2h 5mn
Bit rate mode : Variable
Bit rate : 321 Kbps
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 48.0 KHz
Compression mode : Lossy
Stream size : 288 MiB (3%)
Title : Stereo / Stereo
Language : …
Run Code Online (Sandbox Code Playgroud) 我无法让Handbrake在C#中为我工作.它不断抛出错误"Value not not null"..正如您在下面的屏幕截图中看到的,我根据我所知道的尝试了几件事.我很感激你的任何指导,帮助我完成这项工作.
到目前为止我尝试了什么(点数与显示的错误无关.仅供参考):
我哪里不在正确的轨道上?
这是我的代码:
HandBrake.Interop.HandBrakeInstance objHb = new HandBrake.Interop.HandBrakeInstance();
HandBrake.Interop.Model.EncodeJob objJob = new HandBrake.Interop.Model.EncodeJob();
objJob.SourceType = HandBrake.Interop.Model.SourceType.File;
EncodingProfile objProfile = new EncodingProfile();
objProfile.OutputFormat = Container.Mp4;
objProfile.VideoEncodeRateType = VideoEncodeRateType.ConstantQuality;
objProfile.IPod5GSupport = true;
objProfile.PreferredExtension = OutputExtension.Mp4;
// objJob.EncodingProfile = objProfile;
objJob.SourcePath = AppDomain.CurrentDomain.BaseDirectory + "1.flv";
objJob.OutputPath = AppDomain.CurrentDomain.BaseDirectory + "1.mp4";
//objHb.Titles.Add(new HandBrake.Interop.SourceData.Title());
XmlSerializer objSerializer = new XmlSerializer(typeof(EncodingProfile));
MemoryStream mem=new MemoryStream(File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "normal.xml"));
var objPresetFromFile = objSerializer.Deserialize(mem) as EncodingProfile;
objJob.EncodingProfile = objPresetFromFile;
objJob.UseDefaultChapterNames = …
Run Code Online (Sandbox Code Playgroud) 我有一堆视频要转换,从flv到mp4.在Handbrake gui中,在Ubuntu中,我已经整理了所有设置.我把它保存为一个名为"全平板电脑"的预设.
我需要在不同的ubuntu机器上使用HandBrakeCLI,这只是命令行.所以,我有两个选择,我可以看到,我无法弄清楚如何做其中任何一个:
1)看看手刹gui使用的设置是什么,所以我可以复制它们并直接使用HandBrakeCLI,根据需要替换文件名.
2)以这样的方式保存我的"全片"预设,我可以将其复制到另一台机器并在那里使用HandBrakeCLI.
选项2似乎更好.当我列出HandBrakeCLI中的可用预设时,它不会列出我的自定义预设,建议GUI版本将它们保存到与cli版本不同的地方.
有什么建议?谢谢,马克斯
我想使用 Handbrake 将我的视频从 mkv 转换为 mp4。但我希望将 mkv 中包含的所有音频文件和字幕放入新的 mp4 容器中!
我使用 Handbrake 0.9.9 GUI,因为在此版本中,您可以在首选项('Add all remaining'
/ )下预定义默认的音轨和字幕数量'Add all'
。现在我想通过 HandBrakeCLI 实现相同的目标。
几个小时我一直在摸着这个.
我正在尝试编写一个简单的脚本,使用HandbrakeCLI将.AVI格式的旧视频转换为.mp4,我无法让Handbrake注册正确的参数,我不断收到"缺少输出文件名.运行C:/ Program Files /Handbrake/HandbrakeCLI.exe - 帮助获取语法.\ r \n"错误.
这是我到目前为止所拥有的
import glob
import os
import handbrake
hb = handbrake.HandbrakeEncode
mydir = "C:\\Path\\To\\MyVids\\"
os.chdir(mydir)
filesList = []
for files in glob.glob("*.avi"):
filesList.append(mydir + files)
print(mydir + files)
#this prints the correctly assembled path and file as expected
for files in filesList:
print("Encoding file: " + files)
hb(files)
Run Code Online (Sandbox Code Playgroud)
而hb功能是:
def HandbrakeEncode(filepath):
import subprocess
import os
from subprocess import Popen, PIPE
outputPath, fileExtension = os.path.splitext(filepath)
outputPath += ".mp4"
args = '-i ' + …
Run Code Online (Sandbox Code Playgroud)